異步復位,同步釋放的方式,而且復位信號低電平有效
一、特點(diǎn):
同步復位:顧名思義,同步復位就是指復位信號只有在時(shí)鐘上升沿到來(lái)時(shí),才能有效。否則,無(wú)法完成對系統的復位工作。用Verilog描述如下:
always @ (posedge clk) begin
if (!Rst_n)
...
end
異步復位:它是指無(wú)論時(shí)鐘沿是否到來(lái),只要復位信號有效,就對系統進(jìn)行復位。用Verilog描述如下:
always @ (posedge clk,negedge Rst_n) begin
if (!Rst_n)
...
end
二、各自的優(yōu)缺點(diǎn):
1、總的來(lái)說(shuō),同步復位的優(yōu)點(diǎn)大概有3條:
a、有利于仿真器的仿真。
b、可以使所設計的系統成為100%的同步時(shí)序電路,這便大大有利于時(shí)序分析,而且綜合出來(lái)的fmax一般較高。
c、因為他只有在時(shí)鐘有效電平到來(lái)時(shí)才有效,所以可以濾除高于時(shí)鐘頻率的毛刺。
他的缺點(diǎn)也有不少,主要有以下幾條:
a、復位信號的有效時(shí)長(cháng)必須大于時(shí)鐘周期,才能真正被系統識別并完成復位任務(wù)。同時(shí)還要考慮,諸如:clk skew,組合邏輯路徑延時(shí),復位延時(shí)等因素。
b、由于大多數的邏輯器件的目標庫內的DFF都只有異步復位端口,所以,倘若采用同步復位的話(huà),綜合器就會(huì )在寄存器的數據輸入端口插入組合邏輯,這樣就會(huì )耗費較多的邏輯資源。
2、對于異步復位來(lái)說(shuō),他的優(yōu)點(diǎn)也有三條,都是相對應的:
a、大多數目標器件庫的dff都有異步復位端口,因此采用異步復位可以節省資源。
b、設計相對簡(jiǎn)單。
c、異步復位信號識別方便,而且可以很方便的使用FPGA的全局復位端口GSR。
缺點(diǎn):
a、在復位信號釋放(release)的時(shí)候容易出現問(wèn)題。具體就是說(shuō):倘若復位釋放時(shí)恰恰在時(shí)鐘有效沿附近,就很容易使寄存器輸出出現亞穩態(tài),從而導致亞穩態(tài)。
b、復位信號容易受到毛刺的影響。
三、總結:
所以說(shuō),一般都推薦使用異步復位,同步釋放的方式,而且復位信號低電平有效。這樣就可以?xún)扇涿懒恕?/p>
always @(posedge clk or negedge rst_n)
if(!rst_n) b = 1b0;
else b = a;
我們可以看到FPGA的寄存器都有一個(gè)異步的清零端(CLR),在異步復位的設計中這個(gè)端口一般就是接低電平有效的復位信號rst_n。即使說(shuō)你的設計中是高電平復位,那么實(shí)際綜合后會(huì )把你的復位信號反向后接這個(gè)CLR端。
一個(gè)簡(jiǎn)單的異步復位的例子
always @ (posedge clk or negedge rst_n)
if(!rst_n) b = 1b0;
else b = a;
我們可以看到FPGA的寄存器都有一個(gè)異步的清零端(CLR),在異步復位的設計中這個(gè)端口一般就是接低電平有效的復位信號rst_n。即使說(shuō)你的設計中是高電平復位,那么實(shí)際綜合后會(huì )把你的復位信號反向后接這個(gè)CLR端。
一個(gè)簡(jiǎn)單的同步復位的例子
always @ (posedge clk)
if(!rst_n) b = 1b0;
else b = a;
和異步復位相比,同步復位沒(méi)有用上寄存器的CLR端口,綜合出來(lái)的實(shí)際電路只是把復位信號rst_n作為了輸入邏輯的使能信號。那么,這樣的同步復位勢必會(huì )額外增加FPGA內部的資源消耗。
那么同步復位和異步復位到底孰優(yōu)孰劣呢?
只能說(shuō),各有優(yōu)缺點(diǎn)。同步復位的好在于它只在時(shí)鐘信號clk的上升沿觸發(fā)進(jìn)行系統是否復位的判斷,這降低了亞穩態(tài)出現的概率;它的不好上面也說(shuō)了,在于它需要消耗更多的器件資源,這是我們不希望看到的。FPGA的寄存器有支持異步復位專(zhuān)用的端口,采用異步復位的端口無(wú)需額外增加器件資源的消耗,但是異步復位也存在著(zhù)隱患,特權同學(xué)過(guò)去從沒(méi)有意識到也沒(méi)有見(jiàn)識過(guò)。異步時(shí)鐘域的亞穩態(tài)問(wèn)題同樣的存在與異步復位信號和系統時(shí)鐘信號之間。
再看下面一個(gè)兩級寄存器異步復位的例子
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;
如此一來(lái),既解決了同步復位的資源消耗問(wèn)題,也解決了異步復位的亞穩態(tài)問(wèn)題。其根本思想,也是將異步信號同步化。
評論