關于復位
數字電路中,電路通過復位來啟動,復位猶如數字電路的“起搏器”,主要有下面三種方式:
1
無復位:天生就強壯著,上電就啟動;
2
異步復位:好心人路過,隨便踢了一腳,起搏了,這完全沒有心理準備,隨時都有可能復活啊;
3
同步復位:專業救援隊,手按住胸口,不起博按住不放啊。直到聽到“砰砰”聲才離開,非常關鍵,必須要按住一會會
無復位
沒見過這樣寫代碼的,竟然沒有復位,老師都說數字電路離不開復位的,沒有復位,寄存器怎么賦初值?。繘]有確定的初值,這電路怎么工作呢?
其實,不用擔心,FPGA上電之后,寄存器初始值默認為“0”,當然,也可以人為的賦初值。下面為無復位的代碼:
reg [7:0] my_register;
always @(posedge clk) begin
my_register <= data_in;
end
如果沒有復位信號,省了很多資源,編譯和布線時間也縮短不少,如果規模很大,對提高設計整體性能也是有幫助的。但是在數字電路設計中,我們很少不用復位電路。到是我們經常利用FPGA這個特性,自己產生內部復位電路。
異步復位
異步復位電路描述:在always語句中添加復位信號在敏感量列表中,即可實現異步復位。
reg [7:0] my_register;
always @(posedge clk,posedge rst) begin
if(rst)
my_register <= 8’h0;
else
my_register <= data_in;
end
異步復位的缺點:
異步復位對復位信號要求很嚴格的,不然隨便一個毛刺就會把電路給復位掉的。
另外,異步復位信號依賴于FPGA內部的傳導延時,因此,在微小的電壓或溫度差異下,設計都有可能輸出錯誤,設計的可移植性也很差。上面不是說了嘛,這隨便一腳提過來,有時候能感覺到,有時候感覺不到啊。冬天穿個大棉襖,就得使個大勁才能提醒。
正因為對不同寄存器延遲是不同的,所以容易引發間斷性設計問題。怎么理解呢?
如圖所示,2 bit的移位寄存器組成一個環,復位后,左邊寄存器清零,右邊寄存器置位,而且都在同一上升沿觸發,所以,如果左邊寄存器上升沿來的時候,復位信號已經釋放掉了,但是右邊寄存器還處于復位狀態,這個時候數據就錯誤。
異步復位的優點:
異步復位不依賴于時鐘。所以如果時鐘是外部輸入的,而且時鐘有可能丟失,例如處于省電模式時,只能使用異步復位。
另外一個優勢是設計更快的物理實現。相對于同步復位,異步復位有更寬松的時序約束。從而布局布線工具使用更少的時間便可達到約束條件。
同步復位
同步復位就是非常專業,不留一點馬虎,和他的名字一樣,只在時鐘的有效沿發生,所以一個有效的同步信號,至少要維持一個時鐘周期(把你叫不醒,是不會停的)。由于僅僅在時鐘的有效沿有效,所以可以濾除復位信號上的毛刺,電路可靠性好很多。
reg [7:0] my_register;
always @(posedge clk) begin
if(rst)
my_register <= 8’h0;
else
my_register <= data_in;
end
所以,總結一下。其優點是“彌補了異步復位的所有缺點”,其缺點是“沒有異步復位的優點“”。這個總結夠簡單吧。
總結
我們熟悉了3種復位方式,了解了他們的脾氣,那就總結一下,在我們平時設計中如何使用他們。
盡量用同步復位,如果你的規模不是特別大,雖然占有布線資源多一點,但是對系統可靠性還是有幫助的。
規模很大的時候,可以考慮混和復位方式,在什么場合呢?比如說設計中有多個IP核和功能模塊,要求有不同的復位方式,這個時候就要求混和復位方式,另外,還有電路延遲,大型電路中兩個模塊之間信號延遲可能超過10ns,如果時鐘周期為3ns,需要3個時鐘周期才能通過,所以,大型設計中完全同步是非常不容易的。如圖所示為一個復雜的混和復位樹。各種復位都用上了。
審核編輯:劉清
-
FPGA
+關注
關注
1626文章
21678瀏覽量
602034 -
寄存器
+關注
關注
31文章
5325瀏覽量
120052 -
數字電路
+關注
關注
193文章
1601瀏覽量
80513 -
復位電路
+關注
關注
13文章
322瀏覽量
44545
原文標題:航空總線1553B接口設計
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論