本附錄將介紹標(biāo)準(zhǔn)延遲標(biāo)注格式,并說明了如何在仿真中執(zhí)行反標(biāo)。
延遲格式描述了設(shè)計網(wǎng)表的單元延遲和互連走線延遲,無論設(shè)計是用兩種主要硬件描述語言(VHDL 或 Verilog HDL)中的哪一種所描述的。
本章還會介紹仿真的反標(biāo)(backannotation),STA 的反標(biāo)其實是一個簡單直接的過程,其中 DUA 中的時序弧將由 SDF 所指定的延遲進行標(biāo)注。
B.1 什么是 SDF?
SDF 是指標(biāo)準(zhǔn)延遲格式(Standard Delay Format)。它是一個 IEEE 標(biāo)準(zhǔn)——IEEE Std1497,它是 ASCII 文本文件,它描述了時序信息和約束,其目的是用作各種工具之間的文本類型的時序信息交換媒介,它也可以用來描述需要它的工具的時序數(shù)據(jù)。由于它是 IEEE 標(biāo)準(zhǔn),因此由一個工具生成的時序信息可以被支持該標(biāo)準(zhǔn)的許多其它工具所使用。SDF 中的數(shù)據(jù)與工具和語言都無關(guān),且包括了互連走線延遲、器件延遲以及時序檢查的規(guī)范。
由于 SDF 是 ASCII 文件,因此它易于閱讀,盡管對于實際設(shè)計而言,這些文件往往很大。但是,它是作為工具之間的交換媒介。經(jīng)常在進行信息交換時,一個工具可能會在生成 SDF 文件時產(chǎn)生一個問題,而另一個讀取 SDF 的工具可能無法正確讀取 SDF。讀取 SDF 的工具可能會在讀取 SDF 時產(chǎn)生一個錯誤或警告,或者它可能會錯誤地解釋 SDF 中的值。在這種情況下,設(shè)計人員可能必須查看 SDF 文件,看看出了什么問題。本章介紹了 SDF 文件的基礎(chǔ)知識,并提供了必要和足夠的信息,以幫助理解和調(diào)試任何標(biāo)注問題。
圖 B-1 顯示了如何使用 SDF 文件的典型流程。時序計算工具通常會生成時序信息存儲在 SDF 文件中。然后,通過讀取 SDF 的工具將該信息反標(biāo)到設(shè)計中。請注意,完整的設(shè)計信息不會都存儲到 SDF 文件中,而只會存儲延遲值。例如,實例名稱和實例的引腳名稱將被存儲到 SDF 文件中,因為它們對于指定實例相關(guān)或引腳相關(guān)的延遲是必需的。因此,必須為 SDF 生成工具和 SDF 讀取工具提供相同的設(shè)計。
圖 B-1
一個設(shè)計可以具有多個與之關(guān)聯(lián)的 SDF 文件??梢詾橐粋€設(shè)計創(chuàng)建一個 SDF 文件,在分層設(shè)計中,也可以為分層中的每個塊創(chuàng)建多個 SDF 文件。在標(biāo)注期間,每個 SDF 都將應(yīng)用于適當(dāng)?shù)姆謱訉嵗?,如圖 B-2 所示。
圖 B-2
SDF 文件包含了用于反標(biāo)和標(biāo)注的時序數(shù)據(jù)。更具體地說,它包含:
單元延遲(Cell delays)
脈沖傳播(Pulse propagation)
時序檢查(Timing checks)
互連走線延遲(Interconnect delays)
時序環(huán)境(Timing environment)
引腳到引腳的延遲(pin-to-pin delay)和分布式延遲(distributed delay)都可以針對單元延遲進行建模。引腳到引腳的延遲使用 IOPATH 結(jié)構(gòu)(construct)表示,這些結(jié)構(gòu)定義了每個單元輸入到輸出的路徑延遲。COND 結(jié)構(gòu)還可以用于額外指定有條件的引腳到引腳延遲。狀態(tài)相關(guān)(state-dependent)的路徑延遲也可以使用 COND 結(jié)構(gòu)來指定,分布式延遲的建模是使用 DEVICE 結(jié)構(gòu)指定的。
脈沖傳播結(jié)構(gòu)——PATHPULSE 和 PATHPULSEPERCENT 可用于指定使用引腳到引腳延遲模型時允許傳播到單元輸出端口的毛刺大小。
可以在 SDF 中指定的時序檢查包括:
建立時間:SETUP,SETUPHOLD
保持時間:HOLD,SETUPHOLD
恢復(fù)時間:RECOVERY,RECREM
撤銷時間:REMOVAL,RECREM
最大偏斜:SKEW,BIDIRECTSKEW
最小脈沖寬度:WIDTH
最小周期:PERIOD
不變化:NOCHANGE
時序檢查中的信號可能存在某些條件。在時序檢查中允許使用負(fù)值,不支持負(fù)值的工具可以選擇將其替換為零。
SDF 描述中支持三種類型的互連走線建模。INTERCONNECT 結(jié)構(gòu)是最通用且最常用的,可用于指定點對點延遲(從源端到接收端),因此單個網(wǎng)絡(luò)可以具有多個 INTERCONNECT 結(jié)構(gòu)。PORT 結(jié)構(gòu)可用于指定負(fù)載端口處的網(wǎng)絡(luò)延遲,假定網(wǎng)絡(luò)只有一個源端驅(qū)動。NETDELAY 結(jié)構(gòu)可用于指定整個網(wǎng)絡(luò)的延遲,而無需考慮其源端或接收端,因此是指定網(wǎng)絡(luò)上延遲的最不具體的方法。
時序環(huán)境提供了設(shè)計在工作時所依據(jù)的信息,這些信息包括 ARRIVAL,DEPARTURE,SLACK 和 WAVEFORM 結(jié)構(gòu)。這些結(jié)構(gòu)主要用于標(biāo)注,例如可用于綜合。
B.2 SDF 格式
SDF 文件包含一個首部(header section),后跟一個或多個單元。每個單元代表設(shè)計中的一個區(qū)域或范圍,它可以是庫原語(primitive)或用戶自定義的黑盒。
首部包含一般信息,除了層次結(jié)構(gòu)分隔符、時間刻度(timescale)和 SDF 版本號外,都不會影響 SDF 文件的語義。默認(rèn)情況下,層次結(jié)構(gòu)分隔符 DIVIDER 是點字符(“.”)。通過以下方法,可以將其替換為“/”字符:
- (DIVIDER /)
如果首部中沒有時間刻度信息,則默認(rèn)值為 1ns。否則,可以使用以下命令明確指定時間刻度 TIMESCALE:
- (TIMESCALE 10ps)
也就是說,將 SDF 文件中指定的所有延遲值乘以 10ps。
SDF 版本號 SDFVERSION 是必需的,SDF 文件的使用者會根據(jù)它來確保文件符合指定的 SDF 版本。首部中可能存在的其它信息(屬于常規(guī)信息類別)包括日期、程序名稱、版本和工作條件。
首部之后是一個或多個單元的描述,每個單元在設(shè)計中代表一個或多個實例(使用通配符),單元可以是庫原語或分層塊(hierarchical block)。
單元的順序很重要,因為數(shù)據(jù)是從上到下進行處理的。后面的單元描述可以覆蓋前面的單元描述所指定的時序信息(通常,兩次定義同一單元實例的時序信息并不常見)。另外,可以將時序信息標(biāo)注為絕對值或增量的形式。如果時序信息使用增量的形式,它將會把新值添加到現(xiàn)有值中。而如果時序信息是絕對值,它將覆蓋任何先前指定的時序信息。
單元實例可以是分層實例名稱。用于層次結(jié)構(gòu)分隔的分隔符必須符合首部中指定的分隔符。單元實例名稱可以選擇為“ * ”字符,即通配符,這表示指定類型的所有單元實例。
單元中可以描述四種類型的時序規(guī)范:
DELAY:用于描述延遲
TIMINGCHECK:用于描述時序檢查
TIMINGENV:用于描述時序環(huán)境
LABEL:聲明可用于描述延遲的時序模型變量。
以下是一些例子:
DELAY 時序規(guī)范有四種類型:
ABSOLUTE:在反標(biāo)期間替換單元實例的現(xiàn)有延遲值。
INCREMETN:將新的延遲數(shù)據(jù)添加到單元實例的任何現(xiàn)有延遲值。
PATHPULSE:指定設(shè)計輸入和輸出之間的脈沖傳播極限。此極限值用于決定是將出現(xiàn)在輸入上的脈沖傳播到輸出,還是將其標(biāo)記為“ X ”,或者將其濾除。
PATHPULSEPERCENT:除了值以百分比表示外,這與 PATHPULSE 完全相同。
以下是一些例子:
RN 和 Q 是單元的輸入端口和輸出端口。第一個值 3 是脈沖抑制極限(pulse rejection limit),稱為 r-limit,它定義了可以出現(xiàn)在輸出上的最窄脈沖。窄于此的任何脈沖都會被拒絕通過,也就是說,它將不會出現(xiàn)在輸出上。第二個值 7(如果存在)是錯誤極限(error limit),也稱為 e-limit。任何小于 e-limit 的脈沖都會導(dǎo)致輸出為“ X ”。e-limit 必須大于 r-limit,如圖 B-3 所示。當(dāng)出現(xiàn)小于 3(r-limit)的脈沖時,該脈沖不會傳播到輸出;當(dāng)脈沖寬度在 3(r-limit)和 7(e-limit)之間時,輸出為 X ;當(dāng)脈沖寬度大于 7(e-limit)時,脈沖會傳播到輸出且沒有任何濾除(unfiltered)。
圖 B-3
可以使用 ABSOLUTE 或 INCREMENT 描述八種延遲定義:
IOPATH:輸入到輸出路徑的延遲。
RETAIN:保留時間定義,可以用于指定輸出端口在其相關(guān)輸入端口改變后應(yīng)保留其先前值的時間。
COND:條件路徑延遲,可以用于指定狀態(tài)相關(guān)的輸入到輸出路徑延遲。
CONDELSE:默認(rèn)路徑延遲,可以用于指定條件路徑的默認(rèn)值。
PORT:端口延遲,可以用于指定互連走線延遲,該延遲被建模為輸入端口的延遲。
INTERCONNECT:互連走線延遲,可以用于指定從其源端到接收端的整個網(wǎng)絡(luò)的傳播延遲。
NETDELAY:網(wǎng)絡(luò)延遲,可以用于指定從一個網(wǎng)絡(luò)的所有源端到所有接收端的傳播延遲。
DEVICE:器件延遲,主要用于描述分布式時序模型,可以用于指定通過單元到輸出端口的所有路徑的傳播延遲。
以下是一些例子:
輸入 A 上的值發(fā)生更改后,Y 將保留其先前值 50ps(低電平為 40ps)。50ps 是保持高電平的值,40ps 是保持低電平的值,101ps 是傳播上升沿延遲,90ps 是傳播下降沿延遲,如圖 B-4 所示。
圖 B-4
延遲
到目前為止,我們已經(jīng)看過了許多不同形式的延遲,其實延遲規(guī)范還有其它形式。通常,可以將延遲指定為一個、兩個、三個、六個或十二個令牌(token)的集合,這些令牌可用于描述以下過渡的延遲:0-> 1、1-> 0、0-> Z,Z-> 1,1-> Z,Z-> 0,0-> X,X-> 1,1-> X,X-> 0,X-> Z,Z-> X。下表展示了如何使用少于十二個延遲令牌來表示十二種過渡情況。
以下是這些延遲的一些示例:
每個延遲令牌可以依次寫為一個、兩個或三個值,如以下示例所示:
一個 SDF 文件中的延遲值可以使用有符號的實數(shù)或以下形式的三元數(shù)組來編寫:
- ( 8.0:3.6:9.8 )
為了表示出設(shè)計在三個工藝工作條件下的最小、典型以及最大延遲,注釋器通常會根據(jù)用戶提供的選項來決定去選擇哪個值。三元數(shù)組形式中的值是可選的,但是至少應(yīng)有一個。例如,以下形式是規(guī)范的:
( ::0.22)
( 1.001 ::0.998 )
未指定的值就不會去標(biāo)注。
時序檢查
在以 TIMINGCHECK 關(guān)鍵字開頭的部分中指定了時序檢查的極限。在任何這些檢查中,可以使用 COND 結(jié)構(gòu)指定有條件的時序檢查。在某些情況下,可以指定兩個額外的條件檢查 SCOND 和 CCOND,它們與 stamp event 和 check event 關(guān)聯(lián)。
以下是一組檢查:
SETUP:建立時間檢查
HOLD:保持時間檢查
SETUPHOLD:建立時間和保持時間檢查
RECOVERY:恢復(fù)時間檢查
REMOVAL:撤銷時間檢查
RECREM:恢復(fù)時間和撤銷時間檢查
SKEW:單向偏斜時序檢查
BIDIRECTSKEW:雙向偏斜時序檢查
WIDTH:脈寬時序檢查
PERIOD:周期時序檢查
NOCHANGE:不變化時序檢查
以下是一些例子:
標(biāo)簽
標(biāo)簽可用于指定 VHDL 泛型(generics)或 Verilog HDL 參數(shù)的值。
時序環(huán)境
有許多結(jié)構(gòu)可用于描述設(shè)計的時序環(huán)境。但是,這些結(jié)構(gòu)可用于標(biāo)注,而不是用于反標(biāo),例如在邏輯綜合工具中。這些未在本文中描述。
B.2.1 例子
接下去,我們將為兩個設(shè)計提供完整的 SDF 文件。
全加器
這是用于全加器(full-adder)電路的 Verilog HDL 網(wǎng)表(netlist):
以下是時序分析工具生成的完整 SDF 文件:
INTERCONNECT 中的所有延遲均為 0,因為這是布局前的數(shù)據(jù),因此建模的是理想互連走線模型。
十進制計數(shù)器
這是十進制計數(shù)器的 Verilog HDL 模型:
對應(yīng)的完整 SDF 文件如下:
B.3 標(biāo)注過程
在本節(jié)中,我們將介紹如何在 HDL 描述中進行 SDF 的標(biāo)注(annotation)。SDF 的標(biāo)注可以通過多種工具執(zhí)行,例如邏輯綜合工具、仿真工具和靜態(tài)時序分析工具。SDF 標(biāo)注器(annotator)是這些工具的組件,可用于讀取 SDF、解釋并向設(shè)計中標(biāo)注時序值。假定會使用與 HDL 模型一致的信息創(chuàng)建 SDF 文件,并且在反標(biāo)期間使用相同的 HDL 模型。此外,SDF 標(biāo)注器還需要負(fù)責(zé)正確解釋 SDF 中的時序值。
SDF 標(biāo)注器標(biāo)注了反標(biāo)時序的泛型和參數(shù)。如果在語法或映射(mapping)過程中不符合該標(biāo)準(zhǔn),它將給出錯誤報告。如果一個 SDF 標(biāo)注器不支持某些 SDF 結(jié)構(gòu),則不會產(chǎn)生任何錯誤,標(biāo)注器將忽略這些錯誤。
如果 SDF 標(biāo)注器未能修改反標(biāo)時序的泛型,則在反標(biāo)過程中不會修改泛型的值,即保持不變。
在仿真工具中,反標(biāo)通常發(fā)生在規(guī)劃(elaboration)階段之后,緊接在負(fù)約束延遲計算之前。
B.3.1 Verilog HDL
在 Verilog HDL 中,標(biāo)注的主要機制是指定塊(specify block),指定塊可以指定路徑延遲和時序檢查。實際延遲值和時序檢查極限值是通過 SDF 文件指定的,映射是一種行業(yè)標(biāo)準(zhǔn),在 IEEE Std 1364 中定義。
從 SDF 文件中獲得并在 Verilog HDL 模塊的指定塊中標(biāo)注的信息包括指定路徑的延遲、參數(shù)值、時序檢查約束極限值和互連走線延遲。向一個 Verilog HDL 模型進行標(biāo)注時,將忽略 SDF 文件中的其它結(jié)構(gòu)。SDF 中的 LABEL 部分定義了參數(shù)值。通過將 SDF 結(jié)構(gòu)與相應(yīng)的 Verilog HDL 聲明進行匹配,然后將現(xiàn)有的時序值替換為 SDF 文件中的時序值,即可完成反標(biāo)。
下表顯示了 SDF 延遲值如何映射到 Verilog HDL 延遲值:
下表描述了 SDF 結(jié)構(gòu)到 Verilog HDL 結(jié)構(gòu)的映射:
有關(guān)示例,請參見后面部分。
B.3.2 VHDL
SDF 到 VHDL 的標(biāo)注是一個行業(yè)標(biāo)準(zhǔn),它在 VITAL ASIC 建模規(guī)范的 IEEE 標(biāo)準(zhǔn) IEEE Std 1076.4 中定義,該標(biāo)準(zhǔn)的其中一部分描述了 SDF 延遲到 ASIC 庫的標(biāo)注。在這里,我們僅介紹與 SDF 映射有關(guān)的 VITAL 標(biāo)準(zhǔn)的相關(guān)部分。
SDF 可用于直接在符合 VITAL 的模型中修改反標(biāo)時序泛型,只能使用 SDF 為符合 VITAL 的模型指定時序數(shù)據(jù)。有兩種方法可以將時序數(shù)據(jù)傳遞到 VHDL 模型中:通過配置,或直接傳遞到仿真中去。SDF 標(biāo)注過程包括在仿真期間在符合 VITAL 的模型中映射 SDF 結(jié)構(gòu)和相應(yīng)的泛型。
在符合 VITAL 的模型中,存在著有關(guān)如何命名和聲明泛型的規(guī)則,以確保可以在模型的時序泛型和相應(yīng)的 SDF 時序信息之間建立映射。
時序泛型由泛型名稱及其類型組成,名稱指定時序信息的種類,類型指定時序值的種類。如果泛型名稱不符合 VITAL 標(biāo)準(zhǔn),則它不是時序泛型,也不會被標(biāo)注。
下表顯示了 SDF 延遲值如何映射到 VHDL 延遲:
在 VHDL 中,時序信息是通過泛型進行反標(biāo)的。泛型名稱遵循一定的規(guī)則,以便保持一致或從 SDF 結(jié)構(gòu)中獲取。利用每個時序泛型名稱,可以指定條件邊沿的可選后綴。邊沿可以指定一個與時序信息相關(guān)聯(lián)的邊沿。
下表列出了各種時序泛型名稱:
打個廣告
?
新一期的路科驗證春季班已經(jīng)開始了!現(xiàn)在報名早鳥班(開班之前)即可享受 500 優(yōu)惠,此外在文末掃描二維碼聯(lián)系路科驗證 MOMO,然后報出 a 暗號
摸魚范式
就能獲得額外的200 優(yōu)惠券
!可以和早鳥班的 500 優(yōu)惠疊加!對于課程學(xué)習(xí)有任何問題,都可以掃描下面的二維碼,加我微信咨詢。除了這門升級中的 V2Pro 課程,恐怕你找不到更好的學(xué)驗證的途徑了
?
?
貝塔的微信?
?
MOMO 的微信?