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