大多數(shù)硬件設(shè)計人員對verilog的testbench比較熟悉,那是因為verilog被設(shè)計出來的目的就是為了用于測試使用,也正是因為這樣verilog的語法規(guī)則才被設(shè)計得更像C語言,而verilog發(fā)展到后來卻因為它更接近C語言的語法規(guī)則,設(shè)計起來更加方便,不像VHDL那也死板嚴密,所以verilog又漸漸受到硬件設(shè)計者們的青睞。但其實VHDL在最開始也是具有測試能力的,而且它的語法嚴密,但我們同樣可以用它來編寫我們的測試文件。 下面以一個8bit計數(shù)器為例子給出個簡單的testbench模板及注釋:
通過編寫testbench來仿真和通過拖波形來仿真,最大的好處就是,當測試數(shù)據(jù)無比龐大時,可以簡易得通過testbench中的算法來實現(xiàn),而另一個更為重要的方面就是,可以通過testbench對數(shù)據(jù)文件進行讀寫操作,從而簡化我們的仿真工作。 首先介紹下時間控制語句——wait:(其實wait語句是通過控制仿真的兩種狀態(tài)——執(zhí)行和掛起,來控制時間的) 1.wait——無線等待;語法【wait;】,類似于Verilog中的¥Stop 2.wait on——敏感信號量變化;語法【wait on 信號;】,表示當信號發(fā)生變化的時候,仿真開始繼續(xù)執(zhí)行,從而結(jié)束掛起狀態(tài) 3.wait until——條件滿足;語法【wait until 表達式】,表達式為一個布爾表達式,表示當表達式為“真”時,仿真繼續(xù)執(zhí)行,結(jié)束掛起狀態(tài) 4.wait for——時間控制;語法【wait for 時間表達式】,例:【wait for 30ns;】 VHDL也提供了文件I/O的操作,以下簡單介紹在我們大部分情況下如何通過VHDL來進行文件操作。
file類型:文件句柄,用于定義文件。語法1【file 文件變量名:text is 讀取或者寫入類型 “文件名”;】text——文件類型為文本類型,讀取類型為in,寫入類型為out;語法2【file 文件變量名:text;】只是定義了文件變量名,并沒有給賦予初值。 用第二種方式定義文件變量則需要用到函數(shù)file_open();語法【file_open(文件狀態(tài)指示,文件變量,“文件名”,讀寫狀態(tài));】如上圖實例。 LINE類型:如下圖,為std庫中TEXTIO文件中的定義
LINE 為存取類型的變量,它表示該變量是指向字符串的指針,它是TEXTIO 中所有操作的基本單元。讀文件時,先按行(LINE)讀出一行數(shù)據(jù),再對LINE 操作來讀取各種數(shù)據(jù)類型的數(shù)據(jù);寫文件時, 先將各種的數(shù)據(jù)類型組合成LINE,再將LINE 寫入文件。在用戶使用時, 必須注意只有變量才可以是存取類型, 而信號則不能是存取類型。 TEXTIO還定義了一些基本的文件操作過程: 【READLINE(文件變量,行變量);】從指定的文件中讀取一行。 【READ(行變量,數(shù)據(jù)變量);】從一行中讀取一個數(shù)據(jù)。 【W(wǎng)RITELINE(文件變量,行變量);】將行變量中數(shù)據(jù)寫入到指定文件。 【W(wǎng)RITE(行變量,數(shù)據(jù)變量);】將數(shù)據(jù)寫入到一行中。 【W(wǎng)RITE(行變量,數(shù)據(jù)變量,起始位置,字符數(shù));】比上個過程多了起始位置和字符數(shù)的指定。 按 Ctrl+C 復(fù)制代碼 上圖事例為循環(huán)從數(shù)據(jù)文件中讀取出數(shù)據(jù),賦值給信號量。 按 Ctrl+C 復(fù)制代碼 上圖事例為了說明行變量與各個變量之間的轉(zhuǎn)換,行變量可與任何變量類型進行轉(zhuǎn)換,并且原樣輸出到指定文件中。 另外再推薦個語句:ASSERT——斷言語句。它和VC中的_TRACE語句一樣,在調(diào)試程序中非常有用非常方便。 assert是一個調(diào)試仿真時的專用語法,他可以判斷一個boolean變量,如果該變量為假就輸出一個用戶指定的信息到終端(控制臺),用戶可以附帶輸出信息的嚴格等級,從低到高依次是:note,warning,error,failure,可以讓用戶區(qū)分信息的類型。同樣assert語句也是不能被綜合的。 assert可以是同步語句(在process外),此時assert后面的任何變量變化都會引起assert語句判斷一次。 assert還可以是順序語句,此時assert存在于process中。 |
|
來自: zhangquanling > 《VHDL》