說明:該專欄"RTL建模筆記"是《RTL Modeling with SystemVerilog for Simulation and Synthesis》的翻譯;該筆記略過了第一章第一小節中背景介紹內容,以及第二小節前面部分的門級、RTL級建模介紹,對于后續學習不影響。
1.行為級和事務級建模
????????SystemVerilog過程塊可用于在比RTL更高的抽象層次上進行建模,這種抽象層次的模型通常被稱為行為級模型(也稱為總線功能模型或算法模型)。由于RTL級和行為級模型都使用過程塊,因此它們的外觀可能非常相似。
行為級模型與RTL級模型的區別在于兩個方面,或者兩者兼而有之:
- RTL過程塊會在一個時鐘周期內執行其編程語句,如果是組合邏輯,則可能在零個時鐘周期內完成。而行為過程塊可能需要任意數量的時鐘周期來執行其語句。
- RTL模型必須遵循嚴格的語言限制,以便能夠被RTL綜合編譯器所綜合。而行為模型則可以充分利用完整的System-Verilog語言。
????????高層次的抽象是事務級建模。事務模型通常用于驗證代碼,并且通常使用 SystemVerilog 的面向對象編程結構進行建模。?
????????行為和事務的抽象級別無法由RTL綜合編譯器進行綜合。
2.定義SystemVerilog可綜合子集
????????由于缺乏 SystemVerilog綜合標準,不同綜合編譯器支持 SystemVerilog 標準的子集不同,這意味著在設計階段需要針對不同的編譯器進行適配。工程師在編寫用于綜合的模型時需格外小心,要參考將要使用的綜合編譯器的文檔,并遵循該編譯器的語言子集。在一種綜合編譯器編寫的模型可能需要進行修改,才能與另一種綜合編譯器配合使用。
????????本書定義了SystemVerilog的一個子集,該子集可與市面上大多數的SystemVerilog RTL綜合編譯器兼容。設計工程師可以放心,只要遵循本書中所述的語言限制和編碼準則,模型便可在任何主要的SystemVerilog綜合編譯器上得到綜合。
3.ASIC和FPGA建模
????????ASIC和FPGA技術的完整定義超出了本書的范圍,本書的主題是與SystemVerilog語言相關的正確數字邏輯建模風格。
3.1 標準ASIC元件
? ? ? ? ASIC是Application Specific Integrated Circuit的首字母縮寫,IC包含不同的功能,ASIC 的設計宗旨是執行特定任務(因此得名“應用專用芯片”),控制器、音頻格式轉換和視頻處理是適合由 ASIC執行的特定應用任務示例。為了執行一般性操作以及其特定任務,ASIC還可包含一個或多個嵌入式處理器。帶有嵌入式處理器的 ASIC通常被稱為片上系統(SoC,system on chip)。
?????????大多數ASIC技術采用標準單元,即預先設計好的邏輯塊,由一到數個邏輯門組成。一個SIC單元庫可能包含數百個標準單元,例如AND、NAND、OR、NOR、異或、異或非、二選一多路復用器、D型觸發器、鎖存器等。每個單元都具有明確的電氣特性,如傳播延遲、設置時間和保持時間,以及電容。
????????設計ASIC的流程包括從庫中選取合適的單元,并將它們連接起來以實現所需的性能。在整個過程中會用到軟件工具。ASIC設計的典型流程如下圖所示。
上圖的步驟是:
- 第一步指定設計的預期功能。
- 所需的功能在模型的抽象RTL級別上進行建模。在這個階段,重點是功能,而非物理實現。
- 仿真用于驗證功能。該書第1.5節(第17頁)詳細討論了仿真的內容。
- 綜合過程用于將RTL功能映射到目標ASIC類型的相應標準單元上。綜合的輸出稱為門級網表。綜合過程將在第1.6節(第31頁)中作更詳細的描述。
- 通過仿真邏輯等價檢查器(一種形式驗證方法),可以驗證門級實現在功能上等同于RTL功能。--> 現在常用形式驗證工具做等價驗證,常用工具為s家fmt和c家lec。
- 時鐘樹綜合用于將時鐘驅動器均勻地分布到整個設計中。通常會使用掃描鏈(scan chain)插入工具來增強設計的可測試性。
- 布局和布線軟件會計算如何在實際的硅芯片上布局單元,并規劃互連走線。布局和布線軟件的輸出是一個圖形數據系統文件(GDSII)文件。GDSII是一種二進制格式,其中包含有關幾何形狀(多邊形)和其他數據的信息,這些信息對于在硅芯片上實際構建IC是必要的。
- 通過執行設計規則檢查(DRC),確保將由該代工廠制造的ASIC所遵循的所有規則都已得到遵守,例如柵極扇出負載。
- 進行靜態時序分析(STA)以確保設置/保持時間得到滿足,同時考慮到互相作用的net和時鐘樹偏移的延遲影響。
- 最后將GDSII文件和其他數據發送給負責制造ASIC的代工廠。將這些文件交給代工廠的過程被稱為“tapeout” ASIC,因為在ASIC設計的早期階段,人們使用磁帶將文件發送給代工廠。
?3.2 FPGA
????????FPGA 是現場可編程 門陣列(Field Programmable Gate Array)的縮寫,FPGA是一種集成電路,包含一定數量的邏輯塊,這些邏輯塊在IC制造完成后可以進行配置(而ASIC的內容和布局必須在制造之前確定)。FPGA所包含的功能性無法與 ASIC 相媲美,且運行時鐘速度較慢,這在 RTL級別的設計中是重要的考量因素。但FPGA技術的最新進展顯著縮小了 FPGA和 ASIC 之間的差距。總的來說,FPGA 可以用于實現與ASIC 相同的功能。
????????FPGA包含許多稱為可配置邏輯塊(CLB)的小型邏輯組件的陣列。一些FPGA廠商將這些塊稱為邏輯陣列塊(LAB),一個典型的CLB可能包含一個或多個查找表(LUT)和一些選擇器(MUX),和一個存儲元素,例如D型觸發器。大多數FPGA中的查找表是小型RAM,編程時使用邏輯運算,如AND、OR和XOR。從LUT中選擇所需的操作允許CLB以多種方式使用,從簡單的"與"或"異"門到更復雜的組合功能。某些FPGA中的CLB可能還具有其他功能,例如加法器。MUX可使組合結果直接由CLB輸出(異步輸出)或存儲在存儲單元中((同步輸出)。
????????FPGA的制造過程中會包含一個由數百或數千個CLB單元組成的陣列,以及可配置的互連結構,這些互連結構可以被“編程”成所需的CLB單元配置。FPGA還包含I/O端口,這些端口可以配置為連接到CLB陣列的任意一列或一行。
下圖顯示了一個復雜FPGA的典型設計流程。
????????FPGA設計流程的前端與ASIC類似,但后端有所不同。與ASIC設計流程相比,FPGA設計流程后端的主要區別在于FPGA的放置和布線。對于ASIC,放置和布線軟件決定了IC的制造方式。而對于FPGA,綜合放置和布線軟件則決定了預先制造的IC將如何進行編程。本書將重點介紹前端步驟2和3,即RTL建模和模擬,這是ASIC和FPGA設計之間差異最小的部分。
3.3?適用于ASIC和FPGA的RTL編碼風格
????????理想情況下,相同的RTL代碼可以用于針對ASIC或FPGA進行開發:在RTL級別進行工作時,工程重點在于設計和驗證功能,而無需考慮具體的實現細節。綜合編譯器的職責是將RTL功能映射到特定的ASIC或FPGA技術上。
? ? ? ? 大多數(但不是全部)RTL代碼都能在ASIC和FPGA上得到同樣良好的綜合。但這一概括性結論也存在例外。RTL模型的某些方面需要考慮設計是將在ASIC還是FPGA上實現。這些方面包括:
- reset,大多數ASIC單元庫都包含同步和異步復位觸發器。設計工程師可以使用被認為最適合設計的復位類型來編寫RTL模型;一些FPGA的靈活性較差,僅具備一種類型的復位觸發器(通常是同步的)。雖然綜合編譯器可以將具有異步復位的RTL模型映射到門級同步復位,或者反之,但需要額外的邏輯門。許多FPGA還支持全局復位功能和上電復位觸發器狀態,這是ASIC所不具備的。第8章第8.1.5節(第286 頁)更詳細地討論了建模復位。
- Vector sizes(矢量大小),對于最大矢量寬度和矢量操作,ASIC具有相當程度的靈活性,處理大型矢量時,復雜的操作將需要大量的邏輯門,但大多數ASIC中使用的標準單元架構能夠支持這些操作。FPGA在這方面則較為受限。預定義的CLB數量及其在FPGA內的布局,可能限制了對大型矢量進行復雜操作的能力,這要么是因為可用的CLB數量有限,要么是因為在CLB之間進行互連的布線復雜性所致。ASIC和FPGA之間的這種差異確實意味著,即使是在RTL級別的抽象層面,設計工程師也必須考慮到設備的局限性,以確保實現的功能與之相匹配。
????????本書中所提供的多數示例、編碼風格和指南,同樣適用于ASIC和 FPGA 設計。對于針對 ASIC或 FPGA 時可能影響 RTL編碼風格的少數特殊情況,書中有所特別說明。