版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Testbench設(shè)計(jì) 本章目錄Testbench設(shè)計(jì)Testbench簡介Testbench基本結(jié)構(gòu)激勵信號的產(chǎn)生時鐘信號復(fù)位信號復(fù)雜周期性信號兩相關(guān)性信號一般激勵信號典型錯誤 Testbench綜合應(yīng)用實(shí)例高級Testbench設(shè)計(jì)高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例Testbench簡介Testbench基本結(jié)構(gòu)激勵信號的產(chǎn)生Testbench實(shí)例Testbench設(shè)計(jì)初步數(shù)字系統(tǒng)設(shè)計(jì)方法基于中小規(guī)模集成電路的設(shè)計(jì)方法電路運(yùn)行速度快,實(shí)時性好。然而過程過于繁瑣復(fù)雜,不適用于大型的數(shù)字系統(tǒng)設(shè)計(jì);基于MCU的設(shè)計(jì)方法較為直觀人
2、性化,然而MCU的性能難以滿足某些特定場合(如高速情況下)的應(yīng)用需求;基于PLD的EDA設(shè)計(jì)則是一種全新的設(shè)計(jì)思想與設(shè)計(jì)理念。兼具了中小規(guī)模集成電路設(shè)計(jì)與MCU設(shè)計(jì)方式的優(yōu)點(diǎn);在頂層設(shè)計(jì)上采用多種輸入描述方法,具有MCU方式設(shè)計(jì)的靈活性、直觀性;底層硬件邏輯設(shè)計(jì)由EDA工具自動完成保證了設(shè)計(jì)效率;功能開發(fā)上是軟件實(shí)現(xiàn)的,物理機(jī)制為純硬件電路;純硬件的物理機(jī)制使其具有更強(qiáng)的抗干擾能力、更快的運(yùn)行速度。真實(shí)世界VHDL SIMULATOR 數(shù)字系統(tǒng)設(shè)計(jì)Test Bench . ?!VHDL test benchTestbench簡介編寫Testbench目的 對使用硬件描述語言(HDL)設(shè)計(jì)的電路
3、進(jìn)行仿真驗(yàn)證,測試設(shè)計(jì)電路的功能、部分性能是否與預(yù)期的目標(biāo)相符。 編寫Testbench進(jìn)行測試的過程 1)實(shí)例化需要測試的設(shè)計(jì)(DUT,Design Under Test); 2)產(chǎn)生模擬激勵(波形);3)將產(chǎn)生的激勵加入到被測試模塊并觀察其輸出響應(yīng);4)將輸出響應(yīng)與期望進(jìn)行比較,從而判斷設(shè)計(jì)的正確性。輸出響應(yīng)可以以波形方式顯示或存儲測試結(jié)果到文件中Testbench簡介Testbench基本結(jié)構(gòu)激勵信號的產(chǎn)生Testbench實(shí)例Testbench設(shè)計(jì)初步激勵信號待測試實(shí)例波形、數(shù)據(jù)輸入輸出Testbench是VHDL程序之一,它遵循VHDL基本程序的框架,也具有自身的獨(dú)特性Testben
4、ch的基本結(jié)構(gòu)結(jié)構(gòu)體描述庫的調(diào)用程序包的調(diào)用空實(shí)體被測試元件的聲明Testbench的基本結(jié)構(gòu)LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY TB ISEND ENTITY;ARCHITECTURE behav OF TB ISCOMPONENT Entity_Under_Test PORT() -端口列表END COMPONENTBEGIN-局部信號的聲明DUT: Entity_Under_Test port map() Gen1:PROCESS () END PROCESS; Gen2:PROCESS () END PROCESS;END b
5、ehav;局部信號聲明例化被測試元件產(chǎn)生激勵信號Testbench簡介Testbench基本結(jié)構(gòu)激勵信號的產(chǎn)生Testbench實(shí)例Testbench設(shè)計(jì)初步時鐘信號的產(chǎn)生復(fù)位信號的產(chǎn)生復(fù)雜周期性信號的產(chǎn)生使用DELAYED屬性產(chǎn)生兩相關(guān)性信號一般激勵信號的產(chǎn)生典型錯誤激勵信號的產(chǎn)生激勵信號的產(chǎn)生時鐘信號的產(chǎn)生 時鐘信號是同步設(shè)計(jì)中最重要的信號之一。是屬于周期性出現(xiàn)的信號。時鐘信號分類:(1)對稱時鐘信號(占空比為50%)(2)非對稱時鐘信號(占空比不是50% )Testbench中產(chǎn)生時鐘信號方式:(1)并行的信號賦值語句(2)單獨(dú)process進(jìn)程clk1、clk2和clk3有何區(qū)別?試用
6、并行賦值語句產(chǎn)生上述時鐘信號激勵信號的產(chǎn)生時鐘信號的產(chǎn)生 使用并行的信號賦值語句產(chǎn)生時鐘信號激勵信號的產(chǎn)生時鐘信號的產(chǎn)生 使用并行的信號賦值語句產(chǎn)生時鐘信號signal clk1: std_logic := 0;signal clk2: std_logic;signal clk3:std_logic;constant clk_period : time := 40 ns;clk1 = not clk1 after clk_period/2;clk2 = 0 after clk_period/4 when clk2=1 else 1 after 3*clk_period/4 when clk2=
7、0 else 1; -此值實(shí)際上是定義clk2的起始值clk3 = 0 after clk_period/4 when clk3=1 else 1 after 3*clk_period/4 when clk3=0 else 0;clk1為對稱時鐘信號,其初始值在信號定義時賦值;clk2和clk3為非對稱時鐘信號,其初值在并行賦值語句中給予激勵信號的產(chǎn)生時鐘信號的產(chǎn)生 使用process進(jìn)程產(chǎn)生時鐘信號clk1和clk2有何區(qū)別?試用process進(jìn)程產(chǎn)生上述時鐘信號激勵信號的產(chǎn)生時鐘信號的產(chǎn)生 使用process進(jìn)程產(chǎn)生時鐘信號signal clk1: std_logic;signal clk
8、2: std_logic; clk1_gen:process constant clk_period : time := 40 ns; begin clk1 = 1; wait for clk_period/2; clk1 = 0; wait for clk_period/2; end process;clk2_gen:process constant clk_period : time := 20 ns; begin clk2 = 0; wait for clk_period/4; clk2 = 1; wait for 3*clk_period/4; end process;常量只在該進(jìn)程中
9、起作用常量只在該進(jìn)程中起作用激勵信號的產(chǎn)生 數(shù)字系統(tǒng)往往需要復(fù)位信號對系統(tǒng)進(jìn)行復(fù)位,以便初始化系統(tǒng)。Testbench中產(chǎn)生復(fù)位信號方式:(1)并行賦值語句(2)在進(jìn)程中設(shè)定復(fù)位信號的產(chǎn)生 激勵信號的產(chǎn)生復(fù)位信號的產(chǎn)生 試分別用并行賦值語句、process進(jìn)程產(chǎn)生上圖中的reset1和reset2信號激勵信號的產(chǎn)生復(fù)位信號的產(chǎn)生 signal reset1: std_logic;signal reset2: std_logic;reset1 = 0,1 after 20 ns, 0 after 40 ns;reset2_gen:processbegin reset2 = 0; wait for
10、 20 ns; reset2 = 1; wait for 40 ns; reset2 = 0; wait;end process;激勵信號的產(chǎn)生復(fù)雜周期性信號的產(chǎn)生 觀察period1和period2信號的周期是多少?試用進(jìn)程的方法產(chǎn)生該信號激勵信號的產(chǎn)生復(fù)雜周期性信號的產(chǎn)生 signal period1,period2: std_logic := 0;TB:processbegin period1 =1 after 5 ns, 0 after 10 ns, 1 after 20 ns, 0 after 25 ns; period2 =1 after 10 ns,0 after 20 ns,
11、1 after 25 ns, 0 after 30 ns; wait for 35 ns;end process;方法一激勵信號的產(chǎn)生復(fù)雜周期性信號的產(chǎn)生 方法二signal period1,period2: std_logic;period1_gen:processbegin period1 =0;wait for 5 ns; period1 =1;wait for 5 ns; period1 =0;wait for 10 ns; period1 =1;wait for 5 ns; period1 =0;wait for 10 ns;end process;period2_gen:proce
12、ssbegin period2 =0;wait for 10 ns; period2 =1;wait for 10 ns; period2 =0;wait for 5 ns; period2 =1;wait for 5 ns; period2 =0;wait for 5 ns;end process;激勵信號的產(chǎn)生使用DELAYED屬性產(chǎn)生兩相關(guān)性信號 period1和period2信號具有怎樣的相關(guān)性?試用delayed屬性產(chǎn)生上述信號delayed是VHDL的預(yù)定義屬性,使用它可以產(chǎn)生兩個相關(guān)性的信號激勵信號的產(chǎn)生使用DELAYED屬性產(chǎn)生兩相關(guān)性信號 delayed是VHDL的預(yù)定義屬性
13、,使用它可以產(chǎn)生兩個相關(guān)性的信號signal period1,period2: std_logic; period1 = 1 after 30 ns when period1=0 else 0 after 20 ns when period1=1 else 0; period2 = period1delayed(10 ns);激勵信號的產(chǎn)生一般的激勵信號 一般的激勵信號通常在process進(jìn)程中定義,而在process進(jìn)程中一般需要使用wait語句比較test_vector1和test_vector2的異同,并用process進(jìn)程實(shí)現(xiàn)之激勵信號的產(chǎn)生一般的激勵信號 一般的激勵信號通常在proc
14、ess進(jìn)程中定義,而在process進(jìn)程中一般需要使用wait語句signal test_vector1: std_logic_vector (1 downto 0);signal test_vector2: std_logic_vector (1 downto 0);TB1:processbegin test_vector1 = 01; wait for 10 ns; test_vector1 = 10; wait for 20 ns;end process;TB2:processbegin test_vector2 = 01; wait for 10 ns; test_vector2 =
15、10; wait;end process;激勵信號的產(chǎn)生一般的激勵信號 產(chǎn)生test_vector中所有可能的輸入情況signal test_vector3: std_logic_vector (3 downto 0) := 0000;signal test_vector4: std_logic_vector (3 downto 0) := 0000;signal test_vector5: std_logic_vector (3 downto 0);signal test_vector6: std_logic_vector (3 downto 0);TB3:processbegin wait
16、 for 10 ns; test_vector3 = test_vector3 + 1;end process;TB4:processbegin wait for 10 ns; test_vector4 = test_vector4 + 1; wait for 10 ns;end process;TB5:processbegin test_vector5 = 0000; wait for 10 ns; test_vector5 = test_vector5 + 1;end process;TB6:processbegin test_vector6 = 0000; wait for 10 ns;
17、 test_vector6 = test_vector6 + 1; wait for 10 ns;end process;比較四個process的異同,試畫出各個test_vector波形激勵信號的產(chǎn)生一般的激勵信號 產(chǎn)生test_vector中所有可能的輸入情況TB3:processbegin wait for 10 ns; test_vector3 = test_vector3 + 1;end process;TB4:processbegin wait for 10 ns; test_vector4 = test_vector4 + 1; wait for 10 ns;end proces
18、s;激勵信號的產(chǎn)生一般的激勵信號 產(chǎn)生test_vector中所有可能的輸入情況TB5:processbegin test_vector5 = 0000; wait for 10 ns; test_vector5 = test_vector5 + 1;end process;TB6:processbegin test_vector6 = 0000; wait for 10 ns; test_vector6 = test_vector6 + 1; wait for 10 ns;end process;激勵信號的產(chǎn)生一般的激勵信號 產(chǎn)生兩個test_vector中所有可能的輸入情況如上圖所示,2b
19、it的test_ab和test_sel是否覆蓋了所有的輸入情況?試用VHDL產(chǎn)生上述信號激勵信號的產(chǎn)生一般的激勵信號 產(chǎn)生兩個test_vector中所有可能的輸入情況double_loop: process begin test_ab =00; test_sel =00; for I in 0 to 3 loop for J in 0 to 3 loop wait for 10 ns; test_ab = test_ab + 1; end loop; test_sel = test_sel + 1; end loop; end process; signal test_ab: std_log
20、ic_vector (1 downto 0);signal test_sel: std_logic_vector (1 downto 0);在testbench中可以用for循環(huán)(因?yàn)閠estbench不需綜合),但在設(shè)計(jì)中不推薦使用for循環(huán)激勵信號的產(chǎn)生典型錯誤 signal test_vector : STD_LOGIC_VECTOR(2 downto 0); signal reset : STD_LOGIC;gen1:process begin reset = 1; wait for 100 ns; reset = 0; test_vector = 000; wait; end pro
21、cess; gen2:process begin wait for 200 ns; test_vector = 001; wait for 200 ns; test_vector = 011; end process;該程序是否有錯?假如沒錯,請分析test_vector和reset的時序激勵信號的產(chǎn)生典型錯誤 signal test_vector : STD_LOGIC_VECTOR(2 downto 0); signal reset : STD_LOGIC;gen1:process begin reset = 1; wait for 100 ns; reset = 0; test_vect
22、or = 000; wait; end process; gen2:process begin wait for 200 ns; test_vector = 001; wait for 200 ns; test_vector = 011; end process;同一個信號在兩個進(jìn)程中進(jìn)行賦值,在某些時間段內(nèi)發(fā)生了沖突,所以會出現(xiàn)不定狀態(tài)同一信號不推薦在不同的進(jìn)程中賦值Testbench簡介Testbench基本結(jié)構(gòu)激勵信號的產(chǎn)生Testbench實(shí)例Testbench設(shè)計(jì)初步Testbench實(shí)例組合邏輯電路:2位全加器的設(shè)計(jì)與驗(yàn)證時序邏輯電路:六進(jìn)制計(jì)數(shù)器的設(shè)計(jì)與驗(yàn)證Testbench實(shí)例
23、2位全加器的設(shè)計(jì)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder_2 isport(cin:in std_logic; a,b:in std_logic_vector(1 downto 0); s:out std_logic_vector(1 downto 0); cout:out std_logic);end adder_2;architecture beh of adder_2 is signal sint:std_logic_vector(2 downto 0);si
24、gnal aa,bb:std_logic_vector(2 downto 0);beginaa=0 & a(1 downto 0);bb=0 & b(1 downto 0);sint=aa+bb+cin;s(1 downto 0)=sint(1 downto 0);coutcin_t,a=a_t,b=b_t,s=s_t,cout=cout_t);庫、程序包的調(diào)用Testbench實(shí)體(空實(shí)體)定義Testbench是VHDL程序之一, 它遵循VHDL基本程序的框架,也具有自身的獨(dú)特性被測元件的聲明注意:此處并非adder_2_tb被測元件的例化Testbench實(shí)例2位全加器的驗(yàn)證(續(xù))TB:
25、processbegina_t=01;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t=10;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t=11;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t
26、=00;b_t=00;cin_t=1;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;對此加法器進(jìn)行全面的測試驗(yàn)證的方法一方法一當(dāng)加法器位數(shù)增加時,要覆蓋所有可能的輸入,此方法需要羅列的情況倍數(shù)增加,代碼書寫將會非常麻煩Testbench實(shí)例2位全加器的驗(yàn)證(續(xù))a_t=01;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t=10;b_t=00;wa
27、it for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t=11;b_t=00;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;a_t=00;b_t=00;cin_t=0;wait for 10 ns;b_t=01;wait for 10 ns;b_t=10;wait for 10 ns;b_t=11;wait for 10 ns;end process;end tb;對此加法
28、器進(jìn)行全面的測試驗(yàn)證的方法一方法一Testbench實(shí)例2位全加器的驗(yàn)證(續(xù))TB:process begin a_t =00; b_t =00; cin_t =0; for K in 0 to 1 loop for I in 0 to 3 loop for J in 0 to 3 loop wait for 10 ns; a_t = a_t + 1; end loop; b_t = b_t + 1; end loop; cin_t = not cin_t; end loop; end process;end tb;對此加法器進(jìn)行全面的測試驗(yàn)證的方法二方法二Testbench實(shí)例2位全加器的驗(yàn)
29、證(續(xù))仿真結(jié)果通過對波形進(jìn)行分析可知,本設(shè)計(jì)功能正確Testbench實(shí)例六進(jìn)制計(jì)數(shù)器的設(shè)計(jì)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 is port (clr,en,clk:in std_logic; q:out std_logic_vector(2 downto 0) ); end entity;architecture rtl of cnt6 is signal tmp:std_logic_vector(2 downto 0); begin process(cl
30、k) begin if(clkevent and clk=1) then if(clr=0)then tmp=000; elsif(en=1) then if(tmp=101)then tmp=000; else tmp=unsigned(tmp)+1; end if; end if; end if; qclk,en=en,clr=clr,q=q); 庫、程序包的調(diào)用Testbench實(shí)體(空實(shí)體)定義被測元件的聲明被測元件的例化Testbench實(shí)例六進(jìn)制計(jì)數(shù)器的驗(yàn)證(續(xù))clk_gen:process begin wait for clk_period/2; clk=1; wait for
31、 clk_period/2; clk=0; end process;clr_gen:process begin clr=0; wait for 15 ns; clr=1; wait; end process;en_gen:process begin en=0; wait for 25 ns; en=1; wait; end process; end rtl; 仿真結(jié)果Testbench設(shè)計(jì)進(jìn)階高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例Testbench設(shè)計(jì)進(jìn)階高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)
32、高級Testbench實(shí)例高級Testbench概述簡單Testbench高級Testbench簡單Testbench概述 在前一節(jié)內(nèi)容中,我們所看到的驗(yàn)證方法都是比較簡單的,這里稱為簡單Testbench,一般結(jié)構(gòu)如下圖所示。激勵信號待測試實(shí)例波形、數(shù)據(jù)輸入輸出 所輸出的結(jié)果以波形或者數(shù)據(jù)顯示,需要人工分析其結(jié)果的正確性,如果被測信號數(shù)量較多且時序復(fù)雜,工作量會非常巨大。高級Testbench概述激勵信號待測試實(shí)例輸入輸出高級Testbench是在簡單Testbench基礎(chǔ)上改進(jìn)過來的,能夠自動讀入測試矢量文件、完成輸出值和期望值的比較等功能。如下圖所示輸出值和期望值比較測試矢量文件測試結(jié)果
33、(Yes/No)更智能化,減少人工分析的繁瑣!載入期望值Testbench設(shè)計(jì)進(jìn)階高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例文件的讀寫文件定義TEXTIO介紹TEXTIO數(shù)據(jù)類型及過程代碼示例仿真時,VHDL允許設(shè)計(jì)人員從文件加載數(shù)據(jù)或?qū)?shù)據(jù)存儲到文件中。比如用戶定義的測試矢量可以保存在文件中,然后在仿真時從文件中讀取這些測試矢量。另外,仿真的結(jié)果也可以保存在文件中。VHDL標(biāo)準(zhǔn)中的文件I/O主要是由TEXTIO程序包提供,用于仿真,綜合工具不能綜合如果想在仿真時候進(jìn)行文件操作,必須引入標(biāo)準(zhǔn)庫STD中的TEXTIO定義的程序包,該程序
34、包中包含了文件輸入輸出所需的基本子程序?!癠SE STD.TEXTIO.ALL”文件的讀寫TEXTIO 是VHDL 標(biāo)準(zhǔn)庫STD 中的一個程序包 (Package)。在該包中定義了三個類型:LINE 類型、TEXT類型以及SIDE 類型。另外,還有一個子類型(subtype)WIDTH。此外, 在該程序包中還定義了一些訪問文件所必須的過程(Procedure)。TEXTIO介紹TEXTIO數(shù)據(jù)類型LINETEXTSIDEWIDTH進(jìn)程READLINEWRITELINEREADWRITE數(shù)據(jù)類型LINETEXTIO數(shù)據(jù)類型LINE為存取類型的變量,它表示該變量是指向字符串的指針,它是TEXTIO
35、 中所有操作的基本單元。讀文件時,先按行(LINE)讀出一行數(shù)據(jù),再用LINE 操作來讀取各種數(shù)據(jù)類型的數(shù)據(jù);寫文件時, 先將各種的數(shù)據(jù)類型組合成LINE,再將LINE 寫入文件。在用戶使用時, 必須注意只有變量才可以是存取類型, 而信號則不能是存取類型。例如, 我們可以定義variable DLine : LINE;但不能定義成signal DLine : LINE;數(shù)據(jù)類型TEXTTEXT 為ASCII 文件類型。 定義成為TEXT 類型的文件是長度可變的ASCII 文件。需要注意的是VHDL87 和VHDL93 在使用文件方面有較大的差異,在編譯時注意選中對應(yīng)的標(biāo)準(zhǔn)。TEXTIO數(shù)據(jù)類型
36、數(shù)據(jù)類型SIDESIDE 只能有兩種狀態(tài),即right 和left,分別表示將數(shù)據(jù)從左邊還是右邊寫入行變量。該類型主要是在TEXTIO 程序包包含的過程中使用。數(shù)據(jù)類型WIDTHWIDTH 為自然數(shù)的子類型。所謂子類型表示其取值范圍是父類型范圍的子集。TEXTIO數(shù)據(jù)類型TEXTIO文件定義文件可以通過它所存儲的內(nèi)容來進(jìn)行區(qū)分type text 是字符串文件;type IntegerFileType 是整數(shù)型文件;VHDL 1987中的文件定義file infile: text is in “inputdata.txt”;file outfile: text is out “outputdat
37、a.txt”;VHDL 1993中的文件定義file infile: text open read_mode is “inputdata.txt”;file outfile: text open write_mode is “outputdata.txt”;TEXTIO文件定義二進(jìn)制I/O文件(VHDL 1993)支持read(f, value), write(f, value)和 endfile(f)操作VHDL 93支持FILE_OPEN()和FILE_CLOSE ()操作直接和間接的文件打開操作;USE STD.TEXTIO.ALL;ENTITY io93 ISEND ENTITY io
38、93;ARCHITECTURE behavioral OF io93 ISBEGIN PROCESS IS TYPE INTEGERFILETYPE IS FILE OF INTEGER; FILE dataout:INTEGERFILETYPE; VARIABLE count:INTEGER:=0; VARIABLE fstatus:FILE_OPEN_STATUS; BEGIN FILE_OPEN(fstatus,dataout,myfile.txt,WRITE_MODE); FOR j IN 1 TO 8 LOOP WRITE(dataout,count); count:=count+2
39、; END LOOP; WAIT; END PROCESS; END ARCHITECTURE behavioral;TEXTIO文件定義二進(jìn)制I/O文件(VHDL 1987)支持read(f,value), write(f, value)和 endfile(f)操作直接和間接的文件打開操作;USE STD.TEXTIO.ALL;ENTITY io87 ISEND ENTITY io87;ARCHITECTURE behavioral OF io87 ISBEGIN PROCESS TYPE INTEGERFILETYPE IS FILE OF INTEGER; FILE dataout:IN
40、TEGERFILETYPE IS OUT output.txt; VARIABLE check:INTEGER:=0; BEGIN FOR count IN 1 TO 10 LOOP check:=check+1; WRITE(dataout,check); END LOOP; WAIT; END PROCESS; END behavioral;TEXTIO 提供了基本的用于訪問文本文件的過程。類似于 C,VHDL 提供了重載功能, 即完成相近功能的不同過程可以有相同的過程名, 但其參數(shù)列表不同, 或參數(shù)類型不同或參數(shù)個數(shù)不同。TEXTIO 提供的基本過程有:procedure READLIN
41、E(文件變量;行變量); -用于從指定文件讀取一行數(shù)據(jù)到行變量中。procedure WRITELINE(文件變量;行變量); -用于向指定文件寫入行變量所包含的數(shù)據(jù)。procedure READ(); -可重載,用于從行變量中讀取相應(yīng)數(shù)據(jù)類型的數(shù)據(jù)。procedure WRITE(); -可重載,用于將數(shù)據(jù)寫入行變量。TEXTIO讀寫過程TEXTIO使用例程在ModelSim的輸出結(jié)果如下:打開文件寫入信息USE STD.TEXTIO.ALL;ENTITY formatted_io ISEND formatted_io;ARCHITECTURE behavioral OF formatted
42、_io ISBEGIN PROCESS FILE outfile:TEXT; VARIABLE fstatus:FILE_OPEN_STATUS; VARIABLE count:INTEGER:=5; VARIABLE value:BIT_VECTOR(3 DOWNTO 0):=X6; VARIABLE buf:LINE; BEGIN FILE_OPEN(fstatus,outfile,myfile.txt,write_mode); WRITE(buf,STRING(This is an example of formatted I/O); WRITELINE(outfile,buf); WR
43、ITE(buf,STRING(The First Parameter is =); WRITE(buf,count); WRITE(buf, ); WRITE(buf,STRING(The Second Parameter is =); WRITE(buf,value); WRITELINE(outfile,buf); WRITE(buf,STRING(.and so on); WRITELINE(outfile,buf); FILE_CLOSE(outfile); WAIT; END PROCESS; END ARCHITECTURE behavioral;Testbench設(shè)計(jì)進(jìn)階高級Te
44、stbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例VCD數(shù)據(jù)庫文件VCD數(shù)據(jù)庫用VCD文件記錄仿真數(shù)據(jù)操作提示VCD文件樣式利用ModelSim查看VCD文件VCD數(shù)據(jù)庫VCD數(shù)據(jù)庫是仿真過程中數(shù)據(jù)信號變化的記錄。它只記錄用戶指定的信號。其后綴名一般為(*.vcd)。VCD文件的作用如下:1、存儲波形;2、波形數(shù)據(jù)交換;3、用于測試,很多測試工具都可以讀入VCD文件,然后根據(jù)VCD文件產(chǎn)生激勵,并且比對輸出結(jié)果,實(shí)現(xiàn)對芯片的測試。用VCD文件記錄仿真數(shù)據(jù)在VHDL中沒有像Verilog HDL那樣,直接提供一系列的函數(shù)來生成VCD文件,但我們可以借助
45、ModelSim的vcd命令來實(shí)現(xiàn)用VCD文件記錄仿真數(shù)據(jù)。ModelSim的vcd命令使用方式如下:(更詳細(xì)的參數(shù)說明,請查看ModelSim SE Reference Manual)建立vcd文件:vcd file -dumpports -direction -map -no_strength_range -nomap -unique 例:vcd file mylog.vcd (建立一個名為mylog.vcd的VCD文件)用VCD文件記錄仿真數(shù)據(jù)添加記錄對象:vcd add -r -in -out -inout -internal -ports -file -dumpports .例:vc
46、d add testbench2/uut/* (把testbench2/uut/模塊中的所有對象添加到vcd數(shù)據(jù)庫中)暫停、開始記錄:vcd off (暫停)vcd on (開始)操作提示1、在ModelSim中建立一個工程,并編譯好模塊文件和Testbench文件。2、載入Testbench的頂層模塊進(jìn)行仿真,這個時候ModelSim會載入需要調(diào)用的模塊,但仿真還沒有開始3、建立VCD文件:在命令框中輸入“vcd file mylog.vcd ”(mylog.vcd 可以是VCD文件的文件名,可以根據(jù)自己的意愿更改,但后綴名必須為*.vcd)4、添加要記錄的對象:在命令框中輸入“vcd ad
47、d testbench2/uut/* ”就可以把testbench2/uut里面的所有對象,都添加到記錄的進(jìn)程中。5、點(diǎn)擊run all按鈕運(yùn)行仿真,直至仿真結(jié)束。6、可以利用ModelSim的vcd2wlf命令把VCD文件轉(zhuǎn)換為WLF格式的波形文件,這樣可以利用ModelSim的波形查看器窗口查看數(shù)據(jù)。也可以利用其它工具打開或者調(diào)用。VCD文件樣式利用ModelSim的vcd命令生成的VCD文件的樣式如下(省略了部分?jǐn)?shù)據(jù))$dateSat Oct 08 11:16:56 2011$end$versionModelSim Version 6.5b$end$timescale1ns$end$sc
48、ope module testbench2 $end$scope module uut $end$var wire 1 % a 4 $end$var wire 1 & a 3 $end$var wire 1 a 2 $end$var wire 1 ( a 1 $end$var wire 1 - b 4 $end$var wire 1 . b 3 $end$var wire 1 / b 2 $end$var wire 1 0 b 1 $end$var wire 1 1 cin $end$var wire 1 6 sum 4 $end$var wire 1 7 sum 3 $end$var wir
49、e 1 8 sum 2 $end$var wire 1 9 sum 1 $end$var wire 1 : cout $end$upscope $end$upscope $end$enddefinitions $end#0$dumpvars1!11#1$1%1&11(0)0*0+0!0:09070503利用ModelSim查看VCD文件如上面的文件格式所示,VCD文件僅僅是文本文件,需要用波形查看器才可以直觀地觀察里面的數(shù)據(jù)波形。在ModelSim中需要把VCD文件轉(zhuǎn)換為wlf格式的文件,才可以用波形查看器查看。以上一頁完整的VCD文件mylog.vcd為例。在ModelSim的命令框中輸入:
50、vcd2wlf mylog.vcd mylog.wlf即可生成名為mylog.wlf的波形文件,直接用ModelSim打開即可Testbench設(shè)計(jì)進(jìn)階高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例斷言語句(Assert)斷言語句的使用方法斷言語句的應(yīng)用實(shí)例ModelSim中的斷言警告級別的設(shè)置斷言語句(Assert)斷言語句(Assert)語句可以在仿真的過程中,檢查一個條件并報(bào)告信息。根據(jù)所選擇的嚴(yán)重級別和仿真工具的設(shè)置,在ASSERT語句報(bào)告了信息后,繼續(xù)執(zhí)行(警告級別WARNING)或者停止(錯誤ERROR和致命錯誤FAILURE
51、)。默認(rèn)的嚴(yán)重級別為ERROR。斷言語句的使用方法下面的例子是斷言語句在仿真時的應(yīng)用,它判斷了仿真的時間,如果當(dāng)前時間為1000ns,則仿真完成,使用ERROR嚴(yán)重級別終止仿真過程。PROCESSBEGINASSERT(NOW=1000ns)REPORT “Simulation completed successfully”SEVERITY ERROR;END PROCESS;斷言語句判斷條件的判斷結(jié)果為FALSE,則執(zhí)行后面的報(bào)告及嚴(yán)重級語句,否則跳過這些錯誤報(bào)告語句并繼續(xù)執(zhí)行。當(dāng)(NOW=1000ns)不成立時,執(zhí)行這兩條語句斷言語句的使用方法可以使用ASSERT語句設(shè)定一個判斷條件,以便
52、對仿真的某個結(jié)果或值做出響應(yīng),例如下面的實(shí)例程序。PROCESS(q)BEGINASSERT(q/=“1001”)REPORT “The shifter gets the result!”SEVERITY ERROR;END PROCESS;如果信號q等于“1001”,則終止仿真,并輸出“The shifter gets the result!”。斷言語句的應(yīng)用實(shí)例下面以一個簡單的實(shí)例來講述使用斷言語句來響應(yīng)一個仿真的過程。【例1-1】4位加減計(jì)數(shù)器的仿真計(jì)數(shù)器的位數(shù)為4位帶有CLR清零端當(dāng)DIR信號為高電平時,計(jì)數(shù)器為加1計(jì)數(shù)器;低電平時為減1計(jì)數(shù)器;LIBRARY IEEE;USE IEE
53、E.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter IS PORT(CLK,CLR,DIR:IN STD_LOGIC; CT_RESULT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END counter;ARCHITECTURE Behav OF counter ISSIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK,CLR) BEGIN IF(CLR=1) THEN -清零 TMP=0000; ELSIF(CLKEVEN
54、T AND CLK=1) THEN IF(DIR=1) THEN -當(dāng)DIR為高電平時,計(jì)數(shù)器為加1計(jì)數(shù)器 TMP=TMP+1; ELSE TMP=TMP-1; -當(dāng)DIR為低電平時,計(jì)數(shù)器為減1計(jì)數(shù)器 END IF; END IF; END PROCESS; CT_RESULTCLK, CLR=CLR, DIR=DIR, CT_RESULT=CT_RESULT ); CLK_GEN:PROCESS BEGIN CLK=1; WAIT FOR CLK_PERIOD/2; CLK=0; WAIT FOR CLK_PERIOD/2; END PROCESS; TB:PROCESS BEGIN CL
55、R=1; DIR=1; WAIT FOR 20 NS; CLR=0; WAIT FOR 280 NS; DIR=0; WAIT FOR 320 NS; WAIT;-WAIT FOREVER END PROCESS;4位加減計(jì)數(shù)器Testbench例化待測試的實(shí)體,并連接激勵信號時鐘產(chǎn)生進(jìn)程激勵信號產(chǎn)生進(jìn)程 PROCESS(CT_RESULT) BEGIN ASSERT(CT_RESULT/=1001) REPORT The conuter gets to nine! SEVERITY ERROR; END PROCESS; END BEHAV; 4位加減計(jì)數(shù)器TestbenchASSERT語句
56、分析:這個例子的斷言語句用于判斷計(jì)數(shù)的結(jié)果是否等于“1001”,條件判斷使用了“不等于(/=)”邏輯,如果判斷條件為FALSE,即計(jì)數(shù)值等于“1001”時,報(bào)告錯誤。仿真測試結(jié)果# * Error: The conuter gets to nine!# Time: 840 ns Iteration: 3 Instance: /counter_tb在ModelSim的輸出窗口中輸出以下信息:在ModelSim的輸出波形如圖:紅色標(biāo)記處就是斷言語句輸出錯誤信息的時刻ModelSim中的斷言警告級別ModelSim中設(shè)定了以下斷言警告級別(從高到低) Fatal、Failure、Error、Warn
57、ing、Note/Info在ModelSim中,對于哪個級別及以上的警告會讓仿真停止呢? 答案:ModelSim里面有相關(guān)的選項(xiàng)設(shè)置,默認(rèn)情況下為“Failure”級別及以上(即Failure 和Fatal )。因此,在默認(rèn)設(shè)置下,我們的例程中Error級別的警告不會中斷仿真的進(jìn)程。ModelSim中的斷言警告級別若需要更改ModelSim斷言的設(shè)置,請執(zhí)行以下步驟。根據(jù)需要設(shè)置Testbench設(shè)計(jì)進(jìn)階高級Testbench概述文件的讀寫VCD數(shù)據(jù)庫文件斷言語句(Assert)高級Testbench實(shí)例高級Testbench實(shí)例高級Testbench實(shí)例下面的仿真實(shí)例將綜合運(yùn)用前文所述的AS
58、SERT斷言語句和文件操作TEXTIO程序包。待驗(yàn)證的實(shí)體是一個8位加法器,仿真用的Testbench文件從文本文件中讀取激勵信號矢量,并將仿真的結(jié)果和文本文件中的期望值進(jìn)行比較,自動完成驗(yàn)證過程。激勵信號8位加法器輸入輸出輸出值和期望值比較測試矢量文件測試結(jié)果(Yes/No)期望值8位加法器實(shí)體- Single-bit adder-library IEEE;use IEEE.std_logic_1164.all;entity adder is port (a : in std_logic; b : in std_logic; cin : in std_logic; sum : out std
59、_logic; cout : out std_logic);end adder;- description of adder using concurrent signal assignmentsarchitecture rtl of adder isbegin sum = (a xor b) xor cin; cout = (a and b) or (cin and a) or (cin and b);end rtl;- N-bit adder- The width of the adder is determined by generic N-library IEEE;use IEEE.s
60、td_logic_1164.all;entity adderN is generic(N : integer := 16); port (a : in std_logic_vector(N downto 1); b : in std_logic_vector(N downto 1); cin : in std_logic; sum : out std_logic_vector(N downto 1); cout : out std_logic);end adderN;8位加法器實(shí)體(續(xù))- structural implementation of the N-bit adderarchitec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年標(biāo)準(zhǔn)消防中介服務(wù)協(xié)議模板版B版
- 2024-2030年中國孕婦營養(yǎng)保健品行業(yè)營銷模式及發(fā)展競爭力分析報(bào)告
- 2024-2030年中國大型購物中心行業(yè)管理經(jīng)營模式及投資規(guī)劃分析報(bào)告
- 2024-2030年中國單寧酸行業(yè)產(chǎn)銷需求與投資效益預(yù)測報(bào)告
- 2024年版押金協(xié)議附加條款一
- 湄洲灣職業(yè)技術(shù)學(xué)院《輕化工程AUTOCAD》2023-2024學(xué)年第一學(xué)期期末試卷
- 眉山職業(yè)技術(shù)學(xué)院《商業(yè)銀行模擬實(shí)訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 茅臺學(xué)院《知識產(chǎn)權(quán)法導(dǎo)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版租賃合同租金調(diào)整機(jī)制分析
- 茅臺學(xué)院《黑白攝影》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年全省職業(yè)院校技能大賽(中職教師組)裝備制造類智能制造設(shè)備技術(shù)賽項(xiàng)競賽樣題1
- 2023.05.06-廣東省建筑施工安全生產(chǎn)隱患識別圖集(高處作業(yè)吊籃工程部分)
- 2024版公共衛(wèi)生間管理服務(wù)承包協(xié)議
- 部編人教版六年級語文上冊習(xí)作《有你真好》精美課件
- 齊魯工業(yè)大學(xué)《中國近現(xiàn)代史綱要》2019-2020學(xué)年期末試卷
- 工程測量基礎(chǔ)智慧樹知到期末考試答案章節(jié)答案2024年青島濱海學(xué)院
- 中職學(xué)前教育簡筆畫教案
- 名人-毛澤東-人物介紹
- 龍門吊操作安全責(zé)任書
- 如果歷史是一群喵課件
- 保密教育基本知識考試題庫(含答案)
評論
0/150
提交評論