?? fpga驗(yàn)證.txt
字號(hào):
writeburst128;
writeburst128;
read_enable = 1; //讀出一個(gè)數(shù),F(xiàn)ull信號(hào)應(yīng)該變低
writeburst128; //同時(shí)讀寫,檢查FIFO操作是否正確
read_enable = 0; //讀操作結(jié)束
endwriteburst; //寫操作結(jié)束
delay;
readburst128; //連續(xù)讀512次,Empty信號(hào)應(yīng)在讀出511個(gè)數(shù)后變高
readburst128;
readburst128;
readburst128;
endreadburst;
end
這段程序首先延遲5個(gè)時(shí)鐘周期,等初始化完成之后再開始驗(yàn)證工作。驗(yàn)證時(shí),首先寫入512個(gè)數(shù),使用波形觀察器可以檢查寫入的過(guò)程是否正確,以及Full信號(hào)在寫入511個(gè)數(shù)后是否變高;然后read_enable = 1,讀出一個(gè)數(shù),F(xiàn)ull信號(hào)應(yīng)該變低,這樣寫操作和Full信號(hào)的驗(yàn)證就基本完成了;程序接著也啟動(dòng)了寫操作,由于此時(shí)read_enable仍然為高,即讀寫同時(shí)進(jìn)行,這是對(duì)實(shí)際情況的模擬,可以對(duì)FIFO的功能進(jìn)行更嚴(yán)格的驗(yàn)證;最后,連續(xù)讀FIFO 512次,用波形觀察器檢查讀操作是否正確,Empty信號(hào)是否在讀出511個(gè)數(shù)后變高,如果這些操作都是正確的,那么FIFO的功能就基本正確了。
需要注意的一點(diǎn)是,以上的程序是不可綜合的,因?yàn)椴皇荝TL級(jí)描述,而是行為級(jí)描述(Behavioral Description)。行為級(jí)描述的特點(diǎn)是直接描述對(duì)象的功能,具有比較高的抽象層次,開發(fā)、運(yùn)行速度都比RTL代碼要會(huì),因此testbench都是用行為級(jí)描述寫的。關(guān)于行為級(jí)描述的特點(diǎn)、寫法以后將有專門的章節(jié)論述。
這個(gè)testbench的特點(diǎn)是,輸入激勵(lì)由testbench產(chǎn)生,輸出響應(yīng)的檢查人工完成,這樣的testbench編寫相對(duì)容易,可以加快開發(fā)速度,作為開發(fā)人員自己驗(yàn)證是非常好的選擇。有些testbench能完成輸入激勵(lì)和輸出檢查,不用觀察波形也能完成驗(yàn)證工作,這樣的testbench具有更高的自動(dòng)化程度,使用方便,可重復(fù)性好,當(dāng)設(shè)計(jì)比較復(fù)雜而且團(tuán)隊(duì)中有專門的驗(yàn)證工程師時(shí),一般會(huì)有驗(yàn)證工程師建立一套這樣的testbench,用于驗(yàn)證開發(fā)工程師的RTL級(jí)代碼,如果發(fā)現(xiàn)問(wèn)題,開發(fā)工程師修改后在testbench再運(yùn)行一次所花的時(shí)間非常少,開發(fā)復(fù)雜項(xiàng)目時(shí)這樣做可以比用波形觀察器節(jié)省很多時(shí)間。
3.總結(jié)
驗(yàn)證一般要通過(guò)寫testbench實(shí)現(xiàn),從《FPGA驗(yàn)證》第一篇我們知道,testbench要完成向DUT施加激勵(lì)和檢查DUT相應(yīng)是否正確的功能,這就要求我們非常清楚待驗(yàn)證模塊(DUT)的功能,這樣才知道需要驗(yàn)證什么、如何施加激勵(lì)和如何檢查響應(yīng)是否正確。寫testbench時(shí), 首先要列出需要驗(yàn)證的功能,讓后再編寫testbench,這樣可以做到有的放矢,避免遺漏。
思考:
1.Testbench中有“write_enable = #2 1”一行代碼,為什么要2ns的延遲?
第三篇 驗(yàn)證工具介紹
我們做FPGA/IC開發(fā)會(huì)用到很多工具,包括代碼輸入、仿真、綜合、布局布線、時(shí)序分析等各種各樣工具,熟悉這些工具是成功完成設(shè)計(jì)的關(guān)鍵,因?yàn)槲覀兊脑O(shè)計(jì)思想需要通過(guò)這些工具來(lái)實(shí)現(xiàn),只有清楚的知道工具的用法、如何設(shè)置參數(shù)、如果檢查工具的輸出結(jié)果,才能使設(shè)計(jì)者的想法變?yōu)轱@示,對(duì)驗(yàn)證來(lái)說(shuō)也是如此。
驗(yàn)證的工具很多,有些是驗(yàn)證必不可少的,例如仿真器,有些工具可以代替人完成最繁瑣的工作,并能提高功能驗(yàn)證的可信度,例如linting和代碼覆蓋率工具。這里我們介紹常用驗(yàn)證工具的特點(diǎn)和用途,以便為工具的使用提供參考。
1)代碼檢查工具
常用的代碼檢查工具有nlint等,nlint根據(jù)設(shè)計(jì)的RTL描述代碼結(jié)構(gòu)做靜態(tài)分析,推斷描述代碼存在的邏輯錯(cuò)誤,但無(wú)法決定描述代碼是否能夠現(xiàn)實(shí)設(shè)計(jì)要求的功能。代碼檢查工具可用于強(qiáng)制代碼遵從編寫規(guī)范,由于代碼檢查工具工具是靜態(tài)驗(yàn)證工具,因此運(yùn)行速度快,可以節(jié)省時(shí)間。由于Verilog不是強(qiáng)類型語(yǔ)言,使用代碼檢查工具非常必要,可以檢測(cè)race conditions 及數(shù)據(jù)寬度不匹配,可保證Verilog正確描述數(shù)據(jù)處理過(guò)程,避免造成數(shù)據(jù)的棄位及增位現(xiàn)象,這種錯(cuò)誤通過(guò)仿真并不一定發(fā)現(xiàn)。因?yàn)関erilog 語(yǔ)言的特點(diǎn), 對(duì)Verilog描述的設(shè)計(jì),Linting tool是一種有益的驗(yàn)證工具。因?yàn)閂HDL 語(yǔ)言的特點(diǎn),對(duì)VHDL使用Linting tool的作用不如對(duì)Verilog語(yǔ)言那么明顯,但Linting tool還是能發(fā)現(xiàn)一些潛在的問(wèn)題。
2)仿真器
仿真器是常用的驗(yàn)證工具,它通過(guò)忽略及簡(jiǎn)化設(shè)計(jì)的物理特性,對(duì)設(shè)計(jì)的實(shí)現(xiàn)進(jìn)行模擬。仿真器通過(guò)執(zhí)行RTL級(jí)的設(shè)計(jì)描述,模擬設(shè)計(jì)的物理實(shí)現(xiàn),它無(wú)法確定設(shè)計(jì)真實(shí)的物理實(shí)現(xiàn)與設(shè)計(jì)描述之間的區(qū)別。仿真的結(jié)果取決于設(shè)計(jì)描述是否準(zhǔn)確反映了設(shè)計(jì)的物理實(shí)現(xiàn)。仿真器不是一個(gè)靜態(tài)工具,需要編寫激勵(lì)和檢查輸出響應(yīng)。激勵(lì)由模擬設(shè)計(jì)工作環(huán)境的testbench 產(chǎn)生,響應(yīng)為仿真的輸出,由設(shè)計(jì)者確定輸出的有效性。
仿真器的類型分為3種類型,Event-driven Simulator(事件驅(qū)動(dòng)仿真器)、Cycle-Based Simulator(基于周期的仿真器)、Co-Simulator(聯(lián)合仿真器),分別介紹如下:
1.Event-driven Simulator
事件驅(qū)動(dòng)仿真器是最常用的仿真器,例如modelsim/VCS等都是事件驅(qū)動(dòng)仿真器,它將信號(hào)的變化定義為一個(gè)事件,該事件驅(qū)動(dòng)仿真執(zhí)行,事件驅(qū)動(dòng)仿真器能準(zhǔn)確地模擬設(shè)計(jì)的時(shí)序特征,可模擬異步設(shè)計(jì)。
2.Cycle-based simulator
Cycle-based simulator仿真器的特點(diǎn)是忽略設(shè)計(jì)的時(shí)序,假定所有flip_flop的setup和hold時(shí)間都滿足要求,在一個(gè)時(shí)鐘周期,信號(hào)僅更新一次,從而信號(hào)必須與時(shí)鐘同步。仿真速度比事件驅(qū)動(dòng)仿真器高。基于周期的仿真器的工作過(guò)程步驟是,首先編譯電路,將組合邏輯壓縮成單獨(dú)的表達(dá)式,根據(jù)該表達(dá)式可確定flop的輸入,然后執(zhí)行仿真,遇到時(shí)鐘的有效沿, flip_flop 的值被更新。基于周期的仿真器的缺點(diǎn)是不能仿真異步電路,不能進(jìn)行驗(yàn)證設(shè)計(jì)的時(shí)序。
3.Co-Simulators
聯(lián)合仿真器對(duì)同一設(shè)計(jì)各個(gè)部分,分別用不同的仿真器仿真,如即含有同步設(shè)計(jì)又含有異步設(shè)計(jì)的電路,可用Event-driven Simulator對(duì)異步設(shè)計(jì)仿真,用Cycle-based Simulator對(duì)異步設(shè)計(jì)仿真。聯(lián)合仿真器中各個(gè)Simulator 的操作是locked-step的,類似于電路的pipeline 操作。其缺點(diǎn)是由于不同仿真器之間需要同步和相互通訊,Co-Simulators的仿真速度受到最慢Simulator的限制,因而影響仿真器的性能,而且在各仿真器傳送的信息會(huì)產(chǎn)生多義性。
4.Hardware modeler
硬件模擬器創(chuàng)建一個(gè)物理芯片的邏輯模型,向仿真器提供該芯片的行為信息,芯片和仿真器的通信過(guò)是首先將物理芯片插入硬件仿真器,然后格式化來(lái)自仿真器的數(shù)據(jù),作為該芯片的輸入,最后將該芯片輸出的數(shù)據(jù),包含時(shí)序信息,送往仿真器。硬件模擬器可以提供很高的仿真速度,但是設(shè)備價(jià)格高昂。需要注意的是,硬件模擬器做的仍然是功能仿真,而不是時(shí)序仿真,因?yàn)樾酒墙殿l運(yùn)行的。
3)波形觀察器
仿真調(diào)試的過(guò)程中波形觀察器是必不可少的工具,它能提供信號(hào)狀態(tài)和變化的詳細(xì)信息,但是波形觀察器不能用來(lái)判斷一個(gè)設(shè)計(jì)是否通過(guò)驗(yàn)證,因?yàn)椴ㄐ问遣豢芍貜?fù)的且無(wú)法用于遞歸仿真。
波形觀察器的優(yōu)點(diǎn)是可以觀察仿真的整個(gè)過(guò)程,有利于設(shè)計(jì)及testbench 的診斷,缺點(diǎn)是由于要輸出波形,影響了仿真的速度,因此應(yīng)盡可能限制在波形圖中顯示的信號(hào)數(shù)量及時(shí)間長(zhǎng)度。波形觀察器的另一個(gè)作用是波形比較,主要用于redesign,保證設(shè)計(jì)具有cycle-accurate的后向兼容性。在波形比較中,不能僅看表象,需仔細(xì)分析,確認(rèn)波形之間存在的差別是有意義的。例如,有時(shí)我們僅關(guān)心波形transitions之間的相對(duì)位置,而不關(guān)心它的絕對(duì)位置。
以上是比較常用的驗(yàn)證工具,另外可能用到的驗(yàn)證工具有:形式驗(yàn)證工具、靜態(tài)時(shí)序分析工具以及Vera、SpecmanE、SystemC等高級(jí)語(yǔ)言驗(yàn)證工具,這些工具在復(fù)雜的IC/FPGA設(shè)計(jì)中用得比較多。
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -