編寫高效率的testbench_第1頁
編寫高效率的testbench_第2頁
編寫高效率的testbench_第3頁
編寫高效率的testbench_第4頁
編寫高效率的testbench_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Writing Efficient Testbenches編寫高效的測試設(shè)計(jì)(testbenches)原文作者:Mujtaba Hamid注:一個(gè)設(shè)計(jì)的測試驗(yàn)證是非常重要的。有效的測試可以助我們快速的完成或改善設(shè)計(jì)。Testbenches建議編寫有效的測試代碼來通過軟件實(shí)現(xiàn)可靠的驗(yàn)證。無意中發(fā)現(xiàn),順手譯為中文,以備將來方便。也貼給沒有找到更好中文版本的同道人。Testbenches本意應(yīng)該是測試平臺(tái)更合理,但是在中文中閱讀起來很不舒服。所以本文中有時(shí)譯為“測試設(shè)計(jì)”,“測試代碼”,有時(shí)干脆是“測試”。摘要:應(yīng)用筆記為HDL驗(yàn)證設(shè)計(jì)的新手,或者是沒有豐富的測試設(shè)計(jì)經(jīng)驗(yàn)的邏輯設(shè)計(jì)者而編寫。測試設(shè)計(jì)

2、是驗(yàn)證HDL設(shè)計(jì)的主要手段。本應(yīng)用筆記為創(chuàng)建或準(zhǔn)備和構(gòu)建有效的測試設(shè)計(jì)提供準(zhǔn)則。它也提供一個(gè)為任何設(shè)計(jì)開發(fā)自較驗(yàn)測的測試設(shè)計(jì)的一個(gè)代數(shù)方法。涉及的所有設(shè)計(jì)文件可以從以下的站點(diǎn)獲得:PC: 簡介:由于設(shè)計(jì)的規(guī)模越來越大也越來越復(fù)雜,數(shù)字設(shè)計(jì)的驗(yàn)證已經(jīng)成為一個(gè)日益困難和繁瑣的任務(wù)。驗(yàn)證工程師們依靠一些驗(yàn)證工具和方法來應(yīng)付這個(gè)挑戰(zhàn)。對于幾百萬門的大型設(shè)計(jì),工程師們一般使用一套形式驗(yàn)證(formal verification)工具。然而對于一些小型的設(shè)計(jì),設(shè)計(jì)工程師常常發(fā)現(xiàn)用帶有testbench的HDL仿真器就可以很好地進(jìn)行驗(yàn)證。Testbench已經(jīng)成為一個(gè)驗(yàn)證高級語言(HLL -High-Lev

3、el Language) 設(shè)計(jì)的標(biāo)準(zhǔn)方法。通常testbench完成如下的任務(wù):1. 實(shí)例化需要測試的設(shè)計(jì)(DUT);2. 通過對DUT模型加載測試向量來仿真設(shè)計(jì);3. 將輸出結(jié)果到終端或波形窗口中加以視覺檢視;4. 另外,將實(shí)際結(jié)果和預(yù)期結(jié)果進(jìn)行比較。通常testbench用工業(yè)標(biāo)準(zhǔn)的VHDL或Verilog硬件描述語言來編寫。Testbench調(diào)用功能設(shè)計(jì),然后進(jìn)行仿真。復(fù)雜的testbench完成一些附加的功能例如它們包含一些邏輯來選擇產(chǎn)生合適的設(shè)計(jì)激勵(lì)或比較實(shí)際結(jié)果和預(yù)期結(jié)果。后續(xù)的章節(jié)描述了一個(gè)仔細(xì)構(gòu)建的testbench的結(jié)構(gòu),并且提供了一個(gè)自動(dòng)比較實(shí)際結(jié)果與預(yù)期結(jié)果的進(jìn)行自我檢查

4、的testbench例子。圖1給出了一個(gè)如上所描述步驟的標(biāo)準(zhǔn)HDL驗(yàn)證流程。由于testbench使用VHDL或Verilog來描述,testbench的驗(yàn)證過程可以根據(jù)不同的平臺(tái)或不同的軟件工具實(shí)現(xiàn)。由于VHDL或Verilog是公開的通用標(biāo)準(zhǔn),使用VHDL或Verilog編寫的testbench以后也可以毫無困難地重用(reuse)。圖1使用Testbench的HDL驗(yàn)證流程構(gòu)建TestbenchTestbench用VHDL或Verilog來編寫。由于testbench只用來進(jìn)行仿真,它們沒有那些適用于綜合的RTL語言子集的語法約束限制,而是所有的行為結(jié)構(gòu)都可以使用。因而testbench

