TestBench產生激勵的三種方式:git
比較流行的作法是使用matlab產生激勵文件,由testbench讀入該激勵文件並將激勵饋送到DUT,DUT產生的相應輸出以文件的形式存儲,由matlab讀取並與理想的響應做比較。算法
下面以一個簡單的同步加法器爲例,分析不一樣形式的testbench的寫法。post
簡單的testbench只適合於相對比較簡單的設計。如圖1-1所示,在testbench中只是簡單的實例化了一個DUT,激勵在testbench中產生。可見這種方式的testbench可重用性比較差。測試
圖1-1 簡單的testbenchspa
圖1-2 DUT VHDL代碼設計
簡單的testbench代碼如圖1-3所示。blog
圖1-3 簡單的testbench 代碼ip
仿真結果如圖1-4所示。get
圖1-4 仿真結果同步
將激勵源做爲一個文件在testbench中進行實例化,比較適合於具備複雜輸入和簡單輸出的設計。如圖2-1所示。
圖2-1 具備獨立激勵源的testbench
在本例中,DUT的激勵源爲一個計數器。相應的VHDL代碼以下:
圖2-2 激勵源代碼
編寫完成激勵源的VHDL碼後,還須要在testbench中進行實例化,方法與實例化DUT的方法一致。相應的testbench代碼以下:
圖2-3 具備獨立激勵源的testbench代碼
當設計的輸入輸出都比較複雜時,尤爲是在作複雜的算法仿真時,須要產生多種形式的激勵輸入,還要對仿真結果輸出作複雜的分析時,使用TextIO的testbench具備最高的效率。在使用TextIO的testbench中,爲DUT從輸入文件讀取激勵輸入,激勵信號通過DUT處理後寫入到輸出文件中。其原理如圖3-1所示。
圖3-1 使用TextIO的testbench原理框圖
在本例中,咱們將Matlab產生的兩個激勵輸入文件加載到testbench中,在輸入到DUT以前先進行類型轉換,而後按照時鐘節拍將數據一個一個的加載到DUT的輸入端口,再按照時鐘節拍從DUT輸出端口將數據寫入到輸出文件,固然在寫入輸入文件以前也要先進行類型轉換。如圖3-2所示。
圖3-2 針對本例的testbench原理框圖
Matlab產生加法器兩個輸入激勵的代碼以下,激勵輸入爲範圍在0~7之間的隨機數,最後保存到txt文件中供testbench讀取。
圖3-3 激勵產生m代碼
使用TextIO的testbench代碼以下:
仿真結果如圖3-5所示。
圖3-5 仿真結果
下面咱們對於如何在TestBench中使用TextIO作一個小結。
(1).首先須要聲明TextIO的包集
(2).而後在process中聲明輸入、輸出文件
(3).接着聲明讀寫文件的行變量
(4).再聲明用於保存行變量中值的數據變量
(5).最後進行文件的讀寫,在讀文件以前須要判斷文件是否已經被讀到末尾。讀文件時,先從文件中按行讀出一行數據,再將行中的數據讀到數據變量中。寫文件時,先將數據變量組合成一行,再將行變量中的數據寫入文件。須要注意的是隻有variable型纔是文件存取類型,不能使用signal型。
TextIO包集中定義了一些經常使用的文件操做過程:
readline(file_var, line_var);
--用於從文件file_var中讀取一行數據保存到line_var中
read(line_var, data_var);
--用於從line_var中讀取數據保存到data_var中
writeline(file_var, line_var);
--用於將line_var寫入到file_var中
write(line_var, data_var);
--用於將data_var寫入到line_var中
endfile(file_var)
--判斷file_var是否已經到文件末尾
[1] TKT-1210 Digital design Ⅱ,Lect5 VHDL Test Bench