版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)第5章 Testbench與ModelSim 1FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q 數(shù)字設(shè)計(jì)的驗(yàn)證已經(jīng)成為一個(gè)日益困難和繁瑣的任務(wù)。驗(yàn)證工程師們依靠一些驗(yàn)證工具和方法來(lái)應(yīng)付這個(gè)挑戰(zhàn)。對(duì)于幾百萬(wàn)門的大型設(shè)計(jì),工程師們一般使用一套形式驗(yàn)證(formal verification)工具。然而對(duì)于一些小型的設(shè)計(jì),用testbench就可以很好地進(jìn)行驗(yàn)證。q 通常testbench用工業(yè)標(biāo)準(zhǔn)的VHDL或Verilog硬件描述語(yǔ)言來(lái)編寫。Testbench調(diào)用待測(cè)功能設(shè)計(jì),然后進(jìn)行仿真。 2FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)Testbench實(shí)例qLIBRARY ieee;qUSE ieee.std
2、_logic_1164.all;qENTITY mlu ISqPORT(qNEG_A : IN STD_LOGIC;qNEG_B : IN STD_LOGIC;qNEG_Y : IN STD_LOGIC;qA : IN STD_LOGIC;qB : IN STD_LOGIC;qL1 : IN STD_LOGIC;qL0 : IN STD_LOGIC;qY : OUT STD_LOGICq);qEND mlu; 3FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)qARCHITECTURE mlu_dataflow OF mlu ISqSIGNAL A1 : STD_LOGIC;qSIGNAL B1 : STD_LOGI
3、C;qSIGNAL Y1 : STD_LOGIC;qSIGNAL MUX_0 : STD_LOGIC;qSIGNAL MUX_1 : STD_LOGIC;qSIGNAL MUX_2 : STD_LOGIC;qSIGNAL MUX_3 : STD_LOGIC;qSIGNAL L: STD_LOGIC_VECTOR(1 DOWNTO 0);q qBEGINqA1= NOT A WHEN (NEG_A=1) ELSE A;qB1= NOT B WHEN (NEG_B=1) ELSE B;qY = NOT Y1 WHEN (NEG_Y=1) ELSE Y1;q MUX_0 = A1 AND B1;q
4、MUX_1 = A1 OR B1;q MUX_2 = A1 XOR B1;q MUX_3 = A1 XNOR B1;q L = L1 & L0;qwith (L) selectq Y1 TEST_NEG_A,qNEG_B = TEST_NEG_B,qNEG_Y = TEST_NEG_Y,qA = TEST_AB(1),qB = TEST_AB(0),qL1 = TEST_SEL(1),qL0 = TEST_SEL(0),qY = TEST_Y); 7FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)qTESTING: processqbeginqTEST_NEG_A=0;qTEST_NEG_B=0;qTEST_
5、NEG_Y=0;qTEST_AB=00;qTEST_SEL=00;qfor I in 0 to 3 loopqfor J in 0 to 3 loopqwait for 10 ns;qTEST_AB=TEST_AB+01;qend loop;qTEST_SEL=TEST_SEL+01;qend loop; 8FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q- Inputs NegatedqTEST_NEG_A=1;qTEST_NEG_B=1;qTEST_NEG_Y=0;qTEST_AB=00;qTEST_SEL=00;qfor I in 0 to 3 loopqfor J in 0 to 3 loopqwait f
6、or 10 ns;qTEST_AB=TEST_AB+01;qend loop;qTEST_SEL=TEST_SEL+01;qend loop;q end process TESTING;qend MLU_TB_ARCHITECTURE; 9FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì) 10FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)VHDLVerilogEntity和和Architecture聲明聲明Module聲明信號(hào)聲明信號(hào)聲明信號(hào)聲明實(shí)例化頂層設(shè)計(jì)實(shí)例化頂層設(shè)計(jì)實(shí)例化頂層設(shè)計(jì)提供激勵(lì)提供激勵(lì)提供激勵(lì) 11FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)VHDL的testbenchqlibrary ieee; quse ieee.std_logic_1
7、164.all; qentity test_bench is -測(cè)試平臺(tái)文件的空實(shí)體(不需要端口定義) qend test_bench; qarchitecture tb_behavior of test_bench is q component entity_under_test -被測(cè)試元件的聲明 q port( q list-of-ports-theri-types-and-modes q ); q end component; qbegin q instantiation:entity_under_test port map q ( q port-associations q ); q
8、 q process() -產(chǎn)生時(shí)鐘信號(hào) q q end process; q q process() -產(chǎn)生激勵(lì)源 q q end process; qend tb_behavior; 12FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)Verilog HDL的Testbenchqtimescale 1 ns / 1 ps / 時(shí)間精度和刻度qmodule test_bench;qDUT輸入信號(hào)定義; / DUT輸入信號(hào)一般定義為reg類型qDUT輸出信號(hào)定義; / DUT輸出信號(hào)一般定義為wire類型q.q待測(cè)模塊 dut(端口映射); / 待測(cè)module實(shí)例化q.qinitial beginq/ 定義相關(guān)信號(hào)
9、初始值或者定義時(shí)鐘復(fù)位等控制信號(hào)q/ 監(jiān)測(cè)、添加約束等qendq.qalways / 處理相關(guān)需要變化的值q.qendmodule 13FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)產(chǎn)生時(shí)鐘信號(hào)qVHDL:q- Declare a clock period constant.qConstant ClockPeriod : TIME := 10 ns;q- Clock Generation method 1:qClock = not Clock after ClockPeriod / 2;q- Clock Generation method 2:qGENERATE CLOCK: processqbeginqwait
10、for (ClockPeriod / 2)qClock = 1;qwait for (ClockPeriod / 2)qClock = 0;qend process; 14FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q Verilog:q / Declare a clock period constant.q Parameter ClockPeriod = 10;q / Clock Generation method 1:q initial beginq Clock = 0;q forever Clock = #(ClockPeriod / 2) Clock;q endq / Clock Generation m
11、ethod 2:q always #(ClockPeriod / 2) Clock = Clock; 15FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)提供激勵(lì)信號(hào)q 在testbench中使用并行激勵(lì)模塊提供必要的激勵(lì)。激勵(lì)的產(chǎn)生可以采用兩個(gè)方法:絕對(duì)時(shí)間激勵(lì)和相對(duì)時(shí)間激勵(lì)。絕對(duì)時(shí)間激勵(lì)依據(jù)相對(duì)仿真時(shí)間開(kāi)始點(diǎn)的設(shè)定延時(shí)來(lái)執(zhí)行語(yǔ)句。而相對(duì)時(shí)間激勵(lì)先提供初始值,然后等待一個(gè)事件來(lái)重新觸發(fā)激勵(lì),具體延時(shí)是不確定的。根據(jù)設(shè)計(jì)者的需要,兩種方法可以在testbench中同時(shí)使用。下面的程序段是絕對(duì)時(shí)間激勵(lì)的例子。initial beginreset = 1;load = 0;cout_updn = 0;#100 reset
12、 = 0;#20 load = 1;#20 count_updn = 1;end 16FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q下面的程序段是相對(duì)時(shí)間激勵(lì)的例子。qalways (posedge clock)qtb_count = tb_count + 1;q qinitial beginqif(tb_count = 5)qbeginqreset = 1;qload = 0;qcount_updn = 0;qendqelseqbeginq reset = 0;qload = 1;qcount_updn = 1;qendqendq qinitial beginq if(count = 1100) beginqc
13、ount_updn = 0;q$display(“Terminal count Reached,now counting down”);q endqend 17FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)顯示結(jié)果顯示結(jié)果q 在Verilog中可以非常方便地使用關(guān)鍵字$display和$monitor顯示結(jié)果。VHDL沒(méi)有等效的顯示指令,它提供了std_textio標(biāo)準(zhǔn)文本輸入輸出程序包。它允許文件的i/o重定向到顯示終端窗口。下面是verilog示例,它將在終端屏幕上顯示一些值。 q initial beginq $timeformat(-9,1,ns,12);q $display( Time Clk Rst L
14、d SftRg Data Sel);q $monitor(%t %b %b %b %b %b %b, $realtime,q clock, reset, load, shiftreg, data, sel);q end 18FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q $display在終端屏幕上輸出引用的附加說(shuō)明文字。$monitor操作不同,因?yàn)樗妮敵鍪鞘录?qū)動(dòng)的。例中的變量$realtime(由用戶賦值為當(dāng)前的仿真時(shí)間)用于觸發(fā)信號(hào)列表中值的顯示。信號(hào)表由變量$realtime開(kāi)始,跟隨其它將要顯示的信號(hào)名(clock, reset, load等)。以%開(kāi)始的關(guān)鍵字包含格式描述列表,用來(lái)控制如何格式化顯
15、示信號(hào)列表中的每個(gè)信號(hào)的值。格式列表是位置確定的。每個(gè)格式說(shuō)明有序地與信號(hào)列表中的信號(hào)順序相關(guān)。比如%t說(shuō)明規(guī)定了$realtime的值是時(shí)間格式,%b說(shuō)明符格式化clock的值是二進(jìn)制形式。 19FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)qmodule shift_reg (clock, reset, load, sel, data, shiftreg);qinput clock;qinput reset;qinput load;qinput 1:0 sel;qinput 4:0 data;qoutput 4:0 shiftreg;qreg 4:0 shiftreg;qalways (posedge cloc
16、k)qbeginqif (reset)qshiftreg = 0;qelse if (load)qshiftreg = data;qelseqcase (sel)q2b00 : shiftreg = shiftreg;q2b01 : shiftreg = shiftreg 1;qdefault : shiftreg = shiftreg;qendcaseqendqendmodule 20FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)qmodule testbench; / declare testbench nameqreg clock;qreg load;q qreg reset; / declaration o
17、f signalsqwire 4:0 shiftreg;qreg 4:0 data;qreg 1:0 sel;q/ instantiation of the shift_reg design belowqshift_reg dut(.clock (clock),q.load (load),q.reset (reset),q.shiftreg (shiftreg),q.data (data),q.sel (sel);q/this process block sets up the free running clockqinitial beginqclock = 0;qforever #50 cl
18、ock = clock;qend 21initial begin/ this process block specifies the stimulus.reset = 1;data = 5b00000;load = 0;sel = 2b00;#200reset = 0;load = 1;#200data = 5b00001;#100sel = 2b01;load = 0;#200sel = 2b10;#1000 $stop;endinitial begin/ this process block pipes the ASCII results to the/terminal or text e
19、ditor$timeformat(-9,1,ns,12);$display( Time Clk Rst Ld SftRg Data Sel);$monitor(%t %b %b %b %b %b %b, $realtime,clock, reset, load, shiftreg, data, sel);endendmoduleFPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)q 以上的testbench首先實(shí)例化shift_reg,然后設(shè)置時(shí)鐘,提供激勵(lì)信號(hào)。所有的進(jìn)程塊在仿真時(shí)間零點(diǎn)開(kāi)始。標(biāo)記(#)說(shuō)明下一個(gè)激勵(lì)作用前的延遲。$stop命令使仿真器停止測(cè)試仿真(所有測(cè)試設(shè)計(jì)中都應(yīng)該包含一個(gè)停止命令)。最后,$mon
20、itor語(yǔ)句返回ASCII格式的結(jié)果到屏幕或者管道輸出到一個(gè)文本編輯器。 22FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)自動(dòng)驗(yàn)證q 推薦自動(dòng)實(shí)現(xiàn)測(cè)試結(jié)果的驗(yàn)證,尤其是對(duì)于較大的設(shè)計(jì)來(lái)說(shuō)。自動(dòng)化減少了檢查設(shè)計(jì)是否正確所要求的時(shí)間,也使人可能的犯錯(cuò)最少。q 一般有以下幾種常用的自動(dòng)測(cè)試驗(yàn)證的方法:1、數(shù)據(jù)庫(kù)比較(database comparison)。首先,要?jiǎng)?chuàng)建一個(gè)包含預(yù)期輸出的數(shù)據(jù)庫(kù)文件。然后,仿真輸出被捕獲并與預(yù)期輸出數(shù)據(jù)庫(kù)文件中參考的向量比較。然而,由于沒(méi)有提供從輸出到輸入文件指針,使得很難跟蹤一個(gè)導(dǎo)致錯(cuò)誤輸出的來(lái)源,是這種方法的一個(gè)缺點(diǎn)。2、波形比較(waveform comparison)。波形比較可
21、以自動(dòng)或是手動(dòng)的運(yùn)行。自動(dòng)的方法使用一個(gè)testbench比較器來(lái)比較預(yù)期輸出波形與測(cè)試輸出波形。3、自我檢查測(cè)試平臺(tái)(self-checking testbenches)。自我檢查testbench檢查預(yù)期的結(jié)果與運(yùn)行時(shí)的實(shí)際結(jié)果。因?yàn)橛杏玫腻e(cuò)誤跟蹤信息可以內(nèi)建在一個(gè)測(cè)試設(shè)計(jì)中,用來(lái)說(shuō)明哪些地方設(shè)計(jì)有誤,調(diào)試時(shí)間可以非常明顯地縮短。 23FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)編寫testbench的準(zhǔn)則q在編寫在編寫testbench前要了解仿真器前要了解仿真器雖然通用仿真工具兼容HDL工業(yè)標(biāo)準(zhǔn),但標(biāo)準(zhǔn)并沒(méi)有重點(diǎn)強(qiáng)調(diào)跟仿真相關(guān)的一些主題。不同的仿真器有不同的特點(diǎn)、功能和執(zhí)行效率。 q避免使用無(wú)限循環(huán)避免使
22、用無(wú)限循環(huán)當(dāng)一個(gè)事件添加到基于事件的仿真器,CPU和內(nèi)存的占用率就大大增加了,仿真過(guò)程就會(huì)變慢。除非對(duì)于testbench非常關(guān)鍵,無(wú)限循環(huán)不應(yīng)該用作設(shè)計(jì)的激勵(lì)。一般地,只有時(shí)鐘被描述成一個(gè)無(wú)限循環(huán)(如forever循環(huán))。 q拆分激勵(lì)到邏輯模塊拆分激勵(lì)到邏輯模塊 在測(cè)試中,所有initial塊(verilog)并行執(zhí)行。如果無(wú)關(guān)的激勵(lì)被分離到獨(dú)立的塊中,測(cè)試激勵(lì)的順序會(huì)變得更容易實(shí)現(xiàn)和檢查。因?yàn)槊總€(gè)并行的塊從仿真時(shí)間的零點(diǎn)開(kāi)始執(zhí)行,對(duì)于分離的塊傳遞激勵(lì)更容易。使用分離激勵(lì)塊使得testbench的建立,維護(hù)和升級(jí)更加容易。 q避免顯示并不重要的數(shù)據(jù)避免顯示并不重要的數(shù)據(jù)大型設(shè)計(jì)的測(cè)試可能包含
23、10萬(wàn)以上的事件或匿名信號(hào)。顯示大量的仿真數(shù)據(jù)會(huì)很大程度上降低仿真速度。 24FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)仿真工具M(jìn)odelsimq Mentor公司的ModelSim是業(yè)界最優(yōu)秀的HDL語(yǔ)言仿真軟件,它能提供友好的仿真環(huán)境,是業(yè)界唯一的單內(nèi)核支持VHDL和Verilog混合仿真的仿真器。它采用直接優(yōu)化的編譯技術(shù)、Tcl/Tk技術(shù)、和單一內(nèi)核仿真技術(shù),編譯仿真速度快,編譯的代碼與平臺(tái)無(wú)關(guān),便于保護(hù)IP核,個(gè)性化的圖形界面和用戶接口,為用戶加快調(diào)錯(cuò)提供強(qiáng)有力的手段,是FPGA/ASIC設(shè)計(jì)的首選仿真軟件,接下來(lái)以一個(gè)簡(jiǎn)單的例子介紹Modelsim的基本使用方法。 25FPGA系統(tǒng)設(shè)計(jì)系統(tǒng)設(shè)計(jì)qmod
24、ule testbench();q logic clk;q logic a, b, y;q logic 2:0 vectors4:0, currentvec;q logic 3:0 vectornum, errors;q q / The device under testq nand2 dut(a, b, y);q q / read test vector file and initialize testq initial beginq $readmemb(nand2-vectors.txt, vectors);q vectornum = 0; errors = 0;q endq / generate a clock to seq
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 22073-1:2024 EN Gas welding equipment - Part 1: Line pressure regulators and line pressure regulators with flow-metering devices for gas distribution pipelines up to 6 M
- 企業(yè)中秋節(jié)的慰問(wèn)信范文(7篇)
- 主持人的心得體會(huì)
- DB12T 606.1-2015 農(nóng)村地區(qū)郵政與快遞服務(wù)規(guī)范 第1部分:郵政
- 中秋晚會(huì)董事長(zhǎng)精彩致辭范文(15篇)
- 端午節(jié)周記范文合集4篇
- 高等數(shù)學(xué)(管)-教學(xué)大綱
- 影響疫苗免疫效果的幾點(diǎn)因素
- 影響孩子一生的早期教育
- 糖果王國(guó)課件教學(xué)課件
- 《中級(jí)微觀經(jīng)濟(jì)學(xué)》考試復(fù)習(xí)題庫(kù)(附答案)
- 三年級(jí) 上冊(cè)科學(xué) 課件-2.4 哺乳動(dòng)物 |湘教版(一起)(共23張PPT)
- 建設(shè)工程總投資組成表
- 箱變施工方案
- 心系中國(guó)夢(mèng)兒童競(jìng)選少先隊(duì)大隊(duì)長(zhǎng)PPT飄揚(yáng)紅領(lǐng)巾光榮少先隊(duì)PPT課件(帶內(nèi)容)
- 專題05 家國(guó)情懷 中考?xì)v史學(xué)科核心素養(yǎng)專題解讀課件(2022版新課標(biāo))
- 醫(yī)院護(hù)理品管圈成果匯報(bào)縮短腦卒中靜脈溶栓患者DNT完整版本PPT易修改
- 幼兒園教學(xué)課件中班美術(shù)《百變的花瓶》課件
- 液化石油氣充裝操作規(guī)程(YSP118液化石油氣鋼瓶)
- 工程樣板過(guò)程驗(yàn)收單
- 顱內(nèi)動(dòng)脈動(dòng)脈瘤介入治療臨床路徑
評(píng)論
0/150
提交評(píng)論