5、可以編寫的更為通用,使得它們可以更容易維護(hù)。所有testbench包含了如表1的基本程序段。正如上面所提到的,testbench通常包含附加功能,如在終端上可視的結(jié)果和內(nèi)建的錯(cuò)誤檢測。表1 testbench的基本程序段下面的例子介紹testbench中經(jīng)常使用的結(jié)構(gòu)。產(chǎn)生時(shí)鐘信號使用系統(tǒng)時(shí)鐘的時(shí)序邏輯設(shè)計(jì)必須產(chǎn)生時(shí)鐘。時(shí)鐘信號在VHDL或Verilog中可以很容易地實(shí)現(xiàn)。以下是VHDL和Verilog的時(shí)鐘發(fā)生示例。VHDL:- Declare a clock period constant.Constant ClockPeriod : TIME := 10 ns;- Clock Gener

6、ation method 1:Clock = not Clock after ClockPeriod / 2;- Clock Generation method 2:GENERATE CLOCK: processbeginwait 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

7、beginClock = 0;forever Clock = #(ClockPeriod / 2) Clock;end/ Clock Generation method 2:always #(ClockPeriod / 2) Clock = Clock;提供激勵(lì)信號為了獲得testbench的驗(yàn)證結(jié)果,激勵(lì)必須作用于DUT。在testbench中使用的并行激勵(lì)塊提供必要的激勵(lì)。激勵(lì)的產(chǎn)生可以采用兩個(gè)方法:絕對時(shí)間激勵(lì)和相對時(shí)間激勵(lì)。在第一個(gè)方法里,仿真變量相對于仿真時(shí)間零點(diǎn)進(jìn)行詳細(xì)描述。相對而言,相對時(shí)間激勵(lì)提供初始值,然后等待一個(gè)事件來重新觸發(fā)激勵(lì)。根據(jù)設(shè)計(jì)者的需要,兩種方法可以在testb

8、ench中同時(shí)使用。下面的程序段是絕對時(shí)間激勵(lì)的例子。initial beginreset = 1;load = 0;cout_updn = 0;#100 reset = 0;#20 load = 1;#20 count_updn = 1;end下面的程序段是相對時(shí)間激勵(lì)的例子。always (posedge clock)tb_count = tb_count + 1;initial beginif(tb_count = 5)beginreset = 1;load = 0;count_updn = 0;endelsebegin reset = 0;load = 1;count_updn = 1

9、;endendinitial begin if(count = 1100) begincount_updn = 0;$display(“Terminal count Reached,now counting down”); endendVerilog的initial塊與文件中的其他initial塊是同時(shí)執(zhí)行。然而,在每一個(gè)initial塊中,事件是按照書寫的順序執(zhí)行的。這說明在每一個(gè)并行塊中的激勵(lì)序列從序仿真時(shí)間零點(diǎn)開始。為了代碼有更好的可讀性和更方便的可維護(hù)性,應(yīng)采用多個(gè)塊來分割復(fù)雜的測試激勵(lì)。顯示結(jié)果在Verilog中可以非常方便地使用系統(tǒng)函數(shù)$display()和$monitor()顯示

10、結(jié)果。VHDL沒有等效的顯示指令,它提供了std_textio標(biāo)準(zhǔn)文本輸入輸出程序包。它允許文件的i/o重定向到顯示終端窗口(作為這個(gè)技術(shù)的示例,參看下面的自較驗(yàn)查驗(yàn)證設(shè)計(jì))下面是verilog示例,它將在終端屏幕上顯示一些值。/ pipes the ASCII results to the terminal or text editorinitial begin$timeformat(-9,1,ns,12);$display( Time Clk Rst Ld SftRg Data Sel);$monitor(%t %b %b %b %b %b %b, $realtime,clock, res

11、et, load, shiftreg, data, sel);end系統(tǒng)函數(shù)$display在終端屏幕上輸出引用的附加說明文字(“。”)。系統(tǒng)函數(shù)$monitor操作不同。因?yàn)樗妮敵鍪鞘录?qū)動(dòng)的。例中的變量$realtime(由用戶賦值到當(dāng)前的仿真時(shí)間)用于觸發(fā)信號列表中值的顯示。信號表由變量$realtime開始,跟隨其他將要顯示的信號名(clock, reset, load等)。以%開始的關(guān)鍵字包含一個(gè)格式描述的表,用來控制如何格式化顯示信號列表中的每個(gè)信號的值。格式列表是位置確定的。每個(gè)格式說明有序地與信號列表中的信號順序相關(guān)。比如%t說明規(guī)定了$realtime的值是時(shí)間格式。并且第

