EDA技術和VHDL設計第8章-仿真測試平臺-PPT課件_第1頁
EDA技術和VHDL設計第8章-仿真測試平臺-PPT課件_第2頁
EDA技術和VHDL設計第8章-仿真測試平臺-PPT課件_第3頁
EDA技術和VHDL設計第8章-仿真測試平臺-PPT課件_第4頁
EDA技術和VHDL設計第8章-仿真測試平臺-PPT課件_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第8章 仿真測試平臺 8.1 VHDL仿真概述 8.2 幾種常見的Test Bench模型 8.3 ASSERT語句 8.1 VHDL仿真概述當一個設計完成后,需要對設計的正確性進行測試和驗證。前面的章節(jié)都是通過Quartus軟件自帶的圖形仿真工具進行仿真驗證的。但是,當需要測試的向量很多時,如果僅靠畫波形的手工方式,會相當耗費精力。實際上,VHDL作為硬件描述語言,既可以用于電路系統(tǒng)的設計,也可以用于電路系統(tǒng)的測試和驗證。這時就可以使用測試平臺(TB,Test Bench)來完成測試。TB其實就是一個與所設計的電路系統(tǒng)程序相對應的激勵程序,用來為設計提供激勵。當然,TB既可以采用VHDL語言

2、,也可以采用Verilog語言來實現。總地來說,VHDL Test Bench就是一段用于驗證設計功能正確性的VHDL代碼。一般來說,仿真器通常需要兩個輸入:設計塊(即DUT,Design Unit Test)和激勵塊(即TB,Test Bench)。TB能夠完成以下幾點目標:(1) 在測試中實例化DUT。(2) 為DUT產生激勵。(3) 產生參考輸出,并與DUT的輸出進行比較。(4) 自動提供測試通過或失敗的提示。下面先以一個簡單的實例來感性認識TB的使用。設計一個具有異步清零功能的十進制計數器,能夠完成09的計數,并能夠產生進位信號。第6章中曾采用狀態(tài)機的方式實現該例,本章采用IF語句實現

3、,具體代碼見例8-1?!纠?-1】使用VHDL語言編寫TB,由于測試設計只用來進行仿真,不受綜合中僅能使用RTL語言子集這樣的語法約束。因此它可以使用所有的行為級結構,即所有基本語法都是適用的(包括一些不能被綜合的語法)。例8-1的十進制計數器所對應的TB見例8-2?!纠?-2】從例8-2可總結出TB的基本結構:包含一個不需要定義輸入/輸出端口的空實體和一個帶有被測試元件聲明、例化、激勵產生的結構體。例8-2的L5L6是TB的實體定義,實體名為cnt_tb,它與外界沒有任何接口,只和DUT通過信號進行連接,不需要定義輸入/輸出端口;L10L15是被測試元件DUT的聲明;L17L20聲明了與DU

4、T相連接的信號;L23是元件例化;L24確定了時鐘信號clk的周期為50 ns,每隔25 ns值取反,其初始值為“1”(由L17定義);L25L27確定了信號reset的取值,初始值為“0”,240 ns后取值為“1”,360ns后取值為“0”。DUT和TB的結構關系如圖8-1所示,它們之間通過內部信號進行交互。圖8-1 DUT和Test Bench結構示意 從本章開始均采用不再自帶圖形仿真工具的Quartus11.1版本,直接調用Modelsim完成仿真的形式。本例需要將設計文件cnt.vhd和測試平臺文件cnt_tb.vhd都保存于同一文件夾、同一工程內。設置設計文件cnt.vhd為頂層實

5、體,然后選擇菜單AssignmentsSettings,打開如圖8-2所示對話框。在左邊的Category欄中選擇EDA Tool SettingsSimulation,即可打開仿真設置對話框。在其中選擇Compile test bench,然后單擊Test Benches按鈕,打開圖8-3所示對話框。單擊New,添加測試文件,彈出圖8-4所示新建測試平臺設置對話框。在Test bench name欄中輸入測試平臺實體的名稱,即cnt_tb,則Top level module in test bench欄也會出現相同的名稱。在Use test bench to perform VHDL tim

