什么是異步復(fù)位和同步釋放:
是指復(fù)位信號是異步有效的,即復(fù)位的發(fā)生與clk無關(guān)。后半句“同步釋放”是指復(fù)位信號的撤除也與clk無關(guān),但是復(fù)位信號是在下一個clk來到后起的作用(釋放)。
下面說明一下如何實現(xiàn)異步復(fù)位和同步釋放的。
異步復(fù)位:顯而易見,rst_async_n異步復(fù)位后,rst_sync_n將拉低,即實現(xiàn)異步復(fù)位。
同步釋放:這個是關(guān)鍵,看如何實現(xiàn)同步釋放,即當(dāng)復(fù)位信號rst_async_n撤除時,由于雙緩沖電路(雙寄存器)的作用,rst_sync_n復(fù)位信號不會隨著rst_async_n的撤除而撤除。
假設(shè)rst_async_n撤除時發(fā)生在clk上升沿,如果不加此電路則可能發(fā)生亞穩(wěn)態(tài)事件,但是加上此電路以后,假設(shè)第一級D觸發(fā)器clk上升沿時rst_async_n正好撤除,則D觸發(fā)器1輸出高電平“1”,此時第二級觸發(fā)器也會更新輸出,但是輸出值為前一級觸發(fā)器clk來之前時的Q1輸出狀態(tài)。顯然Q1之前為低電平,顧第二級觸發(fā)器輸出保持復(fù)位低電平,直到下一個clk來之后,才隨著變?yōu)楦唠娖?。即同步釋放?/p>
如圖第一個方框內(nèi)是異步復(fù)位和同步釋放電路。有兩個D觸發(fā)器構(gòu)成。第一級D觸發(fā)器的輸入時VCC,第二級觸發(fā)器輸出是可以異步復(fù)位,同步釋放后的復(fù)位信號。
電路目的:方式復(fù)位信號撤除時產(chǎn)生亞穩(wěn)態(tài)事件。
所謂異步復(fù)位和同步釋放,是指復(fù)位信號是異步有效的,即復(fù)位的發(fā)生與clk無關(guān)。后半句“同步釋放”是指復(fù)位信號的撤除(釋放)則與clk相關(guān),即同步的。
代碼實現(xiàn):
always @ (posedge clk, negedge rst_async_n)
if (!rst_async_n) begin
rst_s1 《= 1‘b0;
rst_s2 《= 1’b0;
end
else begin
rst_s1 《= 1‘b1;
rst_s2 《= rst_s1;
end
assign rst_sync_n = rst_s2;
endmodule
對于實際的實現(xiàn)TECH MAP視圖
其實異步復(fù)位的話,優(yōu)點(diǎn)就是可以直接用EDA工具綜合庫DFF的異步復(fù)位端,相對同步復(fù)位來說又簡單又省邏輯資源,但其致命缺點(diǎn)就是復(fù)位結(jié)束也就是釋放的時刻恰在時鐘上升沿的建立時間和保持時間之間時無法決定現(xiàn)在的復(fù)位狀態(tài)是1還是0,造成亞穩(wěn)態(tài)。
試想下,如果這樣的復(fù)位信號應(yīng)用在一個大的系統(tǒng)中,復(fù)位信號路徑到每一個模塊乃至到每一個寄存器的偏斜都會不同,如果恰在時鐘上升沿時刻附近必然引起諸多問題。
因此最好全局復(fù)位信號送出之前做一個“異步復(fù)位,同步釋放”的處理。
下面是常見兩種方式:
方式一:(自己看來應(yīng)該是“異步復(fù)位同步化”)
always @ (posedge clk)
rst_nr 《= rst_n; //現(xiàn)將異步復(fù)位信號用同步時鐘打一拍
always @ (posedge clk or negedge rst_nr)
if(!rst_nr) b 《= 1‘b0;
else b 《= a;
方式二:(自己看來才是“異步復(fù)位,同步釋放”)
reg pllrst1,pllrst2;
wire pllrst;
always @(posedge clk or negedge rst_n)
if(!rst_n) begin pllrst1 《= 1’b1;
pllrst2 《= 1‘b1; end
else begin pllrst1 《= 1’b0;
pllrst2 《= pllrst1; end
assign pllrst = pllrst2; //鎖相環(huán)復(fù)位信號
評論
查看更多