12、一個(gè)%b說明符格式化clock的值是二進(jìn)制形式。Verilog提供附加的格式說明,比如%h用于說明十六進(jìn)制,%d說明十進(jìn)制,%c說明顯示為八進(jìn)制。圖2說明格式顯示結(jié)果圖2仿真結(jié)果簡單的testbench簡單的testbench實(shí)例化用戶設(shè)計(jì),然后提供相應(yīng)的激勵(lì)。測試輸出被圖形化顯示在仿真器的波形窗口里或者作為文本發(fā)送到用戶的終端或者是管道輸出文本。以下是一個(gè)簡單的用Verilog實(shí)現(xiàn)的設(shè)計(jì),它實(shí)現(xiàn)了一個(gè)移位寄存器的功能。module shift_reg (clock, reset, load, sel, data, shiftreg);input clock;input reset;input

13、 load;input 1:0 sel;input 4:0 data;output 4:0 shiftreg;reg 4:0 shiftreg;always (posedge clock)beginif (reset)shiftreg = 0;else if (load)shiftreg = data;elsecase (sel)2b00 : shiftreg = shiftreg;2b01 : shiftreg = shiftreg 1;default : shiftreg = shiftreg;endcaseendendmodule以下是簡單的testbench,示例移位寄存器設(shè)計(jì)的例子v

14、erilog描述。module testbench; / declare testbench namereg clock;reg load;reg reset; / declaration of signalswire 4:0 shiftreg;reg 4:0 data;reg 1:0 sel;/ instantiation of the shift_reg design belowshift_reg dut(.clock (clock),.load (load),.reset (reset),.shiftreg (shiftreg),.data (data),.sel (sel);/this

15、 process block sets up the free running clockinitial beginclock = 0;forever #50 clock = clock;endinitial 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;endinit

16、ial begin/ this process block pipes the ASCII results to the/terminal or text editor$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);endendmodule以上的testbench實(shí)例化設(shè)計(jì),設(shè)置時(shí)鐘,提供激勵(lì)信號。所有的進(jìn)程塊在仿真時(shí)間零點(diǎn)開始。英鎊標(biāo)記(#)說明下

17、一個(gè)激勵(lì)作用前的延遲。$stop命令使仿真器停止測試仿真(所有測試設(shè)計(jì)中都應(yīng)該包含一個(gè)停止命令)。最后,$monitor語句返回ascII格式的結(jié)果到屏幕或者管道輸出到一個(gè)文本編輯器。自動(dòng)驗(yàn)證推薦自動(dòng)實(shí)現(xiàn)測試結(jié)果的驗(yàn)證,尤其是對于較大的設(shè)計(jì)來說。自動(dòng)化減少了檢查設(shè)計(jì)是否正確所要求的時(shí)間,也使人可能的犯錯(cuò)最少。一般有以下幾種常用的自動(dòng)測試驗(yàn)證的方法:1、數(shù)據(jù)庫比較(database comparison)。首先,要?jiǎng)?chuàng)建一個(gè)包含預(yù)期輸出的數(shù)據(jù)庫文件。然后,仿真輸出被捕獲并與預(yù)期輸出數(shù)據(jù)庫文件中參考的向量比較。然而,因?yàn)閺妮敵龅捷斎胛募羔槢]有提供,是這種方法的一個(gè)缺點(diǎn),使得跟蹤一個(gè)導(dǎo)致錯(cuò)誤輸出的原

