《同步复位与异步复位》由会员分享,可在线阅读,更多相关《同步复位与异步复位(7页珍藏版)》请在金锄头文库上搜索。
1、同步复位与异步复位同步复位与异步复位 一一、概念: 同步复位同步复位:就是指复位信号只有在时钟上升沿到来时,才能有效,否则无法完成 对系统的复位工作。用 verilog 描述如下: always (posedge clk) begin if (!Rst_n) . end 异步复位异步复位: 它是指无论时钟沿是否到来, 只要复位信号有效, 就对系统进行复位。 用 Verilog 描述如下: always (posedge clk or negedge Rst_n) begin if (!Rst_n) . end 二、各自的优缺点:二、各自的优缺点: 1. 1. 同步复位的优点大概有同步复位的优点
2、大概有 3 3 条:条: a. 有利于仿真器的仿真。 b. 可以使所设计的系统成为的同步时序电路,这便大大有利于时序分析,而 且综合出来的一般较高。 c. 因为他只有在时钟有效电平到来时才有效, 所以可以滤除高于时钟频率的 毛刺。 缺点:缺点: a. 复位信号的有效时长必须大于时钟周期, 才能真正被系统识别并完成复位 任务。同时还要考虑,诸如:clk skew 组合逻辑路径延时,复位延时等因素。 b. 由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,所以,倘 若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样 就会耗费较多的逻辑资源。 2. 2. 异步复位优点
3、也有三条,都是相对应的异步复位优点也有三条,都是相对应的 a. 大多数目标器件库的都有异步复位端口,因此采用异步复位可以节省资 源。 b. 设计相对简单。 c. 异步复位信号识别方便,而且可以很方便的使用 FPGA 的全局复位端口 GSR。 缺点:缺点: a. 在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位 释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚 稳态。 b. 复位信号容易受到毛刺的影响。 三、总结及推荐复位方式:三、总结及推荐复位方式: 也就是上文中所说的:“异步复位,同步释放”。这就结合了双方面的优点,很 好的克服了异步复位的缺点
4、(因为异步复位的问题主要出现在复位信号释放的时 候,具体原因可见上文)。 具体实现并不难,这里列出一种方式:那就是在异步复位键后加上一个所谓的 “reset synchronizer”,这样就可以使异步复位信号同步化,然后,再用经过 处理的复位信号去作用系统,就可以保证比较稳定了。reset sychronizer 的代 码如下: module Reset_Synchronizer( output reg rst_n, input clk, asyncrst_n); reg rff1; always (posedge clk , negedge asyncrst_n) begin if (!a
5、syncrst_n) rst_n,rff1 = 2b0; else rst_n,rff1 = rff1,1b1; end endmodule 大家可以看到, 这就是一个 dff, 异步复位信号直接接在它的异步复位端口上 (低 电平有效),然后数据输入端 rff1 一直为高电平1。倘若异步复位信号有效的 话,触发器就会复位,输出为低,从而复位后继系统。但是,又由于这属于时钟 沿触发, 当复位信号释放时, 触发器的输出要延迟一个时钟周期才能恢复成1, 因此使得复位信号的释放与时钟沿同步化。此外,还有一种方法更为直接,就是 直接在异步复位信号后加一个触发器, 然后用 D 触发器的输出作为后级系统的复
6、 位信号,也能达到相同的效果。 1.1.同步复位同步复位(Synchronous Reset)(Synchronous Reset) 来看一个简单的同步复位的 D 触发器,Verilog 代码如下: module d_ff(clk,rst_n,datain,dataout); input clk; input rst_n; input datain; ouput dataout; reg dataout; always (posedge clk) begin if (!rst_n) dataout = 1b0; else dataout = datain; end endmodule 综合后的
7、 RTL 图表如下: Altera 的 MAXII 系列的 CPLD 中,register 没有同步复位资源,所以同步复位信 号需要通过额外的逻辑电路实现,上面的例子,QuartusII 软件自带的综合工具 使用选择器实现了同步功能,但是这不是确定的,有的综合工具综合成与门,如 下图: 同步复位的优点:同步复位的优点: 1). 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺; 2). 有利于静态时序分析工具的分析; 3). 有利于基于周期的仿真工具的仿真。 同步复位缺点:同步复位缺点: 1). 占用更多的逻辑资源; 2). 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的
8、延 迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存 器的时序; 3). 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。 2. 异步复位(Asynchronous Reset) 来看一个简单的异步复位的 D 触发器,Verilog 代码如下: module prac (clk,rst_n,datain,dataout); input clk; input rst_n; input datain; output dataout; reg dataout; always (posedge clk or negedge rst_n) begin if (!rs
9、t_n) dataout = 1b0; else dataout = datain; end endmodule 综合后的 RTL 图表如下: 异步复位的优点: 1). 无需额外的逻辑资源,实现简单,而且 CPLD 有针对复位信号的全局不限资 源,可以保证复位管脚到各个寄存器的 clock skew 最小(注意不是到各个寄存器 的延迟最小); 2). 复位信号不依赖于时钟。 同步复位缺点: 1). 复位信号容易受到外界的干扰; 2). 复位信号释放的随机性,可能导致时序违规,使电路处于亚稳态,如下图。 3. 异步复位同步释放(Asynchronous Reset Synchronous Rel
10、ease) 这种复位方式在文献中还有一种称谓:Synchronized Asynchronous Reset,这 种称谓应该在国外的技术人员中比较流行,与 Altera 的工程师交流过程中,他 们一直使用 Synchronized Asynchronous Reset 这种称谓(当然也可能是个人的 习惯)。 来看一个 Synchronized Asynchronous Reset 例子,Verilog 代码如下: module prac (clk,reset_n,dataa,datab,outa,outb); input clk; input reset_n; input dataa; inp
11、ut datab; output outa; output outb; reg reg1; reg reg2; reg reg3; reg reg4; assign outa = reg1; assign outb = reg2; assign rst_n = reg4; always (posedge clk or negedge reset_n) begin if (!reset_n) begin reg3 = 1b0; reg4 = 1b0; end else begin reg3 = 1b1; reg4 = reg3; end end always (posedge clk or negedge rst_n) begin if (!rst_n) begin reg1 = 1b0; reg2 = 1b0; end else begin reg1 = dataa; reg2 = datab; end end endmodule 综合后的 RTL 图表如下: