內容:
主要涵蓋了設計者在設計模塊或者知識產權(Intellectual Preoperty)時所要用到的一些建議。
同步設計(對ASIC時序控制最安全的方法):
由單個主時鍾和主置位/復位信號驅動設計中所有的時序器件。
一、避免使用行波計數器
含義:即使用觸發器輸出作為下一級觸發器的時鍾輸入端
缺點:
- 由於第一個觸發器的輸出響應導致第二個觸發器的時鍾輸入相對於時鍾信號產生偏移(延遲);
- 無法在每個時鍾邊沿都激活:由於延遲問題,當時鍾發生跳變時,第一個觸發器的輸出未發生變化,從而導致第二個觸發器的時鍾輸入變化較時鍾信號晚;在每個時鍾邊沿都激活?可能在某幾個時鍾邊沿激活?考慮的是第二個觸發器的激活?
優點:能夠減少電路的漏電流並降低電路的功耗,在低功耗設計中會取得很好的效果;
二、避免使用門控時鍾
前端設計注意:含門控時鍾的設計在仿真過程中可能工作正常,但是綜合時會出現問題;
含義:在時鍾線上使用門控單元,使用門控邏輯使能信號開關時鍾;
優點:能夠有效減少功耗,當時鍾被門控電路關閉后,門控時鍾在根部將時鍾關閉,該時鍾網絡和其中的寄存器都會停止翻轉,從而減少功耗;
同步設計中的功耗來源:
- 在每個時鍾邊沿變化的組合邏輯所產生的功耗(由觸發器驅動這些邏輯組合);
- 由觸發器產生的功耗(及時在觸發器的輸入和內部狀態不發生變化,該功耗仍存在);
- 時鍾樹產生的功耗(通常占到總功耗的50%);
圖2.21為同步時鍾使能,通過mux可以實現純同步方式關閉時鍾域,使用該方法時鍾樹始終保持翻轉,寄存器內部電路保持活躍,功耗高;
圖2.2為門控時鍾,使用門控時鍾使能能在時鍾樹根部關閉時鍾信號,時鍾信號驅動的寄存器由於無時鍾輸入,保持原來的值,同事還能避免同步時鍾設計中輸入端的多路選擇器,在實現大的寄存器塊時節省面積。
缺點:
- 由於門控單元輸入輸出的延遲,會導致門控單元后的寄存器的時鍾輸入端信號較時鍾發生偏移;
- 對毛刺敏感,並引入尖峰脈沖作用於觸發器,可能導致設計失敗;
- 由於門控時鍾不是同步設計方案的一部分,因此會顯著增加設計時間和驗證的工作量;
分類:不含鎖存器的門控時鍾和基於鎖存器的門控時鍾
不含鎖存器的門控時鍾電路:如圖2.2,使用and gate 或 or gate實現
要求:使能信號從時鍾活躍沿(上升沿)時鍾不活躍沿(下降沿)保持常量(避免過早截斷時鍾脈沖或誤產生多個時鍾脈沖,即,門控電路輸出的時鍾頻率增加從而導致錯誤)
如下圖所示,由於EN在CLK活躍沿到不活躍沿發生變化,導致GATED_CLK相對於CLK提前結束高電平,等價於時鍾寬度減小,頻率增大,可能導致保持時間不滿足,從而產生時序問題。
基於鎖存器的時鍾門控電路:通過鎖存器來實現使能信號在時鍾活躍沿到不活躍沿保持常量的要求;
下降沿為有效沿時,使用正沿觸發的鎖存器,並使用or gate進行控制;
使用這種電路每次僅需改變門的一個輸入就能開關時鍾,保證電路輸出不包含任何毛刺或尖峰脈沖;
Caution:需要注意時鍾占空比和產生使能信號邏輯的延遲。
重組數據路徑以減少轉換傳播?
三、避免使用雙邊沿或混合邊沿時鍾
含義:使用如下圖所示的相位相反的時鍾信號控制兩個觸發器,在時鍾的上升沿和下降沿都傳輸數據;
優點:
- 能夠在給點的時鍾頻率下達到雙倍的吞吐量;
- 與等效同步電路先比,能夠降低一半功耗,同時避免了使用兩倍頻率的在設計中遇到的接口問題(接口在兩倍頻自身電氣特性變差,對時鍾頻率和時序增加干擾愈發敏感,接口電路設計成本增加);
缺點:
- 不對稱的時鍾占空比會導致違背建立時間和保持時間;
- 難以確定關鍵路徑;
- 難以使用插入掃描鏈的設計方法學(要求所有寄存器的有效沿一致);
Caution:盡量避免使用雙沿時鍾,除非對性能/速度要求很高,並無法承受使用等效同步電路在DFT和驗證帶來的額外開支。
四、用觸發器驅動另一個觸發器的異步復位端
含義:使用第一級觸發器的輸出作為第二級觸發器的復位信號;
缺點:違反同步設計原理,還為導致第二級觸發器時鍾信號與復位信號產生潛在的競爭關系;
同步設計方法學
一、避免在設計中出現組合環路
含義:組合環路中的信號之間存在直接反饋回路,反饋回路中不包含寄存器,
如下圖,always塊之間存在直接相連,a信號通過d信號與自身直接相連;
缺點:組合環路的行為與所有邏輯的傳播延遲相關,而傳播延遲會根據條件的變化而發生改變,從而導致電路行為的變化;
解決方法:改變其中某個信號的生成方式,以消除信號之間的依賴性;
- 在組合環路中引入一個觸發器或寄存器,打斷直接通路;
- 在寄存器的輸出端通過組合邏輯直接控制同一個寄存器的異步輸入端;
Caution:組合環路不可綜合
二、避免數字設計中的延遲鏈
延遲鏈:使用多個帶有單扇入和單扇出的連續節點產生延遲(通常使用多個反相器鏈增加延遲),通常出現在異步設計中,有時用於解決其他組合邏輯導致的競爭條件。
問題:會增加設計對操作環境的敏感性,降低設計的可靠度,增加將設計移植到不同器件結構上的難度。
方法:在設計中使用同步技術取代異步技術。
三、避免使用異步脈沖產生器
脈沖類型:單個脈沖(脈沖產生器) & 一系列脈沖(多振子):
- 一個觸發信號接到兩輸入門的and gate 或 or gate的輸入端,其中一個輸入端信號取反或加入延遲鏈從而使門電路輸出脈沖,脈沖的寬度取決於兩個輸入的相對延遲;
- 寄存器輸出通過延遲鏈后驅動自身的異步復位端(本質是經過一個確定延遲后對自身異步復位);
Caution:上述方法為純異步,盡可能避免;
問題:
- 脈沖寬度難以確定,實際寬度只有在布局布線之后,確定布線和傳播延時后才能確定;
- 同時,脈沖寬度可能會隨工藝的變化而產生變化;
- 難以使用靜態時序分析來驗證脈沖寬度;
解決方法:
使用如下圖的同步脈沖產生器,產生的脈沖寬度與時鍾周期寬度相同,寬度可預測,可以使用時序分析進行驗證,獨立於具體工藝易於移植。
四、避免使用鎖存器
缺點:
- 鎖存器時序模糊,工具無法確定在時鍾前沿還是后沿將數據傳輸至輸出端,這種只有設計者知道的信息導致設計難以移植或代碼復用;
- 靜態時序分析器通常會作出與鎖存器透明有關的錯誤假設,或發現通過數據輸入端口的偽路徑,或將真正的關鍵路徑丟失;
- 鎖存器常常使電路不可測;
- 鎖存器為連通狀態,即在數據輸入輸出之間存在直接通路,輸入端的毛刺能傳遞到輸出端;
解決方法:在數字設計中,鎖存器用來在新值到來之前保持原值,應用使用觸發器代替;
應用場景:使用鎖存器挪用周期或借用時間可以滿足關鍵路徑的要求;
Caution:部分FPGA架構不支持鎖存器,當綜合包含鎖存器的設計時,綜合工具會創建組合反饋桐廬來取代鎖存器,但是組合反饋通路會違背建立時間和保持時間的要求,並且難以發現
五、避免使用雙沿時鍾
時鍾方案
一、內部產生的時鍾
問題:
- 內部時鍾產生器產生的毛刺或尖峰脈沖可能會違背建立時間與保持時間;
- 即使沒有違背時序要求也可能會導致寄存器輸出意料之外的值從而導致功能出現問題;
- 如圖2.17,產生內部時鍾的組合邏輯會增加時鍾線上的延遲,如果時鍾偏移大於數據延遲就會違背寄存器的時序要求,出現功能錯誤;
解決方法:
問題1:在時鍾產生器后增加一個寄存器,以消除時鍾產生邏輯中的毛刺;
問題3:將產生的時鍾放到SoC中高扇出且低偏移的時鍾樹上,有助於減少信號整體的時鍾偏移;
二、分頻時鍾
Caution:
- 在對主時鍾進行分頻時,應該始終使用同步計數器或狀態機;
- 設計中應由寄存器直接產生分頻時鍾信號,永遠不要對計數器或狀態機進行解碼后產生時鍾信號,常常導致毛刺或尖峰脈沖;
三、行波計數器
由計數器分頻或狀態機輸出產生的時鍾又叫“行波時鍾(ripple clock)”,行波計數器常被用於冪為2的分頻。當前一級時序邏輯的數據輸出被用作下一級時序邏輯的時鍾輸入,這個時鍾就是“行波時鍾”。
下圖所示,行波計數器每一級都進行二分頻操作,但是由於存在寄存器的傳播延時,在較高有效位(q3)相對於較低有效位(q0)發生變化更晚。
在時鍾行進過程中,計數器可能由於毛刺產生不正確的值,在最高有效位變化時,會產生最壞的影響。?低有效位輸入錯誤值,但是由於高有效位發生變化晚,導致低有效位的值傳遞至高有效位?
如下圖所示,計數器從0111變到1000時會經歷‘0111→0110→0100→0000→1000’幾個階段,中間的值是因為高有效位變化慢與低有效位所產生的偽計數。
如果將其驅動LED不會產生影響,但是如果用於驅動多路選擇器,存儲器中的索引指針,怎會導致錯誤輸出,無法接受。
優點:與其他同步技術方式相比,行波計數器使用門數更少;
缺點:計數器在各階段創建行波時鍾,產生新的時鍾域,這種級聯會對STA和綜合工具帶來麻煩,會增加驗證的工作量;還會為掃描鏈的插入增加難度。
使用如下圖方式能使行波計數器可靠性更高,可用性更強。
接收電路通過使能信號獲獲取行波計數器讀數,在行波計數器輸出穩定后接受,
行波計數器能減少電路都電流並降低電路功耗,但是在使用時要小心,會對可測性和缺陷覆蓋率產生問題。
四、多路時鍾
含義:使同一個邏輯功能具有不同時鍾;
使用條件:
- 在初始化配置后,時鍾多路操作就是可接受的;
- 在測試時,設計會繞過功能時鍾多路邏輯而選擇普通的時鍾;
- 在時鍾切換時,寄存器始終處於復位狀態;
- 在時鍾切換時產生的短暫錯誤沒有負面影響;
復位信號設計策略
復位:是為了時SoC進入一個能進行穩定操作的確定狀態,可以避免在上電后進入隨機狀態而死機;
選擇策略:
- 使用同步復位還是異步復位;
- 是否每個觸發器都要接收到復位信號;
是否使用復位:是否需要對SoC使用復位由系統、SoC應用環境以及SoC自身的設計方式決定;
Caution:好的設計指南會在系統沒有明確要求的情況下為每個觸發器都提供復位信號。
一、同步復位
含義:只有在時鍾的有效沿到來時才能影響或者復位觸發器的狀態。
//同步復位信號
module load_syn_ff ( input clk, in, load, rst_n, output out); always @(posedge clk) if(!rst_n) out <= 1'b0;
else if(load) out <= in; endmodule
問題:綜合工具無法區分復位信號與其他數據信號,產生如下電路圖;
解決方法:綜合工具允許指定信號為復位信號,從而使復位信號盡可能接近觸發器,可以在開始時將這些指令加入RTL代碼以避免重新綜合。
優點:
- 同步信號一般能確保電路是完全同步的;
- 同步復位會綜合為更小的觸發器,尤其是復位信號被觸發器的輸入邏輯門控時;
- 同步復位確保復位智慧發生在有效時鍾沿,可以過濾掉復位毛刺;
- 在部分設計中,復位必須由一組內部條件產生,在這樣的設計中使用同步復位信號,可以將時鍾之間的復位毛刺過濾掉?
缺點:
- 綜合工具容易將復位邏輯綜合到觸發器自身之外(如上圖);
- 為確保復位信號出現在時鍾有效沿附近,同步復位需要一個脈沖展寬器(這在多時鍾設計時必須考慮,可以使用小計數器指定復位脈沖的寬度);
- 由組合邏輯產生或者經多級組合邏輯的復位信號,可能不容易被外部引腳控制,復位信號可能標記為X;
- 使用門控時鍾時,在時鍾關閉階段同步復位可能無效;
Caution:由於復位樹的高扇出,復位信號相對於時鍾信號晚,需要盡可能減少其到達本地邏輯前穿過的邏輯數量。
二、異步復位
含義:觸發器在設計時加入復位引腳,通常為低電平有效,使觸發器進入復位狀態。
//異步復位
module load_asyn_ff( input clk, in, load, rst_n, output out); always @(posedge clk or negedge rst_n) if(!rst_n) out <= 1'b0;
else if(load) out <= in; endmodule
優點:
- 能夠避免同步復位帶來的時序緊張問題,避免復位信號加載到數據路徑中;
- 復位信號與時鍾信號無關,無論有沒有時鍾信號都可進行復位;
缺點:
- 在DFT時,如果異步復位信號不能直接被I/O引腳驅動,就必須將異步復位路線與復位驅動器 斷開以保證DFT掃描和測試的正確;
- 如果一部復位在觸發器時鍾有效沿附近釋放,觸發器的輸出就會進入亞穩態,SoC的復位狀態會丟失;(與時鍾信號的競爭?)
- 異步復位信號中的毛刺可能會對電路功能產生影響,需要設計毛刺過濾器消除復位電路上的毛刺的影響;
- 對於同步和異步復位,都要確保復位樹時間可控,復位能在一個時鍾周期內釋放,需要分析復位樹的時序以確保滿足時序要求;(可以使用分布式復位同步觸發器?)
三、帶異步復位和異步置位的觸發器
僅在有特殊要求下才會設計這類觸發器
下述代碼:在①階段復位信號有效,進入always塊,信號復位;在②階段置位信號有效,由於復位信號優先級高,信號仍保持復位;在③至④階段如果沒有時鍾信號將不觸發always塊,則信號在④后不進入置位。
//asynchronous set and asynchronous reset
module dff_set_reset( input clk, in, rst_n, set_n, output out); always @(posedge clk or negedge rst_n or negedge set_n) if(!rst_n) out <=1'b0;
else if(!set_n) out <= 1'b1;
else out <= in; endmodule
???
Caution:僅有很少的設計中才允許復位與置位同時發出,然后復位信號先撤銷;要盡可能避免使用同時帶有異步置位和異步復位的觸發器。
解決方法:將自校驗碼附着在正確的編譯器指令中對觸發器建模,並在這種情況發生時間剛出發起輸出強制為正確的值
// Add Compiler specific directive to // ignore the following block during synthesis
always @(rst_n or set_n) if(rst_n && !set_n) force q = 1; else
release q; //End the compiler directive here
endmodule
四、移除異步復位的問題
問題:移除異步復位(將復位信號從有效電平轉換到無效電平)會使芯片進入不穩定的未知狀態,在釋放復位時需要特別注意;
同步復位:復位信號的前沿和尾沿必須遠離時鍾的有效邊沿;
異步復位:
問題:
- 違背復位恢復時間,復位恢復時間指復位撤銷后和時鍾再一次置高之間的時間,會使寄存器數據輸出端出現數據完整性或亞穩態問題;
- 復位移除會在不同時序元件的不同時鍾周期內發生,復位移除與時鍾上升沿異步時,在復位信號和/或時鍾信號上不同的傳播延遲會導致某些寄存器或觸發器提前退出復位狀態(有什么影響?);
解決方法:使用復位同步器。
復位同步器:
作用:是確保正確移除復位最常使用的方法,如果沒有復位同步器,即使在仿真時復位能正常工作,但最終系統中的異步復位信號任是無效的;
工作原理:用外部異步復位信號來復位一對觸發器,這對觸發器異步地依次驅動主復位信號通過復位緩沖樹,再到達設計中的其他觸發器,最后對整個設計異步復位;
第二個觸發器能避免亞穩態的產生?
五、過濾復位毛刺
控制時鍾偏移
定義:整個芯片中時鍾信號到達時間的差異稱為時鍾偏移。
如果下一級的建立時間小於始終偏移,那么次一級的輸出可能會是前一級當前的輸入?
短路徑問題:
定義:相鄰觸發器之間的數據傳播延遲比時鍾偏移還短。
問題:由於第一個時鍾沿到達第二個觸發器比新數據要慢,因此第二個觸發器在與第一個觸發器相同的邊沿處,切換為第一個觸發器相同的值。使得兩個觸發器在同一個邊沿處移位同樣的數據,最終導致功能錯誤。
解決方法:將時鍾偏移最小化
時鍾偏移最小化
一、在數據路徑上加延遲
含義:在數據路徑上增加延遲,使數據路徑的延遲大於時鍾偏移。
要求:在數據路徑中插入的延遲必須足夠大以保證數據路徑延遲一定能大於始終偏移。
二、時鍾反轉
含義:將時鍾相對於數據反轉使用,即讓第二級寄存機較第一級先接收到時鍾信號;
缺點:
- 犧牲了第一級的建立時間來提高保持時間;
- 由於難以明確定義第一級觸發器,對於約翰遜計數器和線性反饋以為寄存器(LFSR)這樣的環路結構並不是很有效;
三、使用交替相位時鍾
交替使用時鍾沿:順序上相鄰的觸發器使用相反的時鍾沿觸發;
交替使用時鍾相位:順序上相鄰的觸發器分別由同一時鍾的不同相位驅動,相位差需要與針對時序進行選擇;
使用行波時鍾結構:下一級觸發器由上一級觸發器的輸出作為時鍾信號,使得觸發器不在同一時鍾翻轉,消除了時鍾偏移;
平衡線路長度:保持所有時鍾線長度相等,也保持各終端負載相同,從而保證線路長度適當平衡,實現低的時鍾驅動器偏移;
Caution:
- 緊密關注驅動器上的輸入-輸出延遲規范;
- 在時鍾各級層次上使用同樣的驅動器;
- 平衡各級標稱的線路延遲;
- 在各條線路上使用同樣的終端策略;
- 平衡各條線路的負載,這可能意味着需要再一條支路上添加多余電容以與其他分支平衡;