一、特色:
同步复位:望文生义,同步复位便是指复位信号只需在时钟上升沿到来时,才干有用。不然,无法完结对体系的复位作业。用Verilog描绘如下:
always @ (posedge clk) begin
if (!Rst_n)
…
end
异步复位:它是指不管时钟沿是否到来,只需复位信号有用,就对体系进行复位。用Verilog描绘如下:
always @ (posedge clk,negedge Rst_n) begin
if (!Rst_n)
…
end
二、各自的优缺陷:
1、总的来说,同步复位的长处大概有3条:
a、有利于仿真器的仿真。
b、能够使所规划的体系成为100%的同步时序电路,这便大大有利于时序剖析,并且归纳出来的fmax一般较高。
c、因为他只需在时钟有用电平到来时才有用,所以能够滤除高于时钟频率的毛刺。
他的缺陷也有不少,主要有以下几条:
a、复位信号的有用时长有必要大于时钟周期,才干真正被体系辨认并完结复位使命。一起还要考虑,比如:clk skew,组合逻辑途径延时,复位延时等要素。
b、因为大多数的逻辑器材的方针库内的DFF都只需异步复位端口,所以,假使选用同步复位的话,归纳器就会在寄存器的数据输入端口刺进组合逻辑,这样就会耗费较多的逻辑资源。
2、关于异步复位来说,他的长处也有三条,都是相对应的:
a、大多数方针器材库的dff都有异步复位端口,因而选用异步复位能够节约资源。
b、规划相对简略。
c、异步复位信号辨认便利,并且能够很便利的运用FPGA的大局复位端口GSR。
缺陷:
a、在复位信号开释(release)的时分简略呈现问题。详细便是说:假使复位开释时恰恰在时钟有用沿邻近,就很简略使寄存器输出呈现亚稳态,然后导致亚稳态。
b、复位信号简略遭到毛刺的影响。
三、总结:
所以说,一般都引荐运用异步复位,同步开释的方法,并且复位信号低电平有用。这样就能够一举两得了。
always @(posedge clk or negedge rst_n)
if(!rst_n) b = 1b0;
else b = a;
咱们能够看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的规划中这个端口一般便是接低电平有用的复位信号rst_n。即便说你的规划中是高电平复位,那么实践归纳后会把你的复位信号反向后接这个CLR端。
一个简略的异步复位的比如
always @ (posedge clk or negedge rst_n)
if(!rst_n) b = 1b0;
else b = a;
咱们能够看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的规划中这个端口一般便是接低电平有用的复位信号rst_n。即便说你的规划中是高电平复位,那么实践归纳后会把你的复位信号反向后接这个CLR端。
一个简略的同步复位的比如
always @ (posedge clk)
if(!rst_n) b = 1b0;
else b = a;
和异步复位比较,同步复位没有用上寄存器的CLR端口,归纳出来的实践电路仅仅把复位信号rst_n作为了输入逻辑的使能信号。那么,这样的同步复位势必会额定添加FPGA内部的资源耗费。
那么同步复位和异步复位究竟孰优孰劣呢?
只能说,各有优缺陷。同步复位的好在于它只在时钟信号clk的上升沿触发进行体系是否复位的判别,这降低了亚稳态呈现的概率;它的欠好上面也说了,在于它需求耗费更多的器材资源,这是咱们不期望看到的。FPGA的寄存器有支撑异步复位专用的端口,选用异步复位的端口无需额定添加器材资源的耗费,可是异步复位也存在着危险,特权同学曩昔从没有意识到也没有才智过。异步时钟域的亚稳态问题相同的存在与异步复位信号和体系时钟信号之间。
再看下面一个两级寄存器异步复位的比如
always @ (posedge clk or negedge rst_n)
if(!rst_n) b = 1b0;
else b = a;
always @ (posedge clk or negedge rst_n)
if(!rst_n) c = 1b0;
else c = b;
如此一来,既处理了同步复位的资源耗费问题,也处理了异步复位的亚稳态问题。其底子思维,也是将异步信号同步化。