數字硬件建模SystemVerilog(四)-綜合
綜合編譯器將實現細節添加到抽象RTL模型,合成編譯器:
圖1-10說明了使用SystemVerilog進行數字綜合的一般流程,
圖1-10:SystemVerilog綜合工具流程
綜合編譯器需要三種主要類型的輸入信息:
- 系統Verilog RTL模型-這些模型由設計工程師編寫,代表需要在ASIC或FPGA中實現的功能行為
- 目標ASIC或FPGA的工藝庫-該庫由ASIC或FPGA供應商提供,包含可用于實現所需功能的標準單元(用于ASIC)或門陣列塊(用于FPGA)的定義
- 綜合約束定義-這些約束由設計工程師定義,并提供RTL代碼中不可用的綜合編譯器信息,例如需要在ASIC或FPGA中實現的所需時鐘速度、面積和功率目標。
出于前端設計和驗證目的,綜合的主要輸出是門級網表。網絡列表是組件和將這些組件連接在一起的導線(稱為網絡)的列表。網絡列表中引用的組件將是用于實現所需功能的ASIC標準單元或FPGA門陣列塊。此網絡列表可以有多種格式,包括EDIF、VHDL、Verilog2001或SystemVerilog。本系列文章僅使用SystemVerilog輸出。
為了仿真SystemVerilog網絡列表,需要每個組件的仿真模型。目標ASIC或FPGA供應商將提供用SystemVerilog編寫的仿真庫。通常,這些庫只使用SystemVerilog的Verilog-2001子集。這些組件在門級建模,具有詳細的傳播延遲。這些模型與設計工程師編寫的抽象RTL模型不同。
SV綜合編譯器
有幾個SystemVerilog綜合編譯器支持SystemVerilog語言。Cadence、Mentor Graphics和Synopsys等電子設計自動化(EDA)公司銷售的商用綜合編譯器。一些FPGA供應商,如Xilinx和Intel(前身為Altera)提供了專用于該供應商技術的專用綜合編譯器。
SystemVerilog是一種兩用語言。一個目的是對數字硬件的行為進行建模。第二個目的是編寫驗證程序來測試硬件模型。這兩個目的有非常不同的語言要求。許多通用編程結構對于這兩個目的都很有用,例如,if-else決策或for循環。其他語言特性只能用于驗證,例如約束隨機測試(random test)生成。這些驗證結構并不表示硬件功能,綜合編譯器也不支持這些驗證結構。
IEEE尚未確定SystemVerilog的正式可綜合子集。標準的這一缺陷導致了每個綜合編譯器對可綜合SystemVerilog語言子集的支持存在重大偏差。此外,由特定綜合編譯器標識的子集可以(幾乎肯定會)將綜合產品的一個版本更改為該產品的下一個版本。
綜合編譯Synthesis Compilation
綜合編譯器的目標與仿真編譯器不同。這兩種類型的編譯器都需要檢查SystemVerilog RTL源代碼的語法正確性,但這就是相似性的終點。仿真是一個動態過程,涉及仿真時間、事件調度、應用刺激和驗證輸出。綜合是一個靜態轉換和優化過程,不涉及任何這些仿真目標。綜合編譯器需要確保代碼滿足必要的語言限制,以便將RTL功能轉換為ASIC和FPGA實現中支持的邏輯門類型。這些限制包括檢查RTL代碼是否具有明確定義的時鐘周期活動、單驅動程序邏輯等,綜合編譯器只需要編譯RTL模型。綜合不需要編譯帶有激勵生成和輸出驗證的測試臺代碼。
單文件和多文件編譯
大型設計被劃分為許多子塊。通常,每個子塊將存儲在單獨的文件中,為了仿真分區設計,仿真要求所有這些子塊都被編譯并連接在一起。另一方面,綜合通常可以分別編譯和處理每個子塊。綜合優化和技術映射是計算密集型過程。將太多的子塊合成在一起可能會導致結果質量(QOR)不理想。
在綜合設計的子塊時,有兩個重要的考慮因素。首先,來自定義包的子塊中使用的任何定義都要求該包與子塊一起編譯,并以適當的方式按照順序編譯,如果多個子塊使用同一個包,則需要使用與其他子塊分開編譯的每個子塊重新編譯包,第二個考慮因素是,在每個單獨的編譯中都不會看到任何全局聲明,包括“定義編譯器指令”。
約束條件
圖1-10顯示了綜合的三個主要輸入之一是約束。約束用于定義綜合所需的信息,但這些信息既不在RTL模型中,也不在ASIC/FPGA供應商的技術庫中。圖1-11說明了一個簡單的電路,其中綜合所需的一些信息必須由設計工程師指定。
圖1-11:需要綜合約束的簡單電路圖
將此功能數據流綜合成邏輯門的過程包括:
- 將綜合的觸發器FF1映射到目標ASIC或FPGA中的適當觸發器。
- 將logic_block_1中描述的功能映射到目標ASIC或FPGA的標準單元或邏輯塊。
- 優化logic_block_1的布局布線,以滿足FF1建立時間和保持時間要求。
- 將logic_block_2中描述的功能映射到目標ASIC或FPGA的標準單元或邏輯塊。
- 優化logic_block_2的布局布線,以滿足建立時間和保持時間要求。
為了在目標ASIC或FPGA中實現圖1-11所示的簡單電路,綜合編譯器必須知道:
- 用于實現logic_block_1和logic_block_2的標準單元或邏輯塊的傳播延遲、面積和功率要求。
- FF1建立時間和保持時間。
- clk的周期或頻率,如100Mhz。
- in1相對于CLK邊沿的到達時間。
- in1外部電源的驅動能力
- 相對于clk邊沿的out1的到達時間。
- out1的輸出驅動要求。
此信息不在RTL模型中。此列表中前兩項的規范,傳播延遲和建立/保持時間,將來自ASIC或FPGA供應商提供的技術庫,其余細節必須由綜合設計的設計工程師指定。這些規范被稱為綜合約束,更大、更復雜的設計將需要更多的綜合約束,后續的RTL編碼示例將在適當的情況下討論適用的綜合約束。還提供了簡化必須指定的約束的指南。
指定綜合約束的方式因不同的合成編譯器而異。推薦讀者閱讀《綜合和時序分析的約束設計Constmining Designs for Synthesis and Timing Analysis》文檔了解此信息。
-
FPGA
+關注
關注
1630文章
21759瀏覽量
604302 -
asic
+關注
關注
34文章
1204瀏覽量
120560 -
Verilog
+關注
關注
28文章
1351瀏覽量
110158 -
RTL
+關注
關注
1文章
385瀏覽量
59852
發布評論請先 登錄
相關推薦
評論