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