1. 程式人生 > 實用技巧 >【附錄B:SDF 上】靜態時序分析聖經翻譯計劃

【附錄B:SDF 上】靜態時序分析聖經翻譯計劃

本文由知乎趙俊軍授權轉載,知乎主頁為https://www.zhihu.com/people/zhao-jun-jun-19

本附錄將介紹標準延遲標註格式,並說明了如何在模擬中執行反標。

延遲格式描述了設計網表的單元延遲和互連走線延遲,無論設計是用兩種主要硬體描述語言(VHDL或Verilog HDL)中的哪一種所描述的。

本章還會介紹模擬的反標(backannotation),STA的反標其實是一個簡單直接的過程,其中DUA中的時序弧將由SDF所指定的延遲進行標註。

B.1 什麼是SDF?

SDF是指標準延遲格式(Standard Delay Format)。它是一個IEEE標準——IEEE Std1497,它是ASCII文字檔案,它描述了時序資訊和約束,其目的是用作各種工具之間的文字型別的時序資訊交換媒介,它也可以用來描述需要它的工具的時序資料。由於它是IEEE標準,因此由一個工具生成的時序資訊可以被支援該標準的許多其它工具所使用。SDF中的資料與工具和語言都無關,且包括了互連走線延遲、器件延遲以及時序檢查的規範。

由於SDF是ASCII檔案,因此它易於閱讀,儘管對於實際設計而言,這些檔案往往很大。但是,它是作為工具之間的交換媒介。經常在進行資訊交換時,一個工具可能會在生成SDF檔案時產生一個問題,而另一個讀取SDF的工具可能無法正確讀取SDF。讀取SDF的工具可能會在讀取SDF時產生一個錯誤或警告,或者它可能會錯誤地解釋SDF中的值。在這種情況下,設計人員可能必須檢視SDF檔案,看看出了什麼問題。本章介紹了SDF檔案的基礎知識,並提供了必要和足夠的資訊,以幫助理解和除錯任何標註問題。

圖B-1顯示瞭如何使用SDF檔案的典型流程。時序計算工具通常會生成時序資訊儲存在SDF檔案中。然後,通過讀取SDF的工具將該資訊反標到設計中。請注意,完整的設計資訊不會都儲存到SDF檔案中,而只會儲存延遲值。例如,例項名稱和例項的引腳名稱將被儲存到SDF檔案中,因為它們對於指定例項相關或引腳相關的延遲是必需的。因此,必須為SDF生成工具和SDF讀取工具提供相同的設計。

一個設計可以具有多個與之關聯的SDF檔案。可以為一個設計建立一個SDF檔案,在分層設計中,也可以為分層中的每個塊建立多個SDF檔案。在標註期間,每個SDF都將應用於適當的分層例項中,如圖B-2所示。

SDF檔案包含了用於反標和標註的時序資料。更具體地說,它包含:

  • 單元延遲(Cell delays)

  • 脈衝傳播(Pulse propagation)

  • 時序檢查(Timing checks)

  • 互連走線延遲(Interconnect delays)

  • 時序環境(Timing environment)

引腳到引腳的延遲(pin-to-pin delay)和分散式延遲(distributed delay)都可以針對單元延遲進行建模。引腳到引腳的延遲使用IOPATH結構(construct)表示,這些結構定義了每個單元輸入到輸出的路徑延遲。COND結構還可以用於額外指定有條件的引腳到引腳延遲。狀態相關(state-dependent)的路徑延遲也可以使用COND結構來指定,分散式延遲的建模是使用DEVICE結構指定的。

脈衝傳播結構——PATHPULSE和PATHPULSEPERCENT可用於指定使用引腳到引腳延遲模型時允許傳播到單元輸出埠的毛刺大小。

可以在SDF中指定的時序檢查包括:

  • 建立時間:SETUP,SETUPHOLD

  • 保持時間:HOLD,SETUPHOLD

  • 恢復時間:RECOVERY,RECREM

  • 撤銷時間:REMOVAL,RECREM

  • 最大偏斜:SKEW,BIDIRECTSKEW

  • 最小脈衝寬度:WIDTH

  • 最小週期:PERIOD

  • 不變化:NOCHANGE

時序檢查中的訊號可能存在某些條件。在時序檢查中允許使用負值,不支援負值的工具可以選擇將其替換為零。

SDF描述中支援三種類型的互連走線建模。INTERCONNECT結構是最通用且最常用的,可用於指定點對點延遲(從源端到接收端),因此單個網路可以具有多個INTERCONNECT結構。PORT結構可用於指定負載埠處的網路延遲,假定網路只有一個源端驅動。NETDELAY結構可用於指定整個網路的延遲,而無需考慮其源端或接收端,因此是指定網路上延遲的最不具體的方法。

時序環境提供了設計在工作時所依據的資訊,這些資訊包括ARRIVAL,DEPARTURE,SLACK和WAVEFORM結構。這些結構主要用於標註,例如可用於綜合。

B.2 SDF格式

SDF檔案包含一個首部(header section),後跟一個或多個單元。每個單元代表設計中的一個區域或範圍,它可以是庫原語(primitive)或使用者自定義的黑盒。

