RTL 與驗證
測試平台(testbench)
在真正信任一個新電路設計之前,你會想把它放到工作檯上,給它的輸入端接上訊號產生器,再用示波器盯著它的輸出——餵入你能控制的輸入,確認它做了該做的事。測試平台就是這張工作檯,只不過是用程式碼寫出來的。它是一段 HDL,包覆住你的設計——也就是受測設計(DUT)——向它的輸入端施加激勵,並檢查從輸出端返回的結果,整個過程都在模擬中完成,不涉及任何實體硬體。
測試平台最根本的特徵是它不可合成:它永遠不會變成晶片上的閘電路。而這份自由正是它的全部意義所在。你的設計只能使用硬體真正能搭建出來的結構,而測試平台卻可以使用檔案讀寫、`wait` 述句、以奈秒計的延遲、迴圈以及列印訊息——只要能模擬外部世界、能對設計做出判斷,怎麼寫都行。一個典型的測試平台會實例化 DUT,產生時脈與重置訊號,施加一連串輸入,然後對每個結果進行檢查——把 DUT 的輸出與獨立算出的預期值相比較,並把任何不一致標記出來。
正是這種檢查,把真正的測試平台和示範區分開來。一個只會撥動輸入、卻把波形留給你用肉眼去比對的平台幾乎什麼都抓不到;而好的平台自己就帶著對「正確」的判斷標準——一個參考模型、一組預期值,或是若干斷言——一旦現實與之偏離,它就會高聲報錯。隨著設計規模增大,這些平台會擴展成完整的驗證環境,把自檢與約束隨機激勵結合起來,去探索那些人工絕不會想到手動鍵入的邊角情形。
module tb;
reg [7:0] a, b;
wire [7:0] sum;
dut u_dut (.a(a), .b(b), .sum(sum));
initial begin
a = 8'd3; b = 8'd4; #10;
if (sum !== 8'd7) $error("got %0d, expected 7", sum);
$finish;
end
endmodule一個最小的自檢測試平台——先宣告訊號,再驅動已知輸入,然後斷言輸出與預期值一致。
「測試平台」直接借用了實驗檯的比喻:在電子領域,工作檯(bench)就是你探測和量測元件的那張工作桌。HDL 版本沿用了這個名字,儘管此時的工作檯、探針與元件全都只是程式碼而已。
又稱
另見