18、因比較困難。2、波形比較(waveform comparison)。波形比較可以自動(dòng)或是手動(dòng)的運(yùn)行。自動(dòng)的方法使用一個(gè)測試比較器來比較預(yù)期輸出波形與測試輸出波形。3、自我檢查測試平臺(tái)(self-checking testbenches)。一個(gè)自我檢查testbench檢查預(yù)期的結(jié)果與運(yùn)行時(shí)間的實(shí)際結(jié)果,并不是在仿真結(jié)束以后。因?yàn)橛杏玫腻e(cuò)誤跟蹤信息可以內(nèi)建在一個(gè)測試設(shè)計(jì)中,用來說明哪些地方設(shè)計(jì)有誤,調(diào)試時(shí)間可以非常明顯地縮短。自我檢查testbenches自我檢查testbench通過在一個(gè)測試文檔中放置一系列的預(yù)期向量表來實(shí)現(xiàn)。運(yùn)行時(shí)按定義好的時(shí)間間隔將這些向量與實(shí)際仿真結(jié)果進(jìn)行比較。如果實(shí)際

19、結(jié)果與預(yù)期結(jié)果匹配,仿真成功。如果結(jié)果不匹配,則報(bào)告兩者的差異。對于同步設(shè)計(jì),實(shí)現(xiàn)自我檢查testbench會(huì)更簡單一些,因?yàn)榕c實(shí)現(xiàn)的結(jié)果相比較可以在時(shí)鐘沿或每個(gè)幾個(gè)時(shí)鐘進(jìn)行。比較的方法基于設(shè)計(jì)本身的特性。比如一個(gè)存儲(chǔ)器讀寫的testbench在每次數(shù)據(jù)寫入后者讀出時(shí)進(jìn)行檢查。在自我檢查的testbench中,預(yù)期輸出與實(shí)際輸出在一定的時(shí)間間隔比較以便提供自動(dòng)的錯(cuò)誤檢查。這個(gè)技術(shù)在小到中型的設(shè)計(jì)中非常好。但是,因?yàn)楫?dāng)設(shè)計(jì)復(fù)雜后,可能的輸出組合成指數(shù)倍的增長,為一個(gè)大型設(shè)計(jì)編寫一個(gè)自我檢查的testbench是非常困難和非常費(fèi)時(shí)的。以下是一個(gè)用Verilog描述的簡單的自我檢查的testbenc

20、h例子:下述的設(shè)計(jì)實(shí)例中,預(yù)期的結(jié)果被詳細(xì)說明。后面的代碼,兩種結(jié)果被比較,比較的結(jié)果被返回終端。如果沒有錯(cuò)誤,一個(gè)“end of good simulation”消息會(huì)顯示。如果失配發(fā)生,根據(jù)期望與實(shí)際值的失配情況,錯(cuò)誤會(huì)被相應(yīng)報(bào)告。timescale 1 ns / 1 psmodule test_sc;reg tbreset, tbstrtstop;reg tbclk;wire 6:0 onesout, tensout;wire 9:0 tbtenthsout;parameter cycles = 25;reg 9:0 Data_in_t 0:cycles;/ / Instantiatio

