編寫高效的測試設計(testbenches)
簡介:
本文引用地址:http://butianyuan.cn/article/84843.htm由于設計的規(guī)模越來越大和越來越復雜,數(shù)字設計的驗證已經(jīng)成為一個日益困難和繁瑣的事。面對挑戰(zhàn),驗證工程師們依靠許多的驗證工具和方法。對于大的系統(tǒng),如幾百萬門的設計,工程師們一般使用一套可靠的驗證工具。當然,對于一些小的設計,設計工程師常常發(fā)現(xiàn)帶有測試的hdl仿真器就可以做得很好。
測試設計已經(jīng)成為一個驗證高級語言設計HLL (High-Level Language) 的標準方法。
典型的,測試設計完成以下任務:
實現(xiàn)測試設計;
仿真通過使用模塊的測試向量來仿真測試設計;
輸出結(jié)果到終端或波形窗口以檢視;
可選擇的將實際結(jié)果和預期結(jié)果進行比較。
一般測試設計使用工業(yè)標準的VHDL或verilog硬件描述語言來編寫。測試設計調(diào)用功能設計,然后仿真。復雜的測試設計完成一些附加的功能----如它們包含邏輯來為設計決定適當?shù)脑O計激勵或比較實際結(jié)果和預期結(jié)果。
后續(xù)的章節(jié)說明了一個非常穩(wěn)定的測試設計的結(jié)構(gòu),并且提供了一個自較驗測例子----它將自動比較實際結(jié)果和測試設計的預期結(jié)果。
圖1說明一個基于以上基本要求的標準的hdl驗證流程。由于測試設計使用VHDL或verilogHDL來描述,測試設計的驗證過程可以在不同的平臺或不同公司的軟件工具環(huán)境完成。另外,由于VHDL或verilogHDL是公開的通用標準語言,使用VHDL或verilogHDL來描述驗證設計可以毫無困難的在將來重用。
圖1使用測試設計的HDL測試驗證流程
構(gòu)建測試設計:
測試設計可以用VHDL或verilogHDL來描述.因為測試設計只用來進行仿真,它們沒有那些適應綜合中僅應用的rtl語言子集的語法約束的限制.而是所有的行為結(jié)構(gòu)都可以使用。從而測試設計可以編寫的更為通用,使得它們可以更容易維護。
所有的測試設計包含了如表1的基本程序段塊。正如上面所提到的,測試設計一般包含更多的附加功能,如在終端上可視的結(jié)果和內(nèi)建的錯誤檢測。
測試設計的基本程序段
下面的例子說明經(jīng)常使用的測試設計的結(jié)構(gòu)。
產(chǎn)生時鐘信號
使用系統(tǒng)時鐘來的時序邏輯設計必須產(chǎn)生時鐘。重復的時鐘信號可以很容易的在vhdl或verilog源碼中實現(xiàn)。以下是vhdl和verilog的時鐘發(fā)生示例。
VHDL:
-- Declare a clock period constant.
Constant ClockPeriod : TIME := 10 ns;
-- Clock Generation method 1:
Clock <= not Clock after ClockPeriod / 2;
-- Clock Generation method 2:
GENERATE CLOCK: process
begin
wait for (ClockPeriod / 2)
Clock <= ’1’;
wait for (ClockPeriod / 2)
Clock <= ’0’;
end process;
Verilog:
// Declare a clock period constant.
Parameter ClockPeriod = 10;
// Clock Generation method 1:
initial begin
forever Clock = #(ClockPeriod / 2) ~ Clock;
end
// Clock Generation method 2:
initial begin
always #(ClockPeriod / 2) Clock = ~Clock;
end
準備激勵信號
為了獲得測試設計的驗證結(jié)果,激勵必須在測試設計中提供。在測試設計中使用的并行激勵塊提供必要的激勵。兩個方法被考慮:絕對時間激勵和相對時間激勵。在第一個方法里,仿真變量被詳細描述為相對于仿真時間零點。通過比較,相對時間激勵提供初始值,然后在重觸發(fā)激勵前等待一個事件。根據(jù)設計者的需要,兩種方法可以在測試設計中組合使用。
表2 絕對時間激勵
表2和表3分別以vhdl和verilog提供了一個絕對時間激勵和相對時間激勵的源代碼。
表3 相對時間激勵
評論