首部包含一般資訊,除了層次結構分隔符、時間刻度(timescale)和SDF版本號外,都不會影響SDF檔案的語義。預設情況下,層次結構分隔符DIVIDER是點字元(“.”)。通過以下方法,可以將其替換為“/”字元:

  • (DIVIDER /)

如果首部中沒有時間刻度資訊,則預設值為1ns。否則,可以使用以下命令明確指定時間刻度TIMESCALE:

  • (TIMESCALE 10ps)

也就是說,將SDF檔案中指定的所有延遲值乘以10ps。

SDF版本號SDFVERSION是必需的,SDF檔案的使用者會根據它來確保檔案符合指定的SDF版本。首部中可能存在的其它資訊(屬於常規資訊類別)包括日期、程式名稱、版本和工作條件。

首部之後是一個或多個單元的描述,每個單元在設計中代表一個或多個例項(使用萬用字元),單元可以是庫原語或分層塊(hierarchical block)。

單元的順序很重要,因為資料是從上到下進行處理的。後面的單元描述可以覆蓋前面的單元描述所指定的時序資訊(通常,兩次定義同一單元例項的時序資訊並不常見)。另外,可以將時序資訊標註為絕對值或增量的形式。如果時序資訊使用增量的形式,它將會把新值新增到現有值中。而如果時序資訊是絕對值,它將覆蓋任何先前指定的時序資訊。

單元例項可以是分層例項名稱。用於層次結構分隔的分隔符必須符合首部中指定的分隔符。單元例項名稱可以選擇為“ * ”字元,即萬用字元,這表示指定型別的所有單元例項。

單元中可以描述四種類型的時序規範:

  • DELAY:用於描述延遲

  • TIMINGCHECK:用於描述時序檢查

  • TIMINGENV:用於描述時序環境

  • LABEL:宣告可用於描述延遲的時序模型變數。

以下是一些例子:

DELAY時序規範有四種類型:

  • ABSOLUTE:在反標期間替換單元例項的現有延遲值。

  • INCREMETN:將新的延遲資料新增到單元例項的任何現有延遲值。

  • PATHPULSE:指定設計輸入和輸出之間的脈衝傳播極限。此極限值用於決定是將出現在輸入上的脈衝傳播到輸出,還是將其標記為“ X ”,或者將其濾除。

  • PATHPULSEPERCENT:除了值以百分比表示外,這與PATHPULSE完全相同。

以下是一些例子:

RN和Q是單元的輸入埠和輸出埠。第一個值3是脈衝抑制極限(pulse rejection limit),稱為r-limit,它定義了可以出現在輸出上的最窄脈衝。窄於此的任何脈衝都會被拒絕通過,也就是說,它將不會出現在輸出上。第二個值7(如果存在)是錯誤極限(error limit),也稱為e-limit。任何小於e-limit的脈衝都會導致輸出為“ X ”。e-limit必須大於r-limit,如圖B-3所示。 當出現小於3(r-limit)的脈衝時,該脈衝不會傳播到輸出;當脈衝寬度在3(r-limit)和7(e-limit)之間時,輸出為X ;當脈衝寬度大於7(e-limit)時,脈衝會傳播到輸出且沒有任何濾除(unfiltered)。

可以使用ABSOLUTE或INCREMENT描述八種延遲定義:

  • IOPATH:輸入到輸出路徑的延遲。

  • RETAIN:保留時間定義,可以用於指定輸出埠在其相關輸入埠改變後應保留其先前值的時間。

  • COND:條件路徑延遲,可以用於指定狀態相關的輸入到輸出路徑延遲。

  • CONDELSE:預設路徑延遲,可以用於指定條件路徑的預設值。

  • PORT:埠延遲,可以用於指定互連走線延遲,該延遲被建模為輸入埠的延遲。

  • INTERCONNECT:互連走線延遲,可以用於指定從其源端到接收端的整個網路的傳播延遲。

  • NETDELAY:網路延遲,可以用於指定從一個網路的所有源端到所有接收端的傳播延遲。

  • DEVICE:器件延遲,主要用於描述分散式時序模型,可以用於指定通過單元到輸出埠的所有路徑的傳播延遲。

以下是一些例子:

輸入A上的值發生更改後,Y將保留其先前值50ps(低電平為40ps)。50ps是保持高電平的值,40ps是保持低電平的值,101ps是傳播上升沿延遲,90ps是傳播下降沿延遲,如圖B-4所示。

延遲

