复位与释放(异步复位,同步释放)
同步复位rst、同步置数load(置数信号只有在时钟上升沿到来时才能生效)、同步清零clr
同步复位:
always@(posedge clk)
if(!rst_n) b<=1'b0;
else b<=a;
同步复位信号rst必须至少长于一个时钟周期,否则这个复位信号引起的变化不会被检测到
异步复位:
always@(posedge clk or negedge rst_n)
if(!rst_n) b<=1'b0;
else b<=a;
亚稳态
若异步复位信号在释放时,刚好发生在时钟有效沿附近,会出现释放时与clk竞争,容易使寄存器输出出现亚稳态
减少亚稳态:两个触发器
当rst复位1→0,直接两个触发器复位
当释放0→1,第一个出现亚稳态,第二个会消除亚稳态,也就是打两拍
模为60的BCD码计数器
分析
1.个位<9且十位<5,个位+1
2.个位=9且十位<5,个位=0,十位+1
3.个位=9且十位=5,个位=0,十位=0
实现
思考
第一个always块中load置1的上升沿qout直接为50,第二个always块中qout为59的下一个上升沿cout置1,这是因为load是在tb中赋值,会被立即拉高