電子學領域,硬件描述語言(英語:hardware description language, HDL)是用來描述電子電路(特別是數碼電路)功能、行為的語言,可以在寄存器傳輸級、行為級、邏輯門級等對數碼電路系統進行描述。隨着自動化邏輯綜合工具的發展,硬件描述語言可以被這些工具識別,並自動轉換到邏輯門級網表,使得硬件描述語言可以被用來進行電路系統設計,並能通過邏輯仿真的形式驗證電路功能。設計完成後,可以使用邏輯綜合工具生成低抽象級別(門級)的網表(即連線表)。[1]:1-12[2]:3-4[3]:483-484

硬件描述語言在很多地方可能和傳統的軟件程式語言類似,但是最大的區別是,硬件描述語言能夠描述硬件電路的時序特性。硬件描述語言是電子設計自動化體系的重要部分。小到簡單的正反器,大到複雜的超大型積體電路(如微處理器),都可以用硬件描述語言描述。常見的硬件描述語言有VerilogVHDL等。[4]:254

目的

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

結構

硬件描述語言是對電路系統的結構、行為的標準文本描述。硬件描述語言和一些並行程式語言一樣存在並行性的表達方式。然而,和大多數用於軟件設計的程式語言不同,硬件描述語言可以描述硬件系統在不同時間的時序行為,而時序性正是硬件電路的重要性質之一。在計算機輔助設計中,用於描述電路模塊中連線、各層次模塊之間互連的硬件描述語言代碼,被稱為「網表」。硬件描述語言可以在結構級(或稱邏輯門級)、行為級、寄存器傳輸級這幾種不同的層次上對電路進行描述,實現同一功能的硬件描述語言也可以使用任一層次的硬件描述語言代碼來描述。通過邏輯綜合,後兩種層次的硬件描述語言代碼可以被轉換到低抽象級別的門級描述,但是採用不同廠商的工具、使用不同的綜合設置策略可能會產生不同的結果。

在實現具體的硬件電路之前,設計人員可以利用硬件描述語言來進行仿真。在硬件實現的過程中,硬件描述語言的源文件通常會被轉換成一種類似可執行文件的中間文件,該文件可以解釋硬件描述語言的各種代碼、語句的語義。正由於此,硬件描述語言具有了類似軟件程式語言的一些性質,但是總體來說,它仍然屬於規約語言建模語言的範疇。模擬電路也有自己的硬件描述語言,但和數碼電路的差異較大。

與控制流語言的比較

可以使用傳統的程式語言控制流程的特性來指代硬件的數據流性質,例如包含特定增強類庫C++(如SystemC)即可實現這樣的目的。儘管如此,用於軟件設計的程式語言不能對電路的時序性質進行描述,這導致軟件程式語言不能替代專用的硬件描述語言。在最近地位愈加顯著的硬件驗證語言——SystemVerilog出現之前,人們利用C++和一些邏輯仿真工具協同工作,從而在硬件驗證中實現面向對象程式設計的思想。

硬件描述語言的部分子集是可綜合的,這意味着可以使用邏輯綜合工具通過「閱讀」行為級、寄存器傳輸級的代碼,來「推斷」這些代碼對應的功能,從而給出一個經過優化的的電路連線網表[6]:111邏輯綜合工具(如新思科技的Design Compiler等[1]Cadence的RTL Compiler[7])通常會對設計人員定義的邏輯功能進行邏輯化簡,這樣就可以避免冗雜的邏輯門級網表。含有延遲的硬件描述語言代碼(例如Verilog中#5這樣的代碼)通常是不可合成的,也就是說,這部分代碼在邏輯綜合過程中會被忽略。這類代碼在硬件驗證中的作用更加顯著。此外,還有其他部分代碼結構也是不可合成的。

使用硬件描述語言進行設計

通過使用硬件描述語言,集成電路(特別是現代的數碼電路)的設計效率得以大大提高。大多數設計人員從設計行為目標或高級架構圖出發開始設計。電路系統的控制決斷結構以流程圖、狀態圖為原型。編寫硬件描述語言代碼的過程與目標電路的特性以及設計人員的編程風格有關。硬件描述語言可以是高抽象級別的算法描述。設計人員經常使用腳本語言(如PerlPython)來在硬件描述語言中生成重複性的電路結構。硬件描述語言的編程工作可以在一些代碼編輯器中完成,這些軟件通常提供自動縮進、保留字高亮顯示等輔助功能。

隨後,硬件描述語言代碼會經過審核階段。在進行邏輯綜合之前,電子設計自動化軟件會進行一系列自動檢查,如掃描硬件描述語言代碼中存在的語法錯誤等。自動檢查程式會將違背規則的代碼呈現在報告中,並指出它們潛在的危害。代碼中的硬件邏輯錯誤也會在此階段被檢查。這些審核過程可以儘可能減少代碼在綜合後引發的錯誤。

在工業界,硬件描述語言設計一般止於綜合的完成。一旦邏輯綜合工具將硬件描述語言代碼映射到邏輯門級的網表,該網表會被送到之後的後端製程產線。根據所使用的不同元件,如現場可程式化邏輯閘陣列FPGA)、特殊應用積體電路ASIC)、門陣列Gate array)、特殊應用積體電路標準元件(Standard cell),實際電路的硬件製造過程可能不同,但是硬件描述語言一般並不過多關注的後端流程。普遍地說,隨着設計流程逐漸轉向物理實現方式,設計數據庫的重心將轉向元件製造製程相關的信息,這些信息通常由硬件廠商提供,設計人員編寫的硬件描述語言代碼並不需要包含這方面的信息。最後,集成電路在物理上得以實現。

使用硬件描述語言進行驗證

參考文獻

參見

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.