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