到目前為止,我們已經看過了許多不同形式的延遲,其實延遲規範還有其它形式。通常,可以將延遲指定為一個、兩個、三個、六個或十二個令牌(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檔案中的延遲值可以使用有符號的實數或以下形式的三元陣列來編寫:

  • ( 8.0:3.6:9.8 )

為了表示出設計在三個工藝工作條件下的最小、典型以及最大延遲,註釋器通常會根據使用者提供的選項來決定去選擇哪個值。三元陣列形式中的值是可選的,但是至少應有一個。例如,以下形式是規範的:

  • ( : : 0.22)

  • ( 1.001 : : 0.998 )

未指定的值就不會去標註。

時序檢查

在以TIMINGCHECK關鍵字開頭的部分中指定了時序檢查的極限。在任何這些檢查中,可以使用COND結構指定有條件的時序檢查。在某些情況下,可以指定兩個額外的條件檢查SCOND和CCOND,它們與stamp event和check event關聯。

以下是一組檢查:

  • SETUP:建立時間檢查

  • HOLD:保持時間檢查

  • SETUPHOLD:建立時間和保持時間檢查

  • RECOVERY:恢復時間檢查

  • REMOVAL:撤銷時間檢查

  • RECREM:恢復時間和撤銷時間檢查

  • SKEW:單向偏斜時序檢查

  • BIDIRECTSKEW:雙向偏斜時序檢查

  • WIDTH:脈寬時序檢查

  • PERIOD:週期時序檢查

  • NOCHANGE:不變化時序檢查

以下是一些例子:

標籤

標籤可用於指定VHDL泛型(generics)或Verilog HDL引數的值。

時序環境

有許多結構可用於描述設計的時序環境。但是,這些結構可用於標註,而不是用於反標,例如在邏輯綜合工具中。這些未在本文中描述。

B.2.1 例子

接下去,我們將為兩個設計提供完整的SDF檔案。

全加器

這是用於全加器(full-adder)電路的Verilog HDL網表(netlist):

以下是時序分析工具生成的完整SDF檔案:

INTERCONNECT中的所有延遲均為0,因為這是佈局前的資料,因此建模的是理想互連走線模型。

十進位制計數器

這是十進位制計數器的Verilog HDL模型:

對應的完整SDF檔案如下:

B.3 標註過程

在本節中,我們將介紹如何在HDL描述中進行SDF的標註(annotation)。SDF的標註可以通過多種工具執行,例如邏輯綜合工具、模擬工具和靜態時序分析工具。SDF標註器(annotator)是這些工具的元件,可用於讀取SDF、解釋並向設計中標註時序值。假定會使用與HDL模型一致的資訊建立SDF檔案,並且在反標期間使用相同的HDL模型。此外,SDF標註器還需要負責正確解釋SDF中的時序值。

SDF標註器標註了反標時序的泛型和引數。如果在語法或對映(mapping)過程中不符合該標準,它將給出錯誤報告。如果一個SDF標註器不支援某些SDF結構,則不會產生任何錯誤,標註器將忽略這些錯誤。

如果SDF標註器未能修改反標時序的泛型,則在反標過程中不會修改泛型的值,即保持不變。

在模擬工具中,反標通常發生在規劃(elaboration)階段之後,緊接在負約束延遲計算之前。

B.3.1 Verilog HDL

在Verilog HDL中,標註的主要機制是指定塊(specify block),指定塊可以指定路徑延遲和時序檢查。實際延遲值和時序檢查極限值是通過SDF檔案指定的,對映是一種行業標準,在IEEE Std 1364中定義。

從SDF檔案中獲得並在Verilog HDL模組的指定塊中標註的資訊包括指定路徑的延遲、引數值、時序檢查約束極限值和互連走線延遲。向一個Verilog HDL模型進行標註時,將忽略SDF檔案中的其它結構。SDF中的LABEL部分定義了引數值。通過將SDF結構與相應的Verilog HDL宣告進行匹配,然後將現有的時序值替換為SDF檔案中的時序值,即可完成反標。

下表顯示了SDF延遲值如何對映到Verilog HDL延遲值:

下表描述了SDF結構到Verilog HDL結構的對映:

有關示例,請參見後面部分。

B.3.2 VHDL

SDF到VHDL的標註是一個行業標準,它在VITAL ASIC建模規範的IEEE標準IEEE Std 1076.4中定義,該標準的其中一部分描述了SDF延遲到ASIC庫的標註。在這裡,我們僅介紹與SDF對映有關的VITAL標準的相關部分。

SDF可用於直接在符合VITAL的模型中修改反標時序泛型,只能使用SDF為符合VITAL的模型指定時序資料。有兩種方法可以將時序資料傳遞到VHDL模型中:通過配置,或直接傳遞到模擬中去。SDF標註過程包括在模擬期間在符合VITAL的模型中對映SDF結構和相應的泛型。

在符合VITAL的模型中,存在著有關如何命名和宣告泛型的規則,以確保可以在模型的時序泛型和相應的SDF時序資訊之間建立對映。

時序泛型由泛型名稱及其型別組成,名稱指定時序資訊的種類,型別指定時序值的種類。如果泛型名稱不符合VITAL標準,則它不是時序泛型,也不會被標註。

下表顯示了SDF延遲值如何對映到VHDL延遲:

在VHDL中,時序資訊是通過泛型進行反標的。泛型名稱遵循一定的規則,以便保持一致或從SDF結構中獲取。利用每個時序泛型名稱,可以指定條件邊沿的可選後綴。邊沿可以指定一個與時序資訊相關聯的邊沿。

下表列出了各種時序泛型名稱: