打印
[verilog]

各位大哥 能帮小弟看下这段程序啥意思吗?

[复制链接]
1297|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
3008202060|  楼主 | 2014-6-26 15:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

module demux(
        input clk_108m,
        input clk_27m,
        input[7:0] vin_data,
        output reg[7:0] vout_data_ch0,
        output reg[7:0] vout_data_ch1,
        output reg[7:0] vout_data_ch2,
        output reg[7:0] vout_data_ch3
);
reg[1:0] vin_cnt;
reg[7:0] data0,data1,data2,data3;
reg[7:0] data0_d0;
reg[7:0] data1_d0;
reg[7:0] data2_d0;
reg[7:0] data3_d0;
reg[7:0] data0_d1;
reg[7:0] data0_d2;
reg[7:0] data0_d3;
reg[7:0] data0_d4;
reg[3:0] data0_id;
always@(posedge clk_108m)
begin
        vin_cnt <= vin_cnt + 2'd1;
end

always@(posedge clk_108m)
begin
        case(vin_cnt)
                2'd0:
                        begin
                                data0 <= vin_data;
                                data1 <= data1;
                                data2 <= data2;
                                data3 <= data3;
                        end
                2'd1:
                        begin
                                data0 <= data0;
                                data1 <= vin_data;
                                data2 <= data2;
                                data3 <= data3;
                        end
                2'd2:
                        begin
                                data0 <= data0;
                                data1 <= data1;
                                data2 <= vin_data;
                                data3 <= data3;
                        end
                2'd3:
                        begin
                                data0 <= data0;
                                data1 <= data1;
                                data2 <= data2;
                                data3 <= vin_data;
                        end
                default:
                        begin
                                data0 <= data0;
                                data1 <= data1;
                                data2 <= data2;
                                data3 <= data3;
                        end
        endcase
end

always@(posedge clk_27m)
begin
        data0_d0 <= data0;
        data1_d0 <= data1;
        data2_d0 <= data2;
        data3_d0 <= data3;
        data0_d1 <= data0_d0;
        data0_d2 <= data0_d1;
        data0_d3 <= data0_d2;
        data0_d4 <= data0_d3;
end

always@(posedge clk_27m)
begin
        if(data0_d4 == 8'hff && data0_d3 == 8'h00 && data0_d2 == 8'h00)
                data0_id <= data0_d1[3:0];
        else
                data0_id <= data0_id;               
end
always@(posedge clk_27m)
begin
        case(data0_id)
                4'd0:
                        begin
                                vout_data_ch0 <= data0_d0;
                                vout_data_ch1 <= data1_d0;
                                vout_data_ch2 <= data2_d0;
                                vout_data_ch3 <= data3_d0;
                        end
                4'd1:
                        begin
                                vout_data_ch0 <= data3_d0;
                                vout_data_ch1 <= data0_d0;
                                vout_data_ch2 <= data1_d0;
                                vout_data_ch3 <= data2_d0;
                        end
                4'd2:
                        begin
                                vout_data_ch0 <= data2_d0;
                                vout_data_ch1 <= data3_d0;
                                vout_data_ch2 <= data0_d0;
                                vout_data_ch3 <= data1_d0;
                        end
                4'd3:
                        begin
                                vout_data_ch0 <= data1_d0;
                                vout_data_ch1 <= data2_d0;
                                vout_data_ch2 <= data3_d0;
                                vout_data_ch3 <= data0_d0;
                        end
                default:
                        begin
                                vout_data_ch0 <= data0_d0;
                                vout_data_ch1 <= data1_d0;
                                vout_data_ch2 <= data2_d0;
                                vout_data_ch3 <= data3_d0;
                        end
        endcase
end

endmodule

相关帖子

沙发
玄德| | 2014-6-27 10:47 | 只看该作者

大意是:
把输入数据 vin_data 拼接成 32 位,
当这个32位是个特定值(大概是0xFF000000)时,
再倒腾一通,输出。


使用特权

评论回复
板凳
ruiyu999| | 2014-7-2 09:33 | 只看该作者
新人来学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

48

主题

200

帖子

1

粉丝