其他分享
首页 > 其他分享> > FPGA笔记2——应用之流水灯

FPGA笔记2——应用之流水灯

作者:互联网

硬件设计:

LED的点亮:
对应管脚的连接 高电平
在这里插入图片描述在这里插入图片描述流水灯的状态变化需要时间间隔,所以需要计时器

代码:

//定义模块名

module flow_led1(

    //定义输入和输出信号
    
    input            sys_clk50,   //定义系统时钟50MHZ
    input            rst_n,       //定义外部按键复位信号,低电平有效
    
    output reg [3:0] led          //定义4个led,寄存器类型
);



//定义计数器

reg [23:0] cnt;                   //定义一个24位寄存器

    /*系统时钟50M,T=20ns,用计时器对系统时钟计数到0.2s,那么0.2s/20ns=10^7,至少需要24bit数据*/
   
always @(posedge sys_clk50 or negedge rst_n)
begin
    if(!rst_n)
        cnt <= 24'd0;
    else
        if(cnt == 24'd9999999)   //从0开始计数,故减一;用d是因为b位数太多了
            cnt <= 24'd0;
        else
            cnt <= cnt + 24'd1;  //1和0用b、d都可
end
    /*
    此处也可以用
        if(cnt < d10000000)
            cnt <= cnt + 24'd1;
        else
            cnt <= 24'd0;  
     */
     
            
//定义逻辑功能。通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
     
always @(posedge sys_clk50 or negedge rst_n) begin
    if (!rst_n)
        led <= 4'b0001;
    else if(cnt == 24'd9999999)
        led[3:0] <= {led[2:0],led[3]};   //实现移位
        //{}可以实现位拼接,led[3:0]为0001,led[2:0]为初始化的末三位001,led[3]为初始化的高位的0,下一次循环也是
    else
        led <= led;
end

endmodule


不要小瞧一个小小的流水灯,复习了寄存器的数电知识,搞清原理,一行一行自己打出来并且理解,才算是真正学会。

标签:led,定义,FPGA,笔记,流水,寄存器,rst,input,时钟
来源: https://blog.csdn.net/m0_49372475/article/details/118995569