6、ing simulation前的方框內打勾,則Design instance name in test bench欄變亮,在其中填入例化名u1。 Simulation period欄可根據需要選擇是根據激勵變化確定仿真時間還是自定義仿真時間,本例選擇Run simulation until all vector stimuli are used。在File name欄右側單擊“”按鈕,添加測試平臺文件cnt_tb.vhd。設置完成后,單擊OK,會發(fā)現圖8-3所示的窗口已經包含相關設置信息,如圖8-5所示,單擊OK返回。圖8-2 仿真設置對話框 圖8-3 添加測試文件 圖8-4 新建測試平臺設置

7、 圖8-5 已添加測試平臺 將頂層設計文件cnt.vhd進行全程編譯,無誤后選擇菜單ToolsRun Simulation Tool,即可調用Modelsim進行RTL仿真或門級仿真。例8-1的十進制計數器仿真結果見圖8-6和圖8-7??梢钥吹剑攔eset=“1”時,輸出立即清零。計數器能夠實現09的計數,并產生進位信號cout。相關實驗步驟或一些細節(jié)可參見EDA技術與VHDL設計實驗指導一書的5.3節(jié)。該例給讀者展示了一個簡單使用TB的示范,由于例子比較簡單,并不能突出當測試向量巨大時TB的優(yōu)點。圖8-6 例8-1十進制計數器仿真結果(1) 圖8-7 例8-1十進制計數器仿真結果(2) 8

8、.2 幾種常見的Test Bench模型TB產生激勵的方式,主要有以下三種:(1) 激勵直接在TB中產生。(2) 由其他硬件或軟件模型產生激勵。(3) 從單獨的文件中讀入激勵。很明顯,例8-1所采用的形式是激勵直接在TB中產生,該方式導致TB的可重用性比較差,只能針對該DUT。對于大型設計,目前比較流行的形式是利用Matlab產生激勵文件,由TB讀入該激勵文件并將相應的激勵信息傳遞給DUT,DUT產生的輸出可以以文件的形式進行存儲,或直接與Matlab產生的理想輸出進行比較。下面以一個移位寄存器的例子來講解幾種不同形式的TB模型。8.2.1 簡單Test Bench1移位寄存器實例簡單的TB模

9、型中只有相應的DUT被例化,激勵在TB中直接產生,其模型結構見圖8-8。例8-2即為一個簡單的TB模型。例8-3是移位寄存器DUT的VHDL代碼,例8-4是其對應的簡單TB。圖8-8 簡單TB模型 【例8-3】【例8-4】例8-4的仿真結果見圖8-9和圖8-10。從圖8-9中可以明顯觀察到din變化的時間;圖8-10顯示在時鐘clk的上升沿時,數據依次左移,最右位補“1”的過程。圖8-10 例8-4TB移位寄存器仿真結果(2) 圖8-9 例8-4TB移位寄存器仿真結果(1)2直接產生激勵信號的各種方式激勵信號一般可分為兩類:周期性的激勵信號和時序變化的激勵信號。周期性的激勵信號最典型的代表就是

10、時鐘信號,而時序變化的激勵信號包括復位信號reset、清零信號clear以及其他一些輸入信號等。(1) 周期性激勵信號的產生。時鐘信號是最典型的周期性信號,既可以使用并行信號賦值語句來產生,也可以在進程中產生;既可以產生占空比是50%的時鐘信號,也可以產生占空比任意的時鐘信號。例8-5采用并行信號賦值語句中的條件信號賦值語句建立了一個占空比是75%的時鐘信號clk?!纠?-5】CONSTANT period : TIME := 50 ns;clk = 0 AFTER 3*period/4 WHEN clk = 1 ELSE 1 AFTER period/4 WHEN clk = 0 ELSE

11、0;將例8-5改為在進程中實現,見例8-6?!纠?-6】CONSTANT period : TIME := 50 ns;PROCESSBEGINclk = 1;WAIT FOR 3*period/4;clk = 0;WAIT FOR period/4;END PROCESS;仍然以移位寄存器為例,二者仿真結果相同,見圖8-11,所不同的是時鐘信號clk的占空比由50%變?yōu)?5%。需要注意的是,如果采用例8-4所示并行信號賦值語句,則時鐘信號的初值必須明確聲明為“1”或者“0”。例8-7顯示了一個周期性的信號,其周期為70 ns,波形見圖8-12。一般來說,為實現信號的周期性變化,一般采用WAI

