同步复位sync 异步复位async特点复位信号只有在时钟上升沿到来时才能有效。
无论时钟沿是否到来,只要复位信号有效,就进行复位。
Verilog描述always@(posedge CLK)always@(posedge CLK , negedgeRst_n)优点1)利于仿真器仿真。
2)因为只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
3)可以使所设计的系统成为100%的同步时序电路,有利于时序分析。
1)设计相对简单。
2)因为大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
3)异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
缺点1)复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。
同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
2)由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
1)复位信号容易受到毛刺的影响。
2)在复位信号释放(release)的时候容易出现问题。
具体就是说:若复位释放刚好在时钟有效沿附近时,很容易使寄存器输出出现亚稳态,从而导致亚稳态。
总结推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。
2:推荐的复位方式所谓推荐的复位方式就是上文中所说的:“异步复位,同步释放”。
这就结合了双方面的优点,很好的克服了异步复位的缺点(因为异步复位的问题主要出现在复位信号释放的时候,具体原因可见上文)。
其实做起来也并不难,我推荐一种我经常使用的方式吧:那就是在异步复位键后加上一个所谓的“reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过处理的复位信号去作用系统,就可以保证比较稳定了。
reset sychronizer的Verilog代码如下:module Reset_Synchronizer(output reg rst_n, input clk, asyncrst_n);reg rff1;always @ (posedge clk , negedge asyncrst_n) beginif (!asyncrst_n) {rst_n,rff1} <= 2'b0;else {rst_n,rff1} <= {rff1,1'b1};endendmodule大家可以看到,这就是一个dff,异步复位信号直接接在它的异步复位端口上(低电平有效),然后数据输入端rff1一直为高电平…1‟。
倘若异步复位信号有效的话,触发器就会复位,输出为低,从而复位后继系统。
但是,又由于这属于时钟沿触发,当复位信号释放时,触发器的输出要延迟一个时钟周期才能恢复成…1‟,因此使得复位信号的释放与时钟沿同步化。
此外,还有一种方法更为直接,就是直接在异步复位信号后加一个D触发器,然后用D触发器的输出作为后级系统的复位信号,也能达到相同的效果。
这里就不多说了。
3:多时钟系统中复位的处理方法这是一个很实际的问题,因为在较大型的系统中,一个时钟驱动信号显然不能满足要求,一定会根据系统的要求用多个同源时钟(当然也可以是非同源了)去驱动系统的不同部分。
那么在这样的多时钟系统中,复位键怎么设置?它的稳定与否直接关系到了整个系统的稳定性,因此要格外注意(在我看来,复位信号在同步时序系统中的地位和时钟信号一样重要)。
下面就说一下具体的处理方法,当然所遵循的原则就仍应该是上文的“异步复位,同步释放”:1.non-coordinated reset removal:顾名思义,就是同一个系统中的多个同源时钟域的复位信号,由彼此独立的“reset synchronizer”驱动。
当异步复位信号有效时,各时钟域同时复位,但是复位释放的时间由各自的驱动时钟决定,也是就说:时钟快的先释放,时钟慢的后释放,但是各复位信号之间没有先后关系。
2.sequence coordinated reset removal:这是相对于上述方式来说的,也就是说各时钟域的复位信号彼此相关,各个部分系统虽然也同时复位,但是却分级释放。
而分级的顺序可由各个“reset synchronizer”的级联方式决定。
可以先复位前级,再复位后级,也可以反过来。
反正方式很灵活,需要根据实际需要而定。
由于图片上传问题,我只能用程序表示了,例子:三级复位系统,系统中的时钟分别为1M,2M,11M:第一级Reset_Sychronizer程序:module Reset_Synchronizer(output reg rst_n,input clk, asyncrst_n);reg rff1;always @ (posedge clk , negedge asyncrst_n)beginif (!asyncrst_n) {rst_n,rff1} <= 2'b0;else {rst_n,rff1} <= {rff1,1'b1};endendmodule第2,3级的Reset_Sychronizer程序:module Reset_Synchronizer2(output reg rst_n,input clk, asyncrst_n,d);reg rff1;always @ (posedge clk , negedge asyncrst_n) beginif (!asyncrst_n) {rst_n,rff1} <= 2'b0;else {rst_n,rff1} <= {rff1,d};endendmodule顶层模块的源程序:include "Reset_Synchronizer.v"include "Reset_Synchronizer2.v"module AsynRstTree_Trans( input Clk1M,Clk2M,Clk11M,SysRst_n,output SysRst1M_n,SysRst2M_n,SysRst11M_n);Reset_Synchronizer Rst1M(.clk(Clk1M),.asyncrst_n(SysRst_n),.rst_n(SysRst1M_n));Reset_Synchronizer2Rst2M(.clk(Clk2M),.d(SysRst1M_n),.asyncrst_n(SysRst_n),.rst_n(SysRst2M_n));Reset_Synchronizer2Rst11M(.clk(Clk11M),.d(SysRst2M_n),.asyncrst_n(SysRst_n),.rst_n(SysRst11M_n));endmodule1、同步电路和异步电路的区别是什么?异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。
也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。
电路的稳定需要有可靠的建立时间和持时间,待下面介绍。
同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。
这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。
比如D触发器,当上升延到来时,寄存器把D端的电平传到Q输出端。
在同步电路设计中一般采用D触发器,异步电路设计中一般采用Latch。
2、什么是同步逻辑和异步逻辑?同步逻辑是时钟之间有固定的因果关系。
异步逻辑是各时钟之间没有固定的因果关系。
电路设计可分类为同步电路和异步电路设计。
同步电路利用时钟脉冲使其子系统同步运作,而异步电路不使用时钟脉冲做同步,其子系统是使用特殊的“开始”和“完成”信号使之同步。
由于异步电路具有下列优点--无时钟歪斜问题、低电源消耗、平均效能而非最差效能、模块性、可组合和可复用性--因此近年来对异步电路研究增加快速,论文发表数以倍增,而Intel Pentium 4处理器设计,也开始采用异步电路设计。
异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,其逻辑输出与任何时钟信号都没有关系,译码输出产生的毛刺通常是可以监控的。
同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。
这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。
3、什么是"线与"逻辑,要实现它,在硬件特性上有什么具体要求?线与逻辑是两个输出信号相连可以实现与的功能。
在硬件上,要用oc门来实现(漏极或者集电极开路),由于不用oc门可能使灌电流过大,而烧坏逻辑门,同时在输出端口应加一个上拉电阻。
(线或则是下拉电阻)4、什么是Setup 和Holdup时间?5、setup和holdup时间,区别.6、解释setup time和hold time的定义和在时钟信号延迟时的变化。
7、解释setup和hold time violation,画图说明,并说明解决办法。
时间(Setup Time)和保持时间(Hold time)。
建立时间是指在时钟边沿前,数据信号需要保持不变的时间。
保持时间是指时钟跳变边沿后数据信号需要保持不变的时间。
如果不满足建立和保持时间的话,那么DFF将不能正确地采样到数据,将会出现metastability的情况。
如果数据信号在时钟沿触发前后持续的时间均超过建立和保持时间,那么超过量就分别被称为建立时间裕量和保持时间裕量。
8、说说对数字逻辑中的竞争和冒险的理解,并举例说明竞争和冒险怎样消除。
9、什么是竞争与冒险现象?怎样判断?如何消除?在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。
产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
解决方法:一是添加布尔式的(冗余)消去项,但是不能避免功能冒险,二是在芯片外部加电容。
三是增加选通电路。
在组合逻辑中,由于多少输入信号变化先后不同、信号传输的路径不同,或是各种器件延迟时间不同(这种现象称为竞争)都有可能造成输出波形产生不应有的尖脉冲(俗称毛刺),这种现象成为冒险。
10、你知道那些常用逻辑电平?TTL与COMS电平可以直接互连吗?常用逻辑电平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Coupled Logic)、PECL (Pseudo/Positive Emitter Coupled Logic)、LVDS(Low Voltage Differential Signaling)、GTL (Gunning Transceiver Logic)、BTL(Backplane Transceiver Logic)、ETL(enhanced transceiver logic)、GTLP(Gunning Transceiver Logic Plus);RS232、RS422、RS485(12V,5V,3.3V);TTL和CMOS不可以直接互连,由于TTL是在0.3-3.6V之间,而CMOS则是有在12V的有在5V的。