18761489033 发表于 2015-3-15 12:50:09

流水灯问题

小弟刚学,第一个流水灯就遇到问题,请教各位大神。
程序如下,我也知道这不能实现流水灯,但是对于我打//的位置的语句我不能理解,
我觉得一开始是led=4'b1111,计数器cnt=4999时,led=4'b1110,然后led=4'b0111,
但是我仿真的结果却显示在cnt=4999的时候,led=4'b1111,并没有编程4’b1110或者4'b0111
module        liushuideng_1        (
                        input        wire                sclk,
                        input        wire                s_rst_n,
                       
                        output        reg        led
                        );
                       
        reg        cnt;
        reg                flag;
       
        parameter        CNT        =                49_99;
                       
        always@(posedge        sclk        or        negedge        s_rst_n)
                if(s_rst_n == 1'b0)
                        cnt        <=        26'd0;
                else if(cnt ==        CNT)
                        cnt        <=        26'd0;
                else
                        cnt        <=        cnt        +        26'd1;
                       
        always@(posedge sclk or negedge s_rst_n)
                if(s_rst_n==1'b0)
                        led        <=        4'b1111;
                else if(cnt==CNT)
                        begin
//                        led        <=        4'b1110;
//                        led        <=        {led,led};
                        end
                else
                        led        <=        led;

endmodule
               

逢缘合 发表于 2015-3-19 11:11:54

led      <=      {led,led};这句是利用位拼接符产生移位寄存器,,,,每次计数完成后都把新的变量led的最低位放到最高位,拼接成一个新的寄存器变量,每个计数周期进行重新拼接一次,即移位一次,
页: [1]
查看完整版本: 流水灯问题