硬體描述語言

硬體描述語言

硬體描述語言(英文: Hardware Description Language ,簡稱: HDL )是電子系統硬體行為描述、結構描述、數據流描述的語言。利用這種語言,數字電路系統的設計可以從頂層到底層(從抽象到具體)逐層描述自己的設計思想,用一系列分層次的模塊來表示極其複雜的數字系統。然後,利用前一年12月份~考試當年1月份電子設計自動化( EDA )工具,逐層進行模擬驗證,再把其中需要變為實際電路的模塊組合,經過自動綜合工具轉換到門級電路網表。接下去,再用專用集成電路 ASIC、現場可編程門陣列 FPGA 自動布局布線工具,把網表轉換為要實現的具體電路布線結構。這種高層次 (high-level-design) 的方法已被廣泛採用。據統計,目前在美國矽谷約有 90% 以上的 ASIC 和 FPGA 採用硬體描述語言進行設計。

發展歷史


硬體描述語言 HDL 的發展至今已有 20 多年的歷史,並成功地應用於設計的各個階段:建模、模擬、驗證和綜合等。到 20 世紀 80 年代,已出現了上百種硬體描述語言,對設計自動化 起到了極大的促進和推動作用。但是,這些語言一般都面向特定的設計領域和層次,而且眾多的語言使用戶無所適從。因此,急需一種面向設計的多領域、多層次並得到普遍認同的標準硬體描述語言。 20 世紀 80 年代後期, VHDL 和 Verilog HDL 語言適應了這種趨勢的要求,先後成為 IEEE 標準。
隨著系統級 FPGA 以及系統晶元的出現,軟硬體協調設計和系統設計變得越來越重要。傳統意義上的硬體設計越來越傾向於與系統設計和軟體設計結合。硬體描述語言為適應新的情況,迅速發展,出現了很多新的硬體描述語言,像 Superlog 、 SystemC 、 Cynlib 等等。

產生原因


1970年代以來,集成電路的複雜程度按照半導體業界摩爾定律的趨勢急劇增長。電路設計人員的工作量不斷增加,這使得人們必須放棄以往那樣從特定的電子元件,如CMOS、雙極性晶體管為基礎,來開始複雜電路的設計工作。設計流程的關注重心開始轉到電路系統的數據流動以及有關時序的信息,這樣的設計抽象級別被稱為“寄存器傳輸級”。設計人員通過使用硬體描述語言,可以將精力放在電路邏輯功能、時序的設計上,而不需要一開始就考慮具體的器件製造工藝以及它們對電路功能的影響。

語言結構


硬體描述語言是對電路系統的結構、行為的標準文本描述。硬體描述語言和一些并行編程語言一樣存在并行性的表達方式。然而,和大多數用於軟體設計的編程語言不同,硬體描述語言可以描述硬體系統在不同時間的時序行為,而時序性正是硬體電路的重要性質之一。在計算機輔助設計中,用於描述電路模塊中連線、各層次模塊之間互連的硬體描述語言代碼,被稱為“網表”。硬體描述語言可以在結構級(或稱邏輯級)、行為級、寄存器傳輸級這幾種不同的層次上對電路進行描述,實現同一功能的硬體描述語言也可以使用任一層次的硬體描述語言代碼來描述。通過邏輯綜合,后兩種層次的硬體描述語言代碼可以被轉換到低抽象級別的門級描述,但是採用不同廠商的工具、使用不同的綜合設置策略可能會產生不同的結果。
在實現具體的硬體電路之前,設計人員可以利用硬體描述語言來進行模擬。在硬體實現的過程中,硬體描述語言的源文件通常會被轉換成一種類似可執行文件的中間文件,該文件可以解釋硬體描述語言的各種代碼、語句的語義。正由於此,硬體描述語言具有了類似軟體編程語言的一些性質,但是總體來說,它仍然屬於規約語言、建模語言的範疇。模擬電路也有自己的硬體描述語言,但和數字電路的差異較大。

語言比較


可以使用傳統的編程語言控制流程的特性來指代硬體的數據流性質,例如包含特定增強類庫的C++(如SystemC)即可實現這樣的目的。儘管如此,用於軟體設計的編程語言不能對電路的時序性質進行描述,這導致軟體編程語言不能替代專用的硬體描述語言。在最近地位愈加顯著的硬體驗證語言——SystemVerilog出現之前,人們利用C++和一些邏輯模擬工具協同工作,從而在硬體驗證中實現面向對象程序設計的思想。
硬體描述語言的部分子集是可綜合的,這意味著可以使用邏輯綜合工具通過“閱讀”行為級、寄存器傳輸級的代碼,來“推斷”這些代碼對應的功能,從而給出一個經過優化的的電路連線網表。邏輯綜合工具(如新思科技的Design Compiler等或Cadence的RTL Compiler)通常會對設計人員定義的邏輯功能進行邏輯化簡,這樣就可以避免冗雜的邏輯門級網表。含有延遲的硬體描述語言代碼(例如Verilog中#5這樣的代碼)通常是不可合成的,也就是說,這部分代碼在邏輯綜合過程中會被忽略。這類代碼在硬體驗證中的作用更加顯著。此外,還有其他部分代碼結構也是不可合成的。

語言進行設計


通過使用硬體描述語言,集成電路(特別是現代的數字電路)的設計效率得以大大提高。大多數設計人員從設計行為目標或高級架構圖出發開始設計。電路系統的控制決斷結構以流程圖、狀態圖為原型。編寫硬體描述語言代碼的過程與目標電路的特性以及設計人員的編程風格有關。硬體描述語言可以是高抽象級別的演演算法描述。設計人員經常使用腳本語言(如Perl、Python)來在硬體描述語言中生成重複性的電路結構。硬體描述語言的編程工作可以在一些代碼編輯器中完成,這些軟體通常提供自動縮進、保留字體高亮顯示等輔助功能。
隨後,硬體描述語言代碼會經過審核階段。在進行邏輯綜合之前,電子設計自動化軟體會進行一系列自動檢查,如掃描硬體描述語言代碼中存在的語法錯誤等。自動檢查程序會將違背規則的代碼呈現在報告中,並指出它們潛在的危害。代碼中的硬體邏輯錯誤也會在此階段被檢查出來。這些審核過程可以儘可能減少代碼在綜合后引發的錯誤。
在工業界,硬體描述語言設計一般止於綜合的完成。一旦邏輯綜合工具將硬體描述語言代碼映射到邏輯門級的網表,該網表會被送到之後的後端工藝生產線。根據所使用的不同器件,如現場可編程邏輯門陣列(FPGA)、專用集成電路(ASIC)、門陣列(Gate array)、專用集成電路標準元件(Standard cell),實際電路的硬體製造過程可能不同,但是硬體描述語言一般並不過多關注的後端流程。普遍地說,隨著設計流程逐漸轉向物理實現方式,設計資料庫的重心將轉向器件製造工藝相關的信息,這些信息通常由硬體廠商提供,設計人員編寫的硬體描述語言代碼並不需要包含這方面的信息。最後,集成電路在物理上得以實現。