日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ


文章目錄

  1. 前言

  2. 測(cè)試模塊設(shè)計(jì)

  3. 仿真全過程
    模塊包含
    定義頂層模塊
    元件例化
    測(cè)試激勵(lì)的書寫
    波形仿真
    系統(tǒng)任務(wù)仿真

  4. 總結(jié)

01. 前言

在FPGA 高手養(yǎng)成記-Test bench文件結(jié)構(gòu)一覽無余 只是簡單的例舉了常用的 testbench 寫法,在工程應(yīng)用中基本能夠滿足我們需求, 至于其他更為復(fù)雜的 testbench 寫法, 大家可參考其他書籍或資料。

testbench沒有像RTL代碼設(shè)計(jì)那樣嚴(yán)謹(jǐn),我們可以在符合語法規(guī)則的前提下,隨意編寫我們的測(cè)試文件,有些在RTL代碼中不可綜合的語句,我們可以在testbench中實(shí)現(xiàn)。大體流程如下:

02. 測(cè)試模塊設(shè)計(jì)

要測(cè)試我們的cpu需要ROM和RAM模塊,這就需要我們先做好這兩個(gè)模塊

這里定義了一個(gè) 1024 x 8 的RAM

再定義一個(gè)8192  x 8 的ROM

ROM和RAM都還沒有裝入數(shù)據(jù),等會(huì)我們會(huì)調(diào)用函數(shù)給他們裝數(shù)據(jù),接下來是地址譯碼器,來控制ROM和RAM的打開與關(guān)閉。

各模塊建立好之后我們就開始仿真了。

03.仿真

這次教學(xué)我們用的是modelsim SE 10.0 版本進(jìn)行教學(xué),直接先在quartus II中建一個(gè).v文件將其保存在原來的工程文件目錄中,并命名為cpu_top.v,直接在這里寫測(cè)試代碼

下面大家可以來完成cpu 的仿真過程了

3.1,模塊包含

首先,我們需要將我們剛寫好的那幾個(gè)模塊包含進(jìn)去,即CPU模塊,ROM模塊,RAM模塊,地址譯碼器模塊,并寫好時(shí)間測(cè)量度,見下圖

3.2,定義頂層模塊

由于我們的設(shè)計(jì)只有兩個(gè)輸入,即時(shí)鐘模塊和復(fù)位模塊,凡是輸入信號(hào)在testbench中統(tǒng)一定義成reg型變量,凡是輸出或者雙向輸入輸出信號(hào)統(tǒng)一定義成wire型變量,我們的設(shè)計(jì)只有輸入沒有輸出,故只定義輸入和連線即可

下圖便是我們要組成的測(cè)試頂層模塊圖,我們定義的wire型變量,實(shí)際就是我們頂層模塊中,模塊模塊與模塊間的連線。而這些連線就是我們cpu的輸出,這樣我們就可以用我們的測(cè)試模塊來測(cè)試我們的cpu是否能正確工作

3.3. 元件例化

就是將各個(gè)模塊連接起來即可,這里就不做太多的說明了,因?yàn)橐郧岸紝戇^很多次了

3.4.測(cè)試激勵(lì)的書寫

先寫好時(shí)鐘產(chǎn)生模塊和復(fù)位模塊.并將復(fù)位模塊用task任務(wù)封裝,這樣我們?cè)跍y(cè)試過程中就可以隨時(shí)調(diào)用復(fù)位任務(wù)進(jìn)行復(fù)位

時(shí)鐘為50Mhz,復(fù)位時(shí)間為20ns

然后,我們?cè)儆胻ask封裝我們需要的模塊,我們來想一下,上電后,CPU會(huì)從ROM中讀兩個(gè)時(shí)鐘周期的數(shù)據(jù)是吧,但是我們的ROM現(xiàn)在還是空的,所以我們需要一個(gè)任務(wù)是往ROM中裝入程序,給ROM中裝數(shù)據(jù)我們可以用系統(tǒng)函數(shù)$readmemb,即打開一個(gè)文件,并將其中的數(shù)據(jù)送到我們之前定義的ROM中去

而test1.pro文件是需要我們自己定義的,我們可以在quartusII中再新建一個(gè).v文件,在里面寫上我們自己定義的程序,并將其保存為.pro文件即可,至于寫什么程序,是我們隨便定義的.

裝完ROM和RAM的數(shù)據(jù)之后,按說就可以了進(jìn)行波形仿真了,因?yàn)閏pu是自動(dòng)讀取數(shù)據(jù)的,下面我們先來做第一步仿真,我先把之后的代碼注釋掉,大家先看沒有被注釋掉的代碼

里面都是我們之前封裝好的函數(shù),剛開始進(jìn)行復(fù)位,然后進(jìn)行第一步測(cè)試,之后停止,將其保存之后,并默認(rèn)為用其打開,打開后見下圖

