3.4 時序模型 - 時序邏輯單元
考慮如下圖 3-8 所示的時序邏輯單元的時序?。?/p>
圖 3-8
對于同步(synchronous)輸入,例如引腳 D(或 SI,SE),存在以下時序?。?/p>
- 建立(Setup)時間檢查時序?。òㄉ仙睾拖陆笛兀┍3郑℉old)時間檢查時序?。òㄉ仙睾拖陆笛兀?/li>
對于異步(asynchronous)輸入,例如引腳 CDN,存在以下時序弧:
- 恢復(fù)(Recovery)時間檢查時序弧撤銷(Removal)時間檢查時序弧
對于觸發(fā)器的同步輸出,例如引腳 Q 或 QN,存在以下時序?。?/p>
- 時鐘引腳(CK)到輸出端口(Q 或 QN)的傳播延遲時序弧(包括上升沿和下降沿)
所有同步時序弧均相對于時鐘的有效沿(active edge),即時序邏輯單元捕獲數(shù)據(jù)的時鐘沿。此外,時鐘引腳和異步引腳(如復(fù)位引腳)還需要進行脈沖寬度(pulse width)時序檢查。各種時序檢查如下圖 3-9 所示:
圖 3-9
?
3.4.1 同步時序檢查:建立時間與保持時間
需要進行建立時間和保持時間的同步時序檢查,才能確保數(shù)據(jù)能夠正確通過時序單元傳播。這些時序檢查可驗證輸入的數(shù)據(jù)在時鐘有效沿上是否為確定的邏輯狀態(tài),并且在有效沿上將正確的數(shù)據(jù)鎖存下來。這些時序檢查也可以驗證輸入的數(shù)據(jù)在有效時鐘沿附近是否穩(wěn)定:輸入的數(shù)據(jù)必須在有效時鐘沿之前保持穩(wěn)定的最短時間稱為建立時間(setup time)。這是根據(jù)最晚的(the latest)數(shù)據(jù)信號超過其閾值(通常為 Vdd 的 50%)到有效時鐘沿超過其閾值(通常為 Vdd 的 50%)的時間間隔測量的。同樣,保持時間(hold time)是在時鐘有效沿之后輸入的數(shù)據(jù)必須保持穩(wěn)定的最短時間,這也是根據(jù)有效時鐘沿超過其閾值到最早的(the earliest)數(shù)據(jù)信號超過其閾值的時間間隔來度量的。如前文所述,時序單元的時鐘有效沿是指使時序單元捕獲數(shù)據(jù)的上升沿或下降沿。
?
建立時間與保持時間檢查示例
時序單元同步引腳的建立時間和保持時間約束通常用二維表格來描述,如下所示。下面的例子展示了觸發(fā)器數(shù)據(jù)引腳的建立時間和保持時間時序信息:
上面的例子展示了相對于時序單元時鐘引腳 CK 的上升沿,在輸入引腳 D 上的建立時間和保持時間約束。二維表格模型是根據(jù)約束引腳 constrained_pin(D)和相關(guān)引腳 related_pin(CK)處的過渡時間確定的,二維表格的查找是基于庫中描述的模板 setuphold_template_3x3 的。對于上述示例,查找表模板 setuphold_template_3x3 如下所示:
與前面示例中一樣,表中的值如嵌套循環(huán)一樣被指定,其中第一個索引 index_1 是外部循環(huán)變量,第二個索引 index_2 是內(nèi)部循環(huán)變量, 以此類推。因此,當(dāng) D 引腳的上升沿過渡時間為 0.4ns,CK 引腳的上升沿過渡時間為 0.84ns 時,D 引腳上升沿的建立時間約束為 0.112ns,該值是從 rise_constraint 表中讀取的。對于 D 引腳的下降沿,建立時間約束將檢查建立時間表中的 fall_constraint 表。在表中查找過渡時間不與索引值相對應(yīng)的建立時間和保持時間約束時,可使用章節(jié) 3.2 中所描述的非線性模型查找的一般過程。
請注意,建立時間約束的 rise_constraint 和 fall_constraint 表是指 constrained_pin。所用的時鐘過渡時間由 Timing_type 決定,它會指定該時序邏輯單元是上升沿觸發(fā)還是下降沿觸發(fā)。
?
建立時間和保持時間檢查里的負(fù)值
請注意,上面示例中的某些保持時間值是負(fù)數(shù)。這是可以接受的,這種情況通常發(fā)生在觸發(fā)器的引腳到數(shù)據(jù)內(nèi)部鎖存點的路徑長于相應(yīng)的時鐘路徑時。因此,負(fù)的保持時間檢查意味著觸發(fā)器的數(shù)據(jù)引腳可以在時鐘引腳之前改變,并且仍然滿足保持時間的檢查要求。
觸發(fā)器的建立時間值也可以為負(fù)。這意味著觸發(fā)器的數(shù)據(jù)引腳可以在時鐘引腳之后改變,并且仍然滿足建立時間的檢查要求。
建立時間和保持時間可以都為負(fù)嗎?不行!為使建立時間和保持時間檢查相一致,建立時間和保持時間的數(shù)值總和應(yīng)為正。因此,如果建立(或保持)時間檢查包含負(fù)值,則相應(yīng)的保持(或建立)時間檢查應(yīng)為正值,且足夠大,以使建立時間加上保持時間之和是一個正數(shù)。具有負(fù)的保持時間值的示例如圖 3-10 所示,由于建立時間檢查會先于保持時間檢查,所以此時的建立時間加上保持時間顯然是一個正數(shù)。建立時間加上保持時間即為要求數(shù)據(jù)信號穩(wěn)定的區(qū)域的寬度。
圖 3-10
?
對于觸發(fā)器,在掃描數(shù)據(jù)(scan data)輸入引腳上設(shè)置一個負(fù)的保持時間會很有幫助,這樣可以給予時鐘偏斜(clock skew)一定的靈活性,并且可以消除當(dāng)掃描模式(scan mode)下保持時間發(fā)生違例時插入緩沖器(buffer)的需要(掃描模式是將觸發(fā)器串聯(lián)在一起形成一條掃描鏈的模式,觸發(fā)器的輸出通常連接到串聯(lián)的下一個觸發(fā)器的掃描數(shù)據(jù)輸入引腳,這些連接是用于芯片測試的)。
與同步數(shù)據(jù)輸入引腳上的建立時間或保持時間檢查類似,對異步引腳進行的時序約束檢查將在下個小節(jié)中介紹。
?
3.4.2 異步時序檢查
恢復(fù)時間和撤銷時間檢查
諸如異步復(fù)位(clear)或異步置位(set)之類的異步引腳會覆蓋單元的任何同步行為。當(dāng)異步引腳處于有效(active)狀態(tài)時,輸出將由異步引腳控制,而不是由時鐘鎖存到的輸入數(shù)據(jù)控制。但是,當(dāng)異步引腳變?yōu)闊o效(inactive)狀態(tài)時,時鐘的有效邊沿將開始鎖存輸入的數(shù)據(jù)。異步恢復(fù)(recovery)時間和撤銷(removal)時間約束檢查將驗證異步引腳在下一個時鐘有效沿處是否已明確返回到了無效狀態(tài)。
恢復(fù)時間是指異步輸入被置為無效(de-asserted)后在下一個時鐘有效沿之前需要保持穩(wěn)定的最短時間。
同樣,撤銷時間是指在一個有效的時鐘沿之后,異步引腳必須保持有效狀態(tài)的最小時間,即在有效時鐘沿之后必須經(jīng)過一段撤銷時間才能夠?qū)惒揭_置為無效狀態(tài)。
異步恢復(fù)時間和撤銷時間檢查將分別在 8.6 節(jié)和 8.7 節(jié)中介紹。
?
脈沖寬度檢查
除了同步和異步時序檢查外,還有一項檢查去確保邏輯單元輸入引腳上的脈沖寬度滿足最低要求。例如,如果時鐘引腳上的脈沖寬度小于指定的最小值,則時鐘可能無法正確鎖存數(shù)據(jù)。也可以為相關(guān)的同步和異步引腳指定脈沖寬度檢查(pulse width check),并且可以為高脈沖和低脈沖分別指定最小脈沖寬度檢查。
?
恢復(fù)時間、撤銷時間和脈沖寬度檢查示例
下面給出了觸發(fā)器的異步清零引腳 CDN 的恢復(fù)時間、撤銷時間和脈沖寬度檢查的示例,其中恢復(fù)時間和撤銷時間檢查還與時鐘引腳 CK 有關(guān)。由于恢復(fù)時間和撤銷時間檢查是針對異步引腳被置為無效的時刻,因此在以下示例中僅存在上升約束。CDN 引腳的最小脈沖寬度檢查用于低脈沖,這是由于 CDN 引腳為低電平有效,因此該引腳上的高脈沖寬度沒有限制,因此未指定。
?
3.4.3 傳播延遲
時序單元的傳播延遲(propagation delay)是指從時鐘的有效沿到輸出的上升沿或下降沿。以下是一個時鐘下降沿觸發(fā)的觸發(fā)器從時鐘引腳 CKN 到輸出 Q 的傳播延遲弧的示例。這是一個非單邊類型(non-unate)的時序弧,因為時鐘的有效沿會導(dǎo)致輸出引腳 Q 的電平上升或下降。
與前一章中的示例一樣,輸出的傳播延遲會根據(jù)輸入過渡時間和輸出負(fù)載電容以二維表格的形式呈現(xiàn)。但是在此示例中,由于觸發(fā)器是時鐘下降沿觸發(fā)的,因此要使用的輸入過渡時間是 CKN 引腳的下降過渡時間,這在上面的示例中可以從 Timing_type 字段中看出,上升沿觸發(fā)的觸發(fā)器將把 rising_edge 指定為其 timing_type。
?
3.5 狀態(tài)相關(guān)的時序模型
在許多組合邏輯模塊中,輸入和輸出之間的時序弧取決于模塊中其他引腳的邏輯狀態(tài)。輸入和輸出引腳之間的這些時序弧可以是正單邊類型時序弧、負(fù)單邊類型時序弧也可以既是正單邊類型又是負(fù)單邊類型時序弧。異或門(xor)以及同或門(xnor)單元就是一個例子,其輸入到輸出的時序弧可以是正單邊類型的也可以是負(fù)單邊類型的。在這種情況下,其時序行為可能會有所不同,具體取決于該模塊其他輸入的狀態(tài)。通常,取決于引腳狀態(tài)的多個時序模型被稱為狀態(tài)相關(guān)的時序模型(state-dependent models)。
考慮一個兩輸入異或門單元的例子。當(dāng)另一個輸入 A2 為邏輯 0 時,從輸入 A1 到輸出 Z 的時序路徑為正單邊類型;當(dāng)輸入 A2 為邏輯 1 時,從 A1 到 Z 的路徑為負(fù)單邊類型。這兩個時序模型是使用狀態(tài)相關(guān)的時序模型指定的。A2 為邏輯 0 時從 A1 到 Z 的時序模型如下所示:
使用 when 來指定與狀態(tài)有關(guān)的條件。雖然以上單元模型的片段僅說明了 cell_rise 延遲,但其它時序模型(cell_fall,rise_transition 和 fall_transition)也指定了相同的 when 條件。當(dāng) when 中條件改變,如改為 A2 為邏輯 1 這個條件時,會指定另一個獨立的時序模型:
sdf_cond 用于指定生成 SDF 文件時要使用的時序弧的條件,詳情參見后面 3.9 節(jié)中的示例。
狀態(tài)相關(guān)的時序模型可用于各種類型的時序弧,許多時序邏輯單元會使用狀態(tài)相關(guān)的時序模型指定建立時間或保持時間的時序約束。以下是使用狀態(tài)相關(guān)的時序模型進行保持時間約束的掃描觸發(fā)器(scan flip-flop)的一個示例。在這種情況下,指定了兩組時序模型:掃描使能引腳 SE 處于有效狀態(tài)時的一組,以及掃描使能引腳處于無效狀態(tài)時的另一組。
當(dāng)掃描使能引腳 SE 為邏輯 0 時使用以上時序模型,當(dāng) when 中條件為 SE 是高電平時也有類似的時序模型。
可以既使用狀態(tài)相關(guān)的時序模型又使用非狀態(tài)相關(guān)的時序模型來指定一些時序關(guān)系。在這種情況下,如果單元的狀態(tài)是已知的并且這個狀態(tài)包含在狀態(tài)相關(guān)的時序模型之一中,則時序分析將使用狀態(tài)相關(guān)的時序模型。而如果狀態(tài)相關(guān)的時序模型未包含單元的這個狀態(tài),則使用來自非狀態(tài)相關(guān)模型的時序。例如考慮一種情況,保持時間約束僅由當(dāng) when 條件為 SE 處于邏輯 0 時來指定,而沒有為 SE 處于邏輯 1 時指定單獨的狀態(tài)相關(guān)模型。在這種情況下,如果 SE 被置為邏輯 1,則將會使用非狀態(tài)相關(guān)時序模型的保持時間約束。而如果沒有用于保持時間約束的非狀態(tài)相關(guān)時序模型,那么將沒有任何有效的保持時間約束!
可以為時序庫中的任何屬性指定狀態(tài)相關(guān)的模型,因此可以存在功率、漏電功率、過渡時間、上升和下降延遲、時序約束等狀態(tài)相關(guān)的模型。下面給出了一個狀態(tài)相關(guān)的漏電功率模型示例: