笔记1 关于异步复位同步释放的理解

先看代码:

 深入浅出玩转fPGA-读书笔记_触发器

 

 

其中有两个always语句,把2个触发器叠加,当按下复位信号rst_n是,两个触发器都复位(清零)。当rst_n释放时,重点就来了,rst_n释放的时刻可能在时钟信号的上升沿之前,之中或之后,这里,关键就是rst_n从0变到1时,若clk上升沿的建立时间,稳定时间,保持时间,可能抓到的rst_n是0,1或亚稳态,用两级触发器的好处,就是多一个时钟周期的延时,这样在第2级触发器的输出是个确定的复位信号。因为,若抓取异步复位信号是亚稳态,第二级首先一个时钟周期的输出还是前一级的触发器输出(0),等到下一个时钟,抓取的复位信号释放稳定了,依然输出前一级的输出(1)。这样,用两级触发器,即利用了FPGA里的异步复位端口,又可以得到确定的复位及服务释放信号,无非是复位释放时多了一个时钟周期而已,而这一点延时,对于复位操作来说,一是可以忽略不计,二是可以产生稳定的复位信号。结论就是,这个异步复位,同步释放的代码,可以存储起来,长期使用。

 

异步复位,同步释放的RTL视图

 深入浅出玩转fPGA-读书笔记_异步复位_02

 

 

异步复位,同步释放的仿真结果

深入浅出玩转fPGA-读书笔记_触发器_03

 

 

从上面的仿真结果,可以看到,复位信号延时了一个时钟周期输出,异步的表现就是复位时,随时清零;同步的表现就是,便是延时一个时钟。另外,异步的优先级高于同步。