零基礎(chǔ)學(xué)FPGA(十五)Testbenth 很重要,前仿真全過程筆記(上篇)
1. 首先,我們需要將我們剛寫好的那幾個(gè)模塊包含進(jìn)去,即CPU模塊,ROM模塊,RAM模塊,地址譯碼器模塊,并寫好時(shí)間測量度,見下圖
本文引用地址:http://m.butianyuan.cn/article/270154.htm
2.定義頂層模塊
由于我們的設(shè)計(jì)只有兩個(gè)輸入,即時(shí)鐘模塊和復(fù)位模塊,凡是輸入信號在testbench中通一定義成reg型變量,凡是輸出或者雙向輸入輸出信號通一定義成wire型變量,我們的設(shè)計(jì)只有輸入沒有輸出,故只定義輸入和連線即可
下圖便是我們要組成的測試頂層模塊圖,我們定義的wire型變量,實(shí)際就是我們頂層模塊中,模塊模塊與模塊間的連線。而這些連線就是我們cpu的輸出,這樣我們就可以用我們的測試模塊來測試我們的cpu是否能正確工作
3. 元件例化
就是將各個(gè)模塊連接起來即可,這里就不做太多的說明了,因?yàn)橐郧岸紝戇^很多次了
4.測試激勵(lì)的書寫
小墨同學(xué)習(xí)慣上上來先寫好時(shí)鐘產(chǎn)生模塊和復(fù)位模塊.并將復(fù)位模塊用task任務(wù)封裝,這樣我們在測試過程中就可以隨時(shí)調(diào)用復(fù)位任務(wù)進(jìn)行復(fù)位
時(shí)鐘為50Mhz,復(fù)位時(shí)間為20ns
然后,我們再用task封裝我們需要的模塊,我們來想一下,上電后,CPU會從ROM中讀兩個(gè)時(shí)鐘周期的數(shù)據(jù)是吧,但是我們的ROM現(xiàn)在還是空的,所以我們需要一個(gè)任務(wù)是往ROM中裝入程序,給ROM中裝數(shù)據(jù)我們可以用系統(tǒng)函數(shù)$readmemb,即打開一個(gè)文件,并將其中的數(shù)據(jù)送到我們之前定義的ROM中去
而test1.pro文件時(shí)需要我們自己定義的,我們可以在quartusII中再新建一個(gè).v文件,在里面寫上我們自己定義的程序,并將其保存為.pro文件即可,至于寫什么程序,是我們隨便定義的,大家可以參考我之前在上一篇文章中上傳的程序中,有一個(gè)test1.pro文件,打開之后可以看到是一些16位的數(shù)字碼,這些碼就是我們ROM的地址,從第一行開始,每8位數(shù)據(jù)位一個(gè)地址,注意我們每個(gè)地址的高三位是用下劃線隔開的,這表明前三位是指令碼,這三位會被狀態(tài)機(jī)進(jìn)行譯碼,控制CPU執(zhí)行相應(yīng)的操作
裝完ROM和RAM的數(shù)據(jù)之后,按說就可以了進(jìn)行波形仿真了,因?yàn)閏pu是自動讀取數(shù)據(jù)的,下面我們先來做第一步仿真,我先把之后的代碼注釋掉,大家先看沒有被注釋掉的代碼
里面都是我們之前封裝好的函數(shù),剛開始進(jìn)行復(fù)位,然后進(jìn)行第一步測試,之后停止
fpga相關(guān)文章:fpga是什么
評論