12、T語句。圖8-11 時鐘信號占空比為75%【例8-7】PROCESSBEGINs = 0 , 1 AFTER 10ns, 0 AFTER 20ns, 1 AFTER 40ns, 0 AFTER 45ns;WAIT FOR 70ns;END PROCESS;(2) 時序變化的激勵信號的產生。時序變化的激勵信號也可以通過并行賦值語句和進程兩種方式產生。例8-8采用并行賦值語句顯示了一個復位信號reset的變化,仿真開始時,其值為“0”;60ns后,其值變?yōu)椤?”;再經過30ns后,其值變?yōu)椤?”。例8-9在進程中定義復位信號reset,采用WAIT語句來實現。二者仿真結果完全一致,如圖8-13所示

13、。需要注意的是,例8-9中最后一句WAIT語句的作用,如果不加該條語句,仿真結果又會如何變化,請讀者自行分析?!纠?-8】 reset = 0, 1 AFTER 60ns, 0 AFTER 90ns; 【例8-9】PROCESSBEGINreset = 0 ;WAIT FOR 60ns;reset = 1;WAIT FOR 30ns;reset = 0;WAIT; -一直等待END PROCESS;圖8-13 例8-8和例8-9復位信號reset仿真結果 例8-10顯示了使用預定義屬性DELAYED來產生一個延時一定時間的激勵信號。信號s較信號reset延時50 ns,仿真波形見圖8-14?!?/p>

14、例8-10】s = resetDELAYED(50ns);還有一類比較特殊的激勵信號,稱為動態(tài)激勵信號,即輸入的激勵信號與DUT的行為相關,受其影響或由其決定。例8-11仍然以例8-3中的移位寄存器為DUT,置數信號load由移位結果控制,當移位結果全1時,load=“1”允許置數。 圖8-14 使用預定義屬性產生延時一定時間的激勵信號 【例8-11】例8-11的仿真結果見圖8-15??梢钥吹?,當q移位為“11111111”時,延時60 ns后,load由“0”變?yōu)椤?”,允許置數,重新將“00110011”置入;q置數成功后,再次觸發(fā)進程,此時由于q不等于“11111111”,則執(zhí)行L32,

15、延時60 ns后,load由“1”變?yōu)椤?”。圖8-15 例8-11TB移位寄存器仿真結果 8.2.2 帶有獨立源的Test Bench將產生激勵的模塊作為一個文件,與DUT一起,在TB中進行例化,就稱為帶有獨立源的TB,其結構模型見圖8-16。該模型比較適合于具有復雜輸入、簡單輸出的設計;激勵信號由獨立源Source產生。圖8-16 帶有獨立源的TB模型 仍然以例8-3所設計的移位寄存器為DUT,在此,再設計一個計數器,其計數輸出作為移位寄存器的置數初值,即移位寄存器的激勵由計數器產生,結構模型如圖8-17所示。當置數信號load=“1”時,計數器count停止計數,將當前計數結果作為激勵信

16、號傳遞給移位寄存器;同時,由于load=“1”,移位寄存器允許置數,并將在下一個時鐘上升沿到來時開始移位操作。計數器的VHDL代碼見例8-12,TB見例8-13。圖8-17 由計數器產生激勵信號 【例8-12】【例8-13】例8-13的仿真結果見圖8-18和圖8-19。其中,圖8-19是圖8-18當load第二次由“0”變“1”時的放大??梢钥吹?,當第一次load=“1”后,計數器進行一次清零,重新開始計數,直到第二次load=“1”時,計數結果為“00001111”,將其傳遞給DUT作為置數初值,然后在時鐘信號clk的上升沿進行移位。需要注意的是,如果采用帶有獨立源的TB模型,則在Quart

17、us軟件中設置TB時,需要添加產生激勵的源文件,如圖8-20所示。圖8-19 例8-13TB仿真結果(2) 圖8-18 例8-13TB仿真結果(1) 圖8-20 添加產生激勵的源文件 當然,如果激勵的變化與電路的行為相關,即8.2.1節(jié)中提到的動態(tài)激勵信號,則帶有獨立源Source的動態(tài)激勵模型框圖如圖8-21所示。如果輸出端較為復雜,也需要由單獨的模塊(輸出模塊Sink)產生或者變化,則模型框圖可變?yōu)槿鐖D8-22所示,該模型也可以由電路影響激勵的變化。圖8-21 電路響應影響激勵變化 圖8-22 帶有獨立源和輸出模塊的TB模型 8.2.3 使用TEXTIO的Test Bench對于大型設計項

