RTL ?designer面臨的重大挑戰(zhàn)之一是預先識別完整的timing?exceptions。這成為復雜設計中的一個迭代過程,傳統是基于時序報告中的關鍵路徑或故障路徑分析來識別額外的timing?exceptions。這種方法會留下大量可能不是真實的時序路徑,但這些路徑永遠不會被識別,因為它們可能不會出現在關鍵路徑報告中。然而,綜合和時序工具將在不需要時繼續(xù)消耗資源來優(yōu)化這些路徑。同時,它也會影響chip的面積和功耗。
什么是false?path
false path是設計中的那些時序弧,其中源寄存器的變化預計不會在特定時間間隔內被目標寄存器捕獲。false path可以歸類為以下類型。
Static False Path
Static False Path是在設計中源寄存器的激勵不會對目標寄存器產生任何影響或改變的時序弧。即使源觸發(fā)器和目標觸發(fā)器都在相同的時鐘域上運行,這些時序路徑也不會被任何輸入向量改變狀態(tài)。
例1
下圖描述了Static False Path的示例。這里 D1.Q 的變化永遠不會導致 D4.D 的任何變化。D4 flop 的值將始終由 D2 的值決定。因此,對于這個特定的電路,D1->D4 可以被視為False Path。
圖1?Static timing path
例2
在系統中定義了一個控制位,如果該位被設置,進入 DMA 控制器的時鐘將在低功耗 (STOP) 模式下保持啟用,否則時鐘將在 STOP 模式下被gated。
圖2?DMA Clock gating
在上述電路中,當系統處于 RUN 模式時,時鐘門控單元將始終保持啟用,并且 dma_en 控制寄存器的任何變化都不會影響時鐘門控使能生成邏輯。在進入低功耗 STOP 模式之前,用戶應該在 RUN 模式下寫入/更改此控制寄存器。一旦系統進入停止模式,dma_en 寄存器的預編程值將控制時鐘門控單元的狀態(tài)。單周期時序路徑是從“stop_mode_reg -> CG_cell”生成的路徑。路徑“dma_en_reg -> CG_cell”是false path。即使觸發(fā)器 dma_en_reg->CG 單元之間的組合延遲非常小,這種拓撲中的時鐘偏移和單元布局也可能導致時序問題。為時序分析工具提供正確的exceptions將有助于在第一次迭代中優(yōu)化單元布局。
例3
IO 輸出時序弧通常很關鍵,是決定同步協議接口的最大波特率支持的限制因素。識別正確的 REG->OUT 時序弧并通過將無效的 REG->OUT 路徑限制為false path來隔離它們變得很重要。它可以節(jié)省大量的迭代時間和時間和布局工具為滿足同步接口的 IO-Spec 而付出的努力。
通常,在開始任何數據傳輸之前,需要正確配置協議模塊。這些配置寄存器在任何數據傳輸都被認為是靜態(tài)的。然而,從這些配置寄存器到output pad可能存在時序弧。這是另一個示例,其中前期設計約束有助于簡化時序工具的任務以滿足目標頻率。
在下面給出的拓撲中,配置寄存器(config1、config2 和 config3)應該在進行任何數據傳輸之前使用特定值進行編程。當數據傳輸開始時,有效的時序弧為移位寄存器->combo3->IO 緩沖區(qū)->PAD。然而,源自 config1/2/3 并在 PAD 處終止的時序弧可以很容易地通過設置false path exceptions來禁用。
圖3?與configuration registers寄存器相關的3?I/O path
但是,需要正確審查上述exceptions情況,以避免任何未發(fā)現的極端情況。例如:在半雙工通信或存儲器接口中,數據方向可以即時改變。所以可能需要滿足“數據方向寄存器->PAD”的時序,不能認為是false path。
False Reset Timing Arc
在設備啟動期間,不需要設備的所有應用程序模塊都保持啟用狀態(tài)。因此,默認情況下,這些模塊的時鐘是門控的。在系統復位無效序列期間,這些模塊的復位無效發(fā)生在沒有時鐘的情況下。由于沒有時鐘,因此不會由于復位取消斷言時序違規(guī)而導致亞穩(wěn)態(tài)。因此,這些模塊的異步復位恢復/取消斷言路徑可以被視為false path。
Asynchronous False Path (CDC path)
如果源寄存器的時鐘域與目標寄存器的時鐘域異步,則該路徑被視為異步或Clock Domain Crossing path(CDC)路徑。在這些路徑中不可能有任何時序相關性,因為在啟動域和捕獲域的時鐘沿之間沒有定義的關系。這些路徑可以被視為時序分析的false path。在這種情況下,設計人員有責任避免在捕獲域寄存器時發(fā)生任何建立/保持沖突。有一些流行的同步技術,這些技術有助于避免異步時鐘設計中出現亞穩(wěn)態(tài)。設計人員應在綜合之前將這些異常提供給時序工具。有時可能會在 SOC 集成中將異步設計與同步時鐘一起使用。在這種情況下,這些exceptions特別有用,因為時序工具實際上并不需要優(yōu)化這些使用同步拓撲的時序路徑。
雙觸發(fā)器同步技術(Two Flop Synchronizer?)
當信號從一個時鐘域跨越到另一個時鐘域時,需要先同步,然后才能在目標域中使用。目標寄存器可能會遇到建立/保持沖突,因為啟動和捕獲時鐘域邊沿之間沒有關系。使用第二個觸發(fā)器阻止同步器第一個觸發(fā)器中的亞穩(wěn)態(tài)問題,假設第一個觸發(fā)器將在下一個時鐘沿到達第二個觸發(fā)器之前穩(wěn)定到一個值。兩個觸發(fā)器上出現亞穩(wěn)態(tài)的概率直接取決于時鐘源的頻率。違規(guī)情況下的建立時間取決于特定技術庫的觸發(fā)器特性,并且必須小于設計中支持的最快時鐘。
圖4?Two Flop Synchronizer
請注意,在亞穩(wěn)態(tài)期過后,DB1 信號沒有必要穩(wěn)定到一個高值。設計必須保證 DA 信號在目標時鐘一個以上周期內的穩(wěn)定性。如果設計不能保證穩(wěn)定性,那么同樣會導致目標域中非預期的寄存器的信號發(fā)生變化。
Two Flop Synchronizer通常用于跨域同步控制信號。
多路同步器(Mux Synchronizer)
當設計人員必須跨任何時鐘域傳輸多位數據總線時,通常使用基于多路復用器同步器的設計拓撲。在此拓撲中,數據總線的時鐘域交叉由多路復用器選擇信號控制,當輸入數據在多路復用器輸入處變?yōu)橛行r,該信號將被啟用。這確保了目標觸發(fā)器永遠不會由于數據輸入的變化而處于亞穩(wěn)定狀態(tài)。
設計人員必須確保在多路復用器啟用其輸入路徑時輸入數據應保持穩(wěn)定,并且僅在多路復用器選擇反饋路徑時才應更改。
圖6?Mux Synchronizer
FIFO(First In, First Out)
FIFO 通常用于將數據從一個時鐘域安全地傳遞到另一個異步時鐘域。使用 FIFO 將數據從一個時鐘域傳遞到另一個時鐘域需要多異步時鐘設計技術。
圖7?Asynchronous Fifo
寫指針指向數據寫入的下一個內存位置。讀取指針指向要讀取的當前 FIFO 位置。寫指針值隨寫時鐘變化,讀指針值隨讀時鐘變化,但是兩個指針都跨時鐘域來確定 fifo 滿/空邏輯。因此,在使用 FIFO 滿/空邏輯之前,在目標時鐘域中同步它們很重要。對于多位信號,在跨時鐘域之前首選格雷編碼。
握手(Handshaking)
將數據從一個時鐘域發(fā)送到另一個時鐘域的流行方法之一是使用握手協議,其中發(fā)送方通過請求發(fā)送數據,接收方通過發(fā)送確認來確認數據。在目標域狀態(tài)機內部使用之前,請求和確認信號都在目標時鐘域中同步。
圖8?Handshaking scheme
偽異步false?path(Pseudo Asynchronous False Path)
偽異步false?path是指源寄存器和目標寄存器都由相同時鐘或源自同一源的時鐘提供時鐘,但它們的設計方式仍然無法滿足時序規(guī)范,可以忽略不計。源寄存器和目標寄存器之間的時鐘和數據偏差差異使得幾乎不可能滿足時序要求。在這種情況下,設計人員需要確保這些路徑不應有任何嚴格的時序要求。
圖9?Pseudo Async False Path
在上述設計中,PLL 時鐘與其他片上/片外時鐘源一起用于生成 system_clk。盡管 system_clk 源自 PLL,但由于功能和測試時鐘多路復用器、后分頻器和時鐘門控單元存在于時鐘路徑中,因此 PLL 輸出和系統時鐘之間存在一條巨大的非普通路徑。
工作在 PLL 輸出上的電路可以與系統時鐘中存在的邏輯通信。由于系統時鐘來自 PLL,因此兩個時鐘都被視為同步。工具將嘗試滿足相同的時間要求。然而,巨大的非普通時鐘路徑有時會成為計時工具遇到的噩夢。這種偽異步路徑可以被視為False Path。然而,處理False Path并不能阻止“capture_intc_reg”變得亞穩(wěn)定,因為沒有確??赡軐е氯魏喂δ芄收系臅r序。
在上述設計中,放置了一個 2 觸發(fā)器同步器,它阻止亞穩(wěn)態(tài)傳播到整個系統?,F在,只需將“D1_reg->Sync1_reg”路徑視為False Path。
在上述電路中,設計人員應確保延遲,因為雙觸發(fā)器同步器不會導致設計中的任何協議或功能問題。