RTL 與驗證

硬體描述語言(hardware description language, HDL)

想像你要向別人描述一間廚房。食譜會說"先切洋蔥,再熱油"——這是一連串先後發生、一步接一步的步驟。而平面圖則不同,它會說"爐台挨著水槽,一條電線從開關連到燈"——它描述的是同時存在、並排擺放的東西。硬體描述語言(HDL)就是那張平面圖,而不是食譜。它是一種類程式設計風格的專用語言,用來描述一個數位電路是什麼——有哪些閘、暫存器和連線,它們如何相互連接——而不是處理器一條接一條執行的指令清單。

這種"萬事同時發生"的特性,正是 HDL 與普通軟體程式碼的不同之處。當你在 HDL 中寫下兩個語句區塊時,你通常是在描述兩塊並行工作的硬體——它們並排同時運行,而不是一前一後。其中有些硬體是純組合邏輯,輸入一變就立刻穩定下來;另一些則是時序邏輯,只在時脈每跳動一拍時才更新。這種語言讓你能在暫存器傳輸級(RTL)上刻畫一個設計——描述資料在每個時脈週期裡如何在暫存器之間流動——隨後合成工具再把這段描述翻譯成晶片上邏輯閘的真實排佈,就像建築工人把平面圖變成牆體和管道一樣。

實務中你會遇到的兩種 HDL 是 Verilog(以及它現代的超集 SystemVerilog)和 VHDL。它們在紙面上看起來頗為不同,卻做著同一件事:讓工程師在任何矽晶片被製造出來之前,就用文字寫出、模擬並驗證一個電路。同一份描述既可以餵給模擬器檢驗它的行為是否正確,其可合成的核心部分也可以交給合成,變成真正的閘級網表——一份描述,兩種歸宿。

// A 1-bit register: q follows d on each rising clock edge
always @(posedge clk)
  q <= d;

一小塊用文字描述出來的硬體——每當時脈上升緣到來,儲存的值 `q` 就取入輸入 `d`。這是硬體,而不是處理器執行的某一步。

"描述"是這裡的關鍵詞。HDL 描述的是結構與行為,好讓工具據此搭建出硬體;它並不會被編譯成 CPU 執行的指令。"語言"這個詞常誤導新手——HDL 更像建築師的藍圖,而不像用 C 或 Python 寫成的食譜。

又稱
HDLhardware description language硬件描述语言硬體描述語言