微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于CPLD中用Verilog编程中循环移位问题

关于CPLD中用Verilog编程中循环移位问题

时间:10-02 整理:3721RD 点击:
程序是一个跑马灯的编程,其中有一点看不懂下面是整个程序
/*跑马灯实验:利用计数器轮流点亮LED灯,实现各种动态效果。
*/
module ledwater(clk,rst,dataout);
input clk,rst;
output[11:0] dataout;
reg[11:0] dataout;
reg[22:0] cnt;
always@(posedge clk or negedge rst)
begin
        if(!rst) begin
                cnt<=0;
                dataout<=12'b111110_011111;//为0的bit位代表要点亮的LED的位置
         end
        else begin
                cnt<=cnt+1;
                if(cnt==23'h7fffff) begin
                        dataout[4:0]<=dataout[5:1];
                        dataout[5]<=dataout[0];
                        dataout[11:7]<=dataout[10:6];
                        dataout[6]<=dataout[11];
                 end
         end
end
endmodule

上面红色的是实现移位功能,不是太理解,它是怎么实现的;难道是
dataout[4:0]<=dataout[5:1];
实现功能:
dataout[1]状态给dataout[0],然后dataout[2]状态给dataout[1],
dataout[3]状态给dataout[2],dataout[4]状态给dataout[3],dataout[5]状态给dataout[4].


dataout[5]<=dataout[0];
实现功能:
实现dataout[0]状态给dataout[5];

下面两句也是同个道理。


二极管是 低电平亮
有几个疑问就是 1     为什么分开写,不直接写出  dataout[10:0]<=dataout:11:1];
dataout[11]<=dataout[0];(我用的板子是两排二极管,每排6个)
                      2     程序一开始也没写出第一位是0状态,其余是1状态,然后就开始循环移位。
希望大神可以帮帮忙,ths!





Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top