在數(shù)字邏輯電路中,復(fù)位信號的設(shè)計(jì)是首要解決的基本問題。在進(jìn)行復(fù)位信號設(shè)計(jì)之前,需要明確的是,復(fù)位信號只對時(shí)序電路有效,因?yàn)闀r(shí)序電路屬于雙穩(wěn)態(tài)電路,在上電后需要保證電路處于已知的初始態(tài),才能保證正常運(yùn)行。而對于組合邏輯電路來說,組合邏輯本身不具有存儲(chǔ)的功能,因此不需要復(fù)位信號。
復(fù)位信號可以分為同步復(fù)位和異步復(fù)位兩大類。
同步復(fù)位指的是當(dāng)復(fù)位信號發(fā)生變化時(shí),并不立即生效,而是等到有效時(shí)鐘沿采集到復(fù)位信號的變化后,才會(huì)對寄存器進(jìn)行復(fù)位操作。從同步復(fù)位的描述中,就可發(fā)現(xiàn)同步復(fù)位的過程是依賴于時(shí)鐘信號的,所以稱之為同步。而異步復(fù)位則不依賴于系統(tǒng)時(shí)鐘,一旦信號發(fā)生變化,就會(huì)立即對寄存器進(jìn)行復(fù)位操作。
由于在現(xiàn)有的大多數(shù)邏輯器件庫中,觸發(fā)器DFF都是只包含有異步復(fù)位端口,所以同步復(fù)位的使用會(huì)造成冗余組合邏輯的使用,浪費(fèi)資源。因此,大多數(shù)數(shù)字設(shè)計(jì)中都采用的是異步復(fù)位信號。
雖然異步復(fù)位信號更加方便使用,但是因?yàn)閺?fù)位信號與系統(tǒng)時(shí)鐘異步的關(guān)系,很容易出現(xiàn)復(fù)位信號釋放位置恰恰出現(xiàn)在時(shí)鐘有效沿附近,導(dǎo)致亞穩(wěn)態(tài)的出現(xiàn)。對于異步復(fù)位,有類似于寄存器建立時(shí)間和保持時(shí)間的說法,分別是recovery time 和temoval time。如下面兩張圖所示:

recovery time是異步復(fù)位的恢復(fù)時(shí)間,指的是復(fù)位釋放與下一個(gè)時(shí)鐘有效邊沿之間需要間隔的最小時(shí)間。

removal time是異步復(fù)位的去除時(shí)間,指的是復(fù)位釋放與上一個(gè)時(shí)鐘有效邊沿之間需要間隔的最小時(shí)間。
如果異步復(fù)位的釋放時(shí)間不滿足以上這兩個(gè)條件,寄存器很可能進(jìn)入亞穩(wěn)態(tài),導(dǎo)致電路運(yùn)行失常。為了保證解決這個(gè)問題,可以采用異步復(fù)位同步釋放的復(fù)位信號設(shè)計(jì)方法。顧名思義,異步復(fù)位同步釋放就是對復(fù)位信號的釋放過程做同步處理,使得釋放的過程能夠與系統(tǒng)時(shí)鐘同步。
異步復(fù)位,同步釋放本質(zhì)就是引入兩個(gè)觸發(fā)器,其電路圖和時(shí)序處理如下圖所示:


觀察上述電路圖和時(shí)序圖就知道,其實(shí)異步復(fù)位同步釋放和兩級打拍的跨時(shí)鐘域信號處理很相似,本質(zhì)上都是對信號進(jìn)行同步處理。上述電路的代碼如下,很簡單:
module rst_n_sync(
input clk , // 輸入時(shí)鐘
input rst_n , // 輸入異步復(fù)位信號
output rst_n_sync // 輸出同步釋放后的復(fù)位信號
);
reg rst_n_r1 ; // 第1級寄存器
reg rst_n_r2 ; // 第2級寄存器
assign rst_n_sync = rst_n_r2 ;
always @ (posedge clk or negedge rst_n) begin
if (~rst_n) begin
rst_n_r1 <= 1'b0 ;
rst_n_r2 <= 1'b0 ; // 復(fù)位信號有效時(shí)拉低
end //
else begin
rst_n_r1 <= 1'b1 ;
rst_n_r2 <= rst_n_r1; // 復(fù)位信號無效后,通過兩級打拍,實(shí)現(xiàn)釋放同步
end //
end //
endmodule
上述代碼在vivado軟件中生成的RTL電路如下:

可以看到,代碼生成的電路與之前的電路原理圖完全一致。
異步復(fù)位同步釋放的復(fù)位信號設(shè)計(jì)方法能夠有效地實(shí)現(xiàn)系統(tǒng)的復(fù)位,且因?yàn)檫M(jìn)行了信號的同步釋放處理,使得復(fù)位信號在撤離時(shí)能夠滿足恢復(fù)和去除時(shí)間的要求,從而避免了亞穩(wěn)態(tài)的產(chǎn)生。