然后,file——new——library——ok即建好一個(gè)庫

點(diǎn)擊左上角的編譯按鈕,將我們之前寫好的所有.v文件全部都編譯進(jìn)去

看到transcript一欄顯示編譯成功后即可,若沒有transcript一欄,可以選擇菜單中的view——transcript即可,若顯示有紅色錯(cuò)誤,那就請(qǐng)讀者按照它的要求進(jìn)行修改代碼,這說明你的代碼有問題,一般是連接問題

3.5,波形仿真

編譯成功后,雙擊cpu_top就可以開始波形仿真了

進(jìn)入仿真頁面后,我們右擊cpu模塊將其加入至波形

大家先看兩個(gè)圖,等會(huì)結(jié)合這兩個(gè)圖給大家細(xì)細(xì)講解仿真過程

我們先來看第一個(gè)過程

上電后,cpu先從ROM中讀回兩個(gè)周期的數(shù)據(jù),是從ROM的0地址開始的,再對(duì)比我們之前定義好的ROM,數(shù)據(jù)讀取正確,讀回的數(shù)據(jù)的前三位是111,即指令碼JMP,后13位003c為地址碼,JMP指令是將讀回的數(shù)據(jù)作為新的地址碼來讀取相應(yīng)地址的數(shù)據(jù)。那么,下一步,cpu應(yīng)該是從ROM的003c地址處讀數(shù)據(jù)才對(duì),再看一下波形

對(duì)比波形后可知,cpu正好是從003c處讀取數(shù)據(jù),讀到的數(shù)據(jù)指令碼位111即JMP,地址碼位0006,再到ROM的0006地址處看

這次讀回的指令碼位101,即LDA,也就是說將后13位地址碼對(duì)應(yīng)的RAM中的數(shù)據(jù)讀回,送到累加器中,想一下,這時(shí)的RAM應(yīng)該是打開的,而且雙向輸入輸出口的數(shù)據(jù)總線上應(yīng)該是來自RAM的8位數(shù)據(jù),由于ROM0006地址處的地址碼為1800是13位的,而RAM的地址是9位的,因此實(shí)際上我們從RAM中讀回的數(shù)據(jù)是從RAM的0地址讀回的,即我們之前給RAM寫好的0000_0000,再看一下波形

正如我們所想的一樣,數(shù)據(jù)總線上是0000_0000,RAM是打開的,地址為1800

就這樣,讀者可以自己再試一下,看看我們的cpu是不是按照我們之前給他的程序運(yùn)行的,在這里我就不再給大家一一介紹了

雖然波形仿真很直觀,但是看久了就會(huì)令人眼花繚亂,尤其是數(shù)據(jù)很多的時(shí)候,我們只能看其中一部分,不能講所有數(shù)據(jù)看完整,這時(shí)候我們單單是用波形來仿真就遠(yuǎn)遠(yuǎn)不夠了,下面介紹用系統(tǒng)任務(wù)仿真的過程

3.6,系統(tǒng)任務(wù)仿真

再回到我們的代碼,注釋掉了一些代碼吧,我們把那些代碼給加上,以其中一個(gè)過程為例

假設(shè)讀回的指令碼位101,即LDA,如果我在fentch_8的高電平期間且在cpu輸出地址為奇數(shù)的時(shí)候記錄一下此時(shí)的時(shí)間、指令、地址、目的地址、數(shù)據(jù)的話就可以不用看波形,讓電腦來幫助我們來分析了,因此作如下處理

這里我延時(shí)60ns,是因?yàn)榈谝淮斡涗浀臅r(shí)候數(shù)據(jù)總線上還沒有數(shù)據(jù),只有延時(shí)一會(huì)才會(huì)有數(shù)據(jù),即上面那張波形圖右邊那根黃色的線處記錄一下數(shù)據(jù),并將其顯示。我們也可以加上一下標(biāo)注,來幫助我們觀察

這樣我們?cè)賮矸抡娴臅r(shí)候就不用看波形了,直接打開transcript一欄觀察記錄即可

這樣便可以為我們省下大量的仿真時(shí)間

04. 總結(jié)

這里提出以下幾點(diǎn)建議供大家參考:

  • 封裝有用且常用的 testbench, testbench 中可以使用 task 或 function 對(duì)代碼進(jìn)行封裝, 下次利用時(shí)靈活調(diào)用即可;

  • 如果待測(cè)試文件中存在雙向信號(hào)(inout)需要注意, 需要一個(gè) reg 變量來表示輸入, 一個(gè) wire 變量表示輸出;

  • 單個(gè) initial 語句不要太復(fù)雜,可分開寫成多個(gè) initial 語句, 便于閱讀和修改;

  • Testbench 說到底是依賴 PC 軟件平臺(tái), 必須與自身設(shè)計(jì)的硬件功能相搭配。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