21、n of the Design/ /stopwatch UUT (.CLK (tbclk), .RESET (tbreset), .STRTSTOP (tbstrtstop),.ONESOUT (onesout), .TENSOUT (tensout), .TENTHSOUT (tbtenthsout);wire 4:0 tbonesout, tbtensout;assign tbtensout = led2hex(tensout);assign tbonesout = led2hex(onesout);/EXPECTED RESULTS/initial beginData_in_t1 =10

22、b1111111110;Data_in_t2 =10b1111111101;Data_in_t3 =10b1111111011;Data_in_t4 =10b1111110111;Data_in_t5 =10b1111101111;Data_in_t6 =10b1111011111;Data_in_t7 =10b1110111111;Data_in_t8 =10b1101111111;Data_in_t9 =10b1011111111;Data_in_t10=10b0111111111;Data_in_t11=10b1111111110;Data_in_t12=10b1111111110;Da

23、ta_in_t13=10b1111111101;Data_in_t14=10b1111111011;Data_in_t15=10b1111110111;Data_in_t16=10b1111101111;Data_in_t17=10b1111011111;Data_in_t18=10b1110111111;Data_in_t19=10b1101111111;Data_in_t20=10b1011111111;Data_in_t21=10b0111111111;Data_in_t22=10b1111111110;Data_in_t23=10b1111111110;Data_in_t24=10b1

24、111111101;Data_in_t25=10b1111111011;endreg GSR;initial beginGSR = 1;/ / Wait till Global Reset Finished/ /#100 GSR = 0;end/ / Create the clock/ /initial begintbclk = 0;/ Wait till Global Reset Finished, then cycle clock#100 forever #60 tbclk = tbclk;endinitial begin/ / Initialize All Input Ports/ /t

25、breset = 1;tbstrtstop = 1;/ / Apply Design Stimulus/ /#240 tbreset = 0;tbstrtstop = 0;#5000 tbstrtstop = 1;#8125 tbstrtstop = 0;#500 tbstrtstop = 1;#875 tbreset = 1;#375 tbreset = 0;#700 tbstrtstop = 0;#550 tbstrtstop = 1;/ / simulation must be halted inside an initial statement/ / #100000 $stop;end

26、integer i,errors;/ Block below compares the expected vs. actual results/ at every negative clock edge./always (posedge tbclk)beginif (tbstrtstop)begini = 0;errors = 0;endelsebeginfor (i = 1; i 1)$display(%0d ERROR! See log above for details.,errors);else$display(ERROR! See log above for details.);#1

27、00 $stop;endendendmodule如果仿真成功,下圖的信息就會(huì)在顯示終端上顯示:圖3 verilog示例驗(yàn)證編寫testbench的準(zhǔn)則本節(jié)羅列一些編寫testbench的準(zhǔn)則。正如規(guī)劃一個(gè)電路設(shè)計(jì)可以幫助得到更好的電路性能,規(guī)劃好的testbench可以提高仿真驗(yàn)證的效率。在編寫testbench前要了解仿真器雖然通用仿真工具兼容HDL工業(yè)標(biāo)準(zhǔn),但標(biāo)準(zhǔn)并沒有重點(diǎn)強(qiáng)調(diào)跟仿真相關(guān)的一些主題。不同的仿真器有不同的特點(diǎn)、功能和執(zhí)行效率。對我們而言要全面了解Active-HDL這個(gè)工具。-基于事件vs基于周期的仿真仿真器使用基于事件或基于周期的仿真方法。基于事件的仿真器,當(dāng)輸入,信號,或

28、是門改變了值,來確定仿真器事件的時(shí)間。在一個(gè)基于事件的仿真器中,一個(gè)延時(shí)值可以附加在門電路或是電路網(wǎng)絡(luò)上來構(gòu)建最優(yōu)的時(shí)序仿真。基于周期的仿真器面向同步設(shè)計(jì)。這類工具優(yōu)化組合邏輯,在時(shí)鐘沿分析結(jié)果。這個(gè)功能使得基于周期的仿真器比基于事件的仿真器更快更有效。-確定事件時(shí)間基于事件的仿真器提供商使用不同的運(yùn)算法則來確定仿真事件。所以,根據(jù)仿真器用來確定的運(yùn)算法則不同,同一個(gè)仿真時(shí)間的事件被確定為不同的次序(根據(jù)在每個(gè)事件之間插入的delta延時(shí))。為避免對運(yùn)算法則的依賴和確保正確的結(jié)果,一個(gè)事件驅(qū)動(dòng)測試應(yīng)該詳細(xì)描述明確的激勵(lì)順序。-避免使用無限循環(huán)當(dāng)一個(gè)事件添加到基于事件的仿真器,cpu和內(nèi)存的使用

29、就增加了,仿真過程就會(huì)變慢。除非是評價(jià)testbench,無限循環(huán)不應(yīng)該使用來作為設(shè)計(jì)的激勵(lì)。一般地,只有時(shí)鐘被描述成一個(gè)無限循環(huán)(如forever循環(huán))。-細(xì)分激勵(lì)到邏輯模塊 在測試中,所有initial塊(verilog)并行執(zhí)行。如果無關(guān)的激勵(lì)被分離到獨(dú)立的塊中,測試激勵(lì)的順序會(huì)變得更容易實(shí)現(xiàn)和檢查。因?yàn)槊總€(gè)并行的塊相關(guān)于仿真時(shí)間的零點(diǎn)開始執(zhí)行,對于分離的塊傳遞激勵(lì)更容易。使用分離激勵(lì)塊使得testbench的建立,維護(hù)和升級更加容易。-避免顯示并不重要的數(shù)據(jù)大型設(shè)計(jì)的測試可能包含10萬以上的事件或匿名信號。顯示大量的仿真數(shù)據(jù)會(huì)相當(dāng)?shù)亟档头抡娴乃俣取8呒墱y試技術(shù)根據(jù)任務(wù)和過程細(xì)分激勵(lì)模塊

