【精品博文】从零开始学FPGA系列练习一:计数器设计
啦啦啦,我又开始写博客了,希望这次能一直坚持下去,养成总结的好习惯脉冲功能描述:当收到en=1时,dout产生一个宽度为10的高电平脉冲。信号列表:信号名I\O位宽clkI1enI1doutO1波形图:
从零开始学FPGA,计数器练习。一、 计数器编写规范1. 计数器规则1:计数器逐一考虑三要素,初值、加1条件和结束值;2. 计数器规则2:以下是计数器一般形式。assign 加1条件 = xxxx;assign 结束条件 = (加1条件)&&(结束值)always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)begincnt <= 初值; 1’b0endelse if(加1条件) begin dout==1if(结束条件) cnt ==9cnt <= 初值; 0elsecnt <= cnt +1;endend3. 计数器规则3:计数初值必须为0;4. 计数器规则4:结束条件必须是加1条件;5. 计数器规则5:结束后必须回到0;6. 计数器规则6:结束值必须是n-1的形式;7. 计数器规则7:assign形式必须为:(加1条件)&&(cnt==计数值-1)8. 计数器规则8:限定范围必须用“>=”和“<”两种符号;9. 计数器规则9:cnt==x-1,不表示数到x;只有当“(cnt==x-1)”并且“加1条件”有效时,才表示数到x。10. 计数器规则10:设计步骤,先写计数器的always段,条件用名字代替;然后用assign写出加1条件;最后用assign写出结束条件。11. 计数器规则11:加1条件必须与计数器严格对齐。其他信号向计数器对齐。12. 计数器规则12:命名必须符号规范;13. 计数器规则13:减1计数器暂时不用。根据练习题目,用TimeGen实现的波形,计数从0~9。
代码实现如下:module(clk,rst_n,en,dout);input clk;input rst_n;input en;output dout;wire clk;wire en;reg dout;reg[1:0] cnt;assign add_cnt =(dout ==1);assign end_cnt =(cnt == 9)&&add_cnt;always @(posedge clk or negedge rst_n)beginif(rst_n == 1'b0)begincnt <= 1'b0;endelse if(add_cnt) beginif(end_cnt)cnt <= 0;elsecnt <= cnt+1;endendalways @(posedge clk or negedge rst_n )beginif(rst_n==1'b0)begindout <= 1'b0;endelse beginif(en==1'b1)begindout <= 1'b1;endelse beginif(end_cnt)dout <= 0;elsedout <= dout;endendendendmodule