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

硬件设计:

LED的点亮:
对应管脚的连接 高电平
FPGA笔记2——应用之流水灯FPGA笔记2——应用之流水灯流水灯的状态变化需要时间间隔,所以需要计时器

代码:

//定义模块名

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


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

上一篇:数字asic流程实验(三) Verilog编写&前仿真


下一篇:常见计数器