01時鐘方案
1、避免內(nèi)部產(chǎn)生時鐘
我們設(shè)計時要盡可能避免在內(nèi)部產(chǎn)生時鐘,如果操作不當(dāng),會導(dǎo)致設(shè)計功能和時序問題??偠灾?,盡量在代碼中避免操作時鐘。
組合邏輯搭建的時鐘會引入毛刺,使功能出現(xiàn)問題,數(shù)據(jù)輸入有毛刺會被過濾,但是時鐘端毛刺會有明顯問題。如圖所示為組合邏輯產(chǎn)生的時鐘效果。
解決辦法:在組合邏輯產(chǎn)生的時鐘后面加入一個寄存器,用寄存器輸入作為后續(xù)的時鐘輸入。但是由于組合邏輯會增加時鐘線上的延遲,在一些情況下,邏輯延遲會導(dǎo)致時鐘偏移比兩個寄存器之間的數(shù)據(jù)延遲大。這樣會違背寄存器的時序要求。
2、分頻時鐘
在設(shè)計中盡量保證所需的時鐘來自PLL。若要對主時鐘進行分頻時,始終使用同步計數(shù)器或者狀態(tài)機。產(chǎn)生輸出時鐘時用寄存器進行輸出,而不應(yīng)該用組合邏輯。
3、多路時鐘復(fù)用
多路時鐘復(fù)用器,可以使同一個邏輯擁有不同的時鐘。前提是得滿足以下標準:
- 在初始化配置后,時鐘多路邏輯就不再改變;
- 在測試時,設(shè)計會繞過功能時鐘多路邏輯而選擇普通時鐘;
- 在時鐘切換時,寄存器始終處于復(fù)位狀態(tài);
- 在時鐘切換時產(chǎn)生的短暫錯誤響應(yīng)沒有負面影響
4、門控時鐘
門控時鐘使用使能信號開關(guān)時鐘,實現(xiàn)對某些門控電路的控制。在時鐘關(guān)閉時,對應(yīng)的時鐘域的寄存器就會停止翻轉(zhuǎn)。所以門控時鐘時減少功耗的有效手段之一。
顯而易見,這種方式并不是同步設(shè)計,會導(dǎo)致時鐘偏移以及毛刺現(xiàn)象。下圖是同步時鐘門控使能,不過此種方式由于時鐘一直在不停的驅(qū)動,雖然后面寄存器輸出保持不變,卻并沒有停止工作,因此不能達到降低功耗的作用。
那有沒有既滿足同步要求又降低功耗的設(shè)計呢?
首先需要知道功耗到底耗在哪。傳統(tǒng)的同步設(shè)計中,系統(tǒng)時鐘連接到每個寄存器的時鐘端,這使得功耗主要由三個部分組成:
- 在時鐘沿變化的組合邏輯所產(chǎn)生的的功耗
- 由觸發(fā)器產(chǎn)生的功耗
- 設(shè)計中時鐘樹產(chǎn)生的功耗
時鐘門控能夠大幅降低觸發(fā)器的功耗,時鐘門控可以存在于時鐘樹的根部、末端或者兩者之間任何位置。由于 時鐘樹幾乎消耗了整個芯片功耗的50% ,因此最好始終在根部產(chǎn)生或者關(guān)閉時鐘。
基于鎖存器的門控時鐘電路是在上述門控時鐘電路中加入一個電平敏感時鐘的鎖存。其只需要保證EN信號在時鐘上升沿附近穩(wěn)定不變就可以。如此就可以保證輸出不含任何毛刺與尖峰脈沖。
為了保證較高的生產(chǎn)缺陷覆蓋率,有必要保證在插入掃描鏈時門控時鐘電路是完全可控和可觀察的。加入Test控制信號,使得測試狀態(tài)下不管使能值是多少都能被時鐘驅(qū)動。大多數(shù)ASIC生產(chǎn)商都提供“門控時鐘單元”作為標準單元庫的一部分。
02復(fù)位信號設(shè)計方案
復(fù)位的基本目的是使SoC進入一個能進行穩(wěn)定操作的確定狀態(tài) 。好的設(shè)計會在系統(tǒng)沒有明確要求的情況下為SoC的每個觸發(fā)器都提供復(fù)位信號。但是在某些情況下,當(dāng)流水線的寄存器在高速應(yīng)用中使用時,應(yīng)該去掉某些寄存器的復(fù)位信號以使設(shè)計達到更高的性能。
1、同步復(fù)位和異步復(fù)位
同步復(fù)位: 復(fù)位信號只有在時鐘的有效沿到來時才能影響或者復(fù)位觸發(fā)器的狀態(tài)。
同步復(fù)位的優(yōu)點:
1)同步復(fù)位一般能確保電路100%同步;
2)同步復(fù)位會綜合為更小的觸發(fā)器;
3)同步復(fù)位確保復(fù)位只發(fā)生在有效時鐘沿,可過濾毛刺。
同步復(fù)位缺點:
1)同步復(fù)位可能需要一定長度的脈寬,保證時鐘有效沿附近復(fù)位信號有效;
2)復(fù)位信號可能經(jīng)過多級組合邏輯,會存在潛在問題;
3)復(fù)位電路需要復(fù)位時鐘,門控時鐘電路中,可能因為時鐘無效導(dǎo)致復(fù)位無效。
異步復(fù)位: 復(fù)位觸發(fā)器在設(shè)計時加入了一個復(fù)位引腳,通過復(fù)位信號直接控制。
異步復(fù)位優(yōu)點:
1)保證數(shù)據(jù)路徑上的整潔干凈;
2)不管有沒有時鐘都可以復(fù)位。
異步復(fù)位缺點:
1)異步復(fù)位信號不一定可以被I/O口直接驅(qū)動;
2)異步復(fù)位為異步過程,撤銷異步信號時,若剛好處于時鐘有效沿,會使電路進入亞穩(wěn)態(tài);
3)板機系統(tǒng)或者其他造成的噪聲毛刺引起偽復(fù)位。
2、常用的解決方案:異步復(fù)位,同步釋放。
所謂異步復(fù)位同步釋放,是指復(fù)位信號到來時不受時鐘信號的同步,復(fù)位信號釋放時需要進行時鐘信號的同步。
上圖清楚地展示了異步復(fù)位和同步釋放兩個階段。
異步復(fù)位階段:當(dāng)rst_async_n有效時,此時第二個D觸發(fā)器的輸出rst_sync_n立即置為低電平,實現(xiàn)異步復(fù)位。
同步釋放階段:假設(shè)rst_async_n在clk的上升沿時撤除,那么第一級觸發(fā)器處于亞穩(wěn)態(tài),但是由于兩級觸發(fā)器的緩沖作用,第二級觸發(fā)器的輸入為clk到來前第一級觸發(fā)器的輸出,即為低電平。因此,此時第二級觸發(fā)器的輸出一定是穩(wěn)定的低電平,方框左中觸發(fā)器仍然處于復(fù)位狀態(tài)。在下一個clk到來時,第一級觸發(fā)器的輸出已經(jīng)是穩(wěn)定的高電平了,故rst_sync_n已經(jīng)是穩(wěn)定的高電平,此時復(fù)位釋放,實現(xiàn)同步釋放。
代碼示例:
always@(posedge clk, negedge rst_async_n)begin
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
end
assign rst_sync_n = rst_s2;
rst_async_n=0時,rst_sync_n會被立即復(fù)位為0,輸出到后續(xù)電路用于異步復(fù)位;rst_async_n=1時,假設(shè)此時恰好在時鐘沿附近,會造成recovery或者removal的違例,但經(jīng)過DFF1和DFF2的兩級同步,rst_sync_n釋放沿與時鐘沿同步,送入到后續(xù)電路不會再有recovery和removal違例出現(xiàn)。
可以看到,異步復(fù)位、同步釋放其最顯著特征是既保留了異步復(fù)位的功能,又避免了異步復(fù)位釋放時所面臨的recovery或者removal違例問題。
03小結(jié)
本文簡單介紹了在ASIC設(shè)計中常用的時鐘方案選擇和處理復(fù)位信號時的方案選擇。時鐘設(shè)計上,應(yīng)盡可能避免通過內(nèi)部邏輯產(chǎn)生時鐘,需要多個時鐘域時可以選擇用PLL產(chǎn)生分頻時鐘。需要考慮功耗的情況下可以選擇帶鎖存器的門控時鐘來降低功耗。在處理復(fù)位信號時,一般采用異步復(fù)位、同步釋放的方法,既保留異步復(fù)位的功能,又避免了復(fù)位信號釋放時的恢復(fù)時間和去除時間違例問題。
在后續(xù)的文章中,面對時鐘,還將介紹更為復(fù)雜棘手的多時鐘切換問題。
-
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120779 -
時鐘
+關(guān)注
關(guān)注
11文章
1739瀏覽量
131624 -
組合邏輯
+關(guān)注
關(guān)注
0文章
47瀏覽量
10056 -
異步復(fù)位
+關(guān)注
關(guān)注
0文章
47瀏覽量
13329 -
復(fù)位信號
+關(guān)注
關(guān)注
0文章
54瀏覽量
6348
發(fā)布評論請先 登錄
相關(guān)推薦
評論