18、目,輸入、輸出比較復雜,單靠輸入波形或直接產生激勵的形式難以驗證結果的正確性。這時,采用文本文件存儲激勵的形式更加方便,能夠有效地提高效率。TEXTIO是VHDL標準庫STD中的一個程序包,它提供了VHDL與磁盤文件直接訪問的橋梁,可以利用它來讀取存儲在磁盤中的文件或者將仿真數據寫入磁盤文件并存儲。TEXTIO的使用是通過TB來進行的,即可以在TB中調用TEXTIO來進行仿真。常用的做法是,將所有的輸入激勵保存在文件中,仿真時,可以直接讀取文件中的激勵數據產生相應的波形或是將仿真結果存儲到文件中;也可以將其他軟件計算出來的結果保存在另一個文件中,自動將仿真結果與預先計算的結果進行比較,給出一定

19、的信息來確定結果的正確與否。使用TEXTIO的TB模型見圖8-23。圖8-23 使用TEXTIO的TB模型 1TEXTIO概述TEXTIO是VHDL標準庫STD中的一個程序包;當然,Synopsys公司加入IEEE庫中的std_logic_textio程序包也定義了相關內容。所不同的是,定義在STD庫中的TEXTIO程序包針對INTEGER、BIT、BIT_VECTOR、STRING、TIME等定義在VHDL標準程序包STANDARD中的預定義數據類型;而std_logic_textio程序包針對定義在IEEE庫中的STD_ULOGIC、STD_LOGIC以及它們的矢量類型的預定義數據類型。T

20、EXTIO提供了用于訪問文件的過程,具有重載性,即過程名相同,但參數類型或個數不同,詳細定義請參見附錄A。 PROCEDURE READLINE(指定文件,行變量); 表示從指定文件讀取一行數據到行變量中。 PROCEDURE READ(行變量,數據變量,GOOD); 表示從指定行讀取相應數據類型的數據。GOOD為可選項,返回BOOLEAN類型,用于表明過程是否正確執(zhí)行,正確則返回TURE。 PROCEDURE WRITELINE(指定文件,行變量); 表示向指定文件寫入行變量所包含的數據。 PROCEDURE WRITE(行變量,數據變量,寫入方式,位寬); 表示將數據寫入行變量;寫入方式表

21、示寫在行變量的左邊還是右邊,其值只能是left或者right;位寬表示寫入數據時所占的寬度。在TEXTIO中定義了幾種數據類型,包括:數據類型LINE、TEXT、SIDE和子類型WIDTH。(1) 數據類型LINE。其源代碼定義如下:TYPE LINE IS ACCESS STRING;定義LINE 為存取類型的變量,它表示該變量是指向字符串的指針,是TEXTIO 中所有操作的基本單元。讀文件時,先按行(LINE)讀出一行數據,再對LINE 操作來讀取各種不同數據類型的數據;寫文件時,先將各種數據類型組合成LINE,再將LINE 寫入文件。需要注意的是,只有變量才可以是存取類型,而信號則不能是

22、存取類型。例8-14聲明了兩個變量line_in和line_out,其類型都是LINE。【例8-14】VARIABLE line_in : LINE;VARIABLE line_out : LINE;(2) 數據類型TEXT。其源代碼定義如下:TYPE TEXT IS FILE OF STRING;定義TEXT是文件類型,長度可變。例8-15和例8-16都定義了兩個文件類型的變量file_input和file_output,用于訪問對應的文件datain.txt和dataout.txt。不同的是,例8-15采用的是VHDL87標準,而例8-16采用的是VHDL93標準,兩個標準在文件使用方面有