30、在創(chuàng)建一個(gè)大的testbench時(shí),激勵(lì)將會(huì)被分割使得代碼清晰而易于修改。Task塊可以被用來分割信號。在下面例子中的testbench用于一個(gè)SDRAM控制器的測試。設(shè)計(jì)包括重復(fù)的激勵(lì)模塊,testbench通過不同的task來劃分測試激勵(lì)。這些task稍后被調(diào)用來進(jìn)行獨(dú)立塊的功能的測試仿真。task addr_wr; 地址寫input 31 : 0 address;begindata_addr_n = 0;we_rn = 1;ad = address;endendtasktask data_wr; 數(shù)據(jù)寫input 31 : 0 data_in;begindata_addr_n = 1;w

31、e_rn = 1;ad = data_in;endendtasktask addr_rd; 地址讀input 31 : 0 address;begindata_addr_n = 0;we_rn = 0;ad = address;endendtasktask data_rd; 數(shù)據(jù)讀input 31 : 0 data_in;begindata_addr_n = 1;we_rn = 0;ad = data_in;endendtasktask nop; 空操作begindata_addr_n = 1;we_rn = 0;ad = hi_z;endendtask這些任務(wù)描述設(shè)計(jì)功能的獨(dú)立單元:地址的讀

32、寫,數(shù)據(jù)的讀寫,或者空操作。當(dāng)這些task描述完成后,這些task可以在testbench中被調(diào)用。如下所示:Initial beginnop ; / Nop#( 86* CYCLE +1); addr_wr (32h20340400); / Precharge, loadController MR#(CYCLE); data_wr (32h0704a076); / value for Controller MR#(CYCLE); nop ; / Nop#(5 * CYCLE); addr_wr (32h38000000); / Auto Refresh#(CYCLE); data_wr (3

33、2h00000000); /#(CYCLE); nop ; / Nopend細(xì)分激勵(lì)到獨(dú)立的任務(wù)使得激勵(lì)很容易實(shí)現(xiàn),也使得代碼的可讀性更好。在仿真時(shí)控制雙向信號多數(shù)設(shè)計(jì)使用雙向信號,在testbench中必須區(qū)別對待雙向信號和單向信號。雙向總線由testbench控制,雙向總線的值可以通過數(shù)據(jù)頂層信號來訪問。以下是一個(gè)雙向總線示例。module bidir_infer (DATA, READ_WRITE);input READ_WRITE ;inout 1:0 DATA ;reg 1:0 LATCH_OUT ;always (READ_WRITE or DATA)beginif (READ_W

34、RITE = 1)寫LATCH_OUT = DATA;endassign DATA = (READ_WRITE = 1) ? 2bZ : LATCH_OUT;endmoduleVerilog testbench可以如下描述:module test_bidir_ver;reg read_writet;reg 1:0 data_in;wire 1:0 datat, data_out;bidir_infer uut (datat, read_writet);assign datat = (read_writet = 1) ? data_in : 2bZ;assign data_out = (read

35、_writet = 0) ? datat : 2bZ;initial beginread_writet = 1;data_in = 11;#50 read_writet = 0;endendmodule在這些測試設(shè)計(jì)中,data_in信號提供激勵(lì)到設(shè)計(jì)中的雙向DATA數(shù)據(jù)信號,data_out信號讀取該DATA數(shù)據(jù)信號.Verilog中有用的語法結(jié)構(gòu)其他有用的Verilog語法結(jié)構(gòu),如 $monitor, $display, 及$time,在前面的verilog測試示例中論述過,這一節(jié)說明另外的可以在測試設(shè)計(jì)中使用的verilog語句結(jié)構(gòu)。force/releaseforce/release語

36、句可以用來跨越進(jìn)程對一個(gè)寄存器或一個(gè)wire網(wǎng)絡(luò)的賦值。這個(gè)結(jié)構(gòu)一般用于強(qiáng)制特定的設(shè)計(jì)行為。一旦一個(gè)強(qiáng)制值釋放,這個(gè)信號保持它的狀態(tài)直到新的值被進(jìn)程賦值。以下是force/release語句的用法。module testbench;.initial beginreset = 1;force DataOut = 101;#25 reset = 0;#25 release DataOut;.endendmoduleassign/deassignassign/deassign語句與force/release相類似,但是assign/deassign只用于設(shè)計(jì)中的寄存器。他們一般用于設(shè)置輸入值。就象一個(gè)force語句,assign語句覆蓋進(jìn)程語句的賦值。以下是一個(gè)assign/deassign語句的用法。modu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論