VHDL的testbench的編寫(轉)

大多數硬件設計人員對verilog的testbench比較熟悉,那是由於verilog被設計出來的目的就是爲了用於測試使用,也正是由於這樣verilog的語法規則才被設計得更像C語言,而verilog發展到後來卻由於它更接近C語言的語法規則,設計起來更加方便,不像VHDL那也死板嚴密,因此verilog又漸漸受到硬件設計者們的青睞。但其實VHDL在最開始也是具備測試能力的,並且它的語法嚴密,但咱們一樣能夠用它來編寫咱們的測試文件。算法

 

下面以一個8bit計數器爲例子給出個簡單的testbench模板及註釋:函數

fc9bbf98-0924-4adc-9dd9-b1cbda6bdb3f.jpg

85a456fb-717a-41ae-b3ac-8b51e619ecd1.jpg

 

經過編寫testbench來仿真和經過拖波形來仿真,最大的好處就是,當測試數據無比龐大時,能夠簡易得經過testbench中的算法來實現,而另外一個更爲重要的方面就是,能夠經過testbench對數據文件進行讀寫操做,從而簡化咱們的仿真工做。測試

 

首先介紹下時間控制語句——wait:(其實wait語句是經過控制仿真的兩種狀態——執行和掛起,來控制時間的)spa

 

1.wait——無線等待;語法【wait;】,相似於Verilog中的¥Stop設計

 

2.wait on——敏感信號量變化;語法【wait on 信號;】,表示當信號發生變化的時候,仿真開始繼續執行,從而結束掛起狀態3d

 

3.wait until——條件知足;語法【wait
until 表達式】,表達式爲一個布爾表達式,表示當表達式爲「真」時,仿真繼續執行,結束掛起狀態指針

 

4.wait for——時間控制;語法【wait
for 時間表達式】,例:【wait for 30ns;】調試

 

VHDL也提供了文件I/O的操做,如下簡單介紹在咱們大部分狀況下如何經過VHDL來進行文件操做。字符串

ddbf463b-f5f8-4508-a448-ada002566dfb.jpg

 

file類型:文件句柄,用於定義文件。語法1【file 文件變量名:text is 讀取或者寫入類型 「文件名」;】text——文件類型爲文本類型,讀取類型爲in,寫入類型爲out;語法2【file 文件變量名:text;】只是定義了文件變量名,並無給賦予初值。同步

 

用第二種方式定義文件變量則須要用到函數file_open();語法【file_open(文件狀態指示,文件變量,「文件名」,讀寫狀態);】如上圖實例。

 

LINE類型:以下圖,爲std庫中TEXTIO文件中的定義

71e0da1f-d6b8-4af3-80e7-7434b10d24c4.jpg

 

LINE 爲存取類型的變量,它表示該變量是指向字符串的指針,它是TEXTIO 中全部操做的基本單元。讀文件時,先按行(LINE)讀出一行數據,再對LINE 操做來讀取各類數據類型的數據;寫文件時, 先將各類的數據類型組合成LINE,再將LINE 寫入文件。在用戶使用時, 必須注意只有變量才能夠是存取類型, 而信號則不能是存取類型。

 

TEXTIO還定義了一些基本的文件操做過程:

 

【READLINE(文件變量,行變量);】從指定的文件中讀取一行。

 

【READ(行變量,數據變量);】從一行中讀取一個數據。

 

【WRITELINE(文件變量,行變量);】將行變量中數據寫入到指定文件。

 

【WRITE(行變量,數據變量);】將數據寫入到一行中。

 

【WRITE(行變量,數據變量,起始位置,字符數);】比上個過程多了起始位置和字符數的指定。

62ab076d-331c-4a4f-8781-69fb80734b3d.jpg

 

上圖事例爲循環從數據文件中讀取出數據,賦值給信號量。

682c9572-573e-45ac-930a-4e607975d2f1.jpg

 

上圖事例爲了說明行變量與各個變量之間的轉換,行變量可與任何變量類型進行轉換,而且原樣輸出到指定文件中。

 

另外再推薦個語句:ASSERT——斷言語句。它和VC中的_TRACE語句同樣,在調試程序中很是有用很是方便。

 

assert是一個調試仿真時的專用語法,他能夠判斷一個boolean變量,若是該變量爲假就輸出一個用戶指定的信息到終端(控制檯),用戶能夠附帶輸出信息的嚴格等級,從低到高依次是:note,warning,error,failure,可讓用戶區分信息的類型。一樣assert語句也是不能被綜合的。

 

assert能夠是同步語句(在process外),此時assert後面的任何變量變化都會引發assert語句判斷一次。


assert還能夠是順序語句,此時assert存在於process中。

相關文章
相關標籤/搜索