23、較大的差別,使用時應注意選擇相應的標準。【例8-15】 FILE file_input : TEXT IS IN “datain.txt”; FILE file_output : TEXT IS OUT “dataout.txt”;【例8-16】FILE file_input : TEXT OPEN READ_MODE IS “datain.txt”;FILE file_output : TEXT OPEN WRITE_MODE IS dataout.txt;(3) 數據類型SIDE。其源代碼定義如下:TYPE SIDE IS (right, left);定義了SIDE為一種枚舉類型,取值只有

24、right和left兩種,分別表示將數據從左和從右寫入行變量中。例8-17顯示了將output_data從左邊寫入LINE變量line_out,位寬為8?!纠?-17】WRITE(line_out,output_data,left,8);(4) 子類型WIDTH。其源代碼定義如下:SUBTYPE WIDTH IS NATURAL;數據類型WIDTH用于指定寫入LINE變量的位寬。2移位寄存器實例這里仍然以例8-3移位寄存器的例子,采用TEXTIO的方法來實現測試驗證,其原理框圖如圖8-24所示。文件datain.txt提供移位寄存器的置數初值din,在傳遞給DUT之前,進行數據類型的變化,由B

25、IT_VECTOR變化為符合DUT中聲明的數據類型STD_LOGIC_VECTOR。再按照時鐘節(jié)拍,將DUT的輸出數據寫入到輸出文件dataout.txt。當然,在寫入前,也需要進行數據類型的變換。圖8-24 使用TEXTIO的移位寄存器TB原理框圖 首先將存儲輸入激勵的datain.txt文件保存于移位寄存器工程同一文件夾下,datain.txt文件內有三個激勵輸入,分別是:“00001101”、“00000101”和“00001001”,見圖8-25。對于大型設計,更好的方式是采用C語言或者Matlab產生激勵。例8-18讀取datain.txt中的激勵,并將其傳遞給信號din,作為置數初

26、值。圖8-25 提供激勵的文件datain.txt 【例8-18】例8-18中L5聲明了STD庫中的TEXTIO程序包。L28L35確定了4次有效的置數信號(load=“1”)。進程p0從datain.txt讀出激勵,并傳遞給din,使用了斷言語句ASSERT,當文件讀完后,會出現警告信息。進程p1將DUT的輸出經過轉化后寫入文件dataout.txt。需要注意的是,L55聲明了文件類型變量file_out,可以訪問的對應保存輸出結果的文件是dataout.txt,這里必須要寫明文件路徑和文件名,且在工程同一文件夾內保存有空dataout.txt文件。例8-18的仿真結果如圖8-26和圖8-2

27、7所示??梢钥吹剑?0001101”、“00000101”、“00001001”分別被作為初值置入,然后在時鐘信號clk的上升沿開始進行移位操作。在1200 ns時,由于文件數據已經讀完,執(zhí)行斷言語句L47L49,在Modelsim的Transcript窗口顯示文件結束的警告信息,如圖8-28所示。例8-18也可打開IEEE庫中的std_logic_textio程序包,直接對數據類型STD_LOGIC進行操作,避免數據類型的轉換,請讀者自行完成相應的代碼和仿真測試。圖8-27 例8-18TB仿真結果(2) 圖8-26 例8-18TB仿真結果(1) 圖8-28 文件結束的警告信息 在工程保存目

28、錄下找到文件dataout.txt,打開文件即可觀察輸出結果,如圖8-29所示。如果改變datain.txt中的激勵數據,如將“00001101”改為“00000111”,則仿真結果也會發(fā)生改變,見圖8-30。輸出結果文件dataout.txt也會發(fā)生相應的改變,如圖8-31所示。圖8-29 文件dataout.txt仿真輸出結果 圖8-30 改變激勵后文件dataout.txt仿真輸出結果 圖8-31 改變激勵數據后的仿真結果 當然,對于大型的設計項目,自動化的測試結果驗證將更加高效,它減少了檢查設計正確性所需的時間,并將人為錯誤減少到最小??梢圆捎闷渌浖幊躺衫硐牖妮敵鼋Y果(又稱為“黃金向量”文件Golden Design),將其保存在一個文件中;然后,將仿真輸出結果自動與“黃金向量”文件中的數據進行比較。例8-19顯示了如何將仿真結果與保存在result.txt文件中的理想結果進行比較,并返回比較信息。如果比較數據不同,則會在Modelsi

溫馨提示

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

評論

0/150

提交評論