第一編 驗(yàn)證的重要性
驗(yàn)證,顧名思義就是通過(guò)仿真、時(shí)序分析、上板調(diào)試等手段檢驗(yàn)設(shè)計(jì)正確性的過(guò)程,在FPGA/IC開(kāi)發(fā)流程中,驗(yàn)證主要包括功能驗(yàn)證和時(shí)序驗(yàn)證兩個(gè)部分。為了了解驗(yàn)證的重要性,我們先來(lái)回顧一下FPGA開(kāi)發(fā)的整個(gè)流程。FPGA開(kāi)發(fā)流程和IC的開(kāi)發(fā)流程相似,主要分為以下幾個(gè)部分:
1)設(shè)計(jì)輸入,利用HDL輸入工具、原理圖輸入工具或狀態(tài)機(jī)輸入工具等把所要設(shè)計(jì)的電路描述出來(lái);
2)功能驗(yàn)證,也就是前仿真,利用Modelsim、VCS等仿真工具對(duì)設(shè)計(jì)進(jìn)行仿真,檢驗(yàn)設(shè)計(jì)的功能是否正確;常用的仿真工具有Model Tech公司的ModelSim,Synopsys公司的VCS,Cadence公司的NC-Verilog和NC-VHDL,Aldec公司的 Active HDL VHDL/Verilog HDL等。仿真過(guò)程能及時(shí)發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤,加快了設(shè)計(jì)進(jìn)度,提高了設(shè)計(jì)的可*性。
3)綜合,綜合優(yōu)化是把HDL語(yǔ)言翻譯成最基本的與或非門的連接關(guān)系(網(wǎng)表),并根據(jù)要求(約束條件)優(yōu)化所生成的門級(jí)邏輯連接,輸出edf和edn等文件,導(dǎo)給CPLD/FPGA廠家的軟件進(jìn)行實(shí)現(xiàn)和布局布線。常用的專業(yè)綜合優(yōu)化工具有Synplicity公司的Synplify/Synplify Pro、Amplify等綜合工具,Synopsys公司的FPGA Compiler II綜合工具(Synopsys公司將停止發(fā)展FPGA Express軟件,而轉(zhuǎn)到FPGA Compiler II平臺(tái)),Exemplar Logic公司出品的LeonardoSpectrum等綜合工具。另外FPGA/CPLD廠商的集成開(kāi)發(fā)環(huán)境也帶有一些綜合工具,如Xilinx ISE中的XST等。
4)布局布線,綜合的結(jié)果只是通用的門級(jí)網(wǎng)表,只是一些門與或非的邏輯關(guān)系,與芯片實(shí)際的配置情況還有差距。此時(shí)應(yīng)該使用FPGA/CPLD廠商提供的實(shí)現(xiàn)與布局布線工具,根據(jù)所選芯片的型號(hào),進(jìn)行芯片內(nèi)部功能單元的實(shí)際連接與映射。這種實(shí)現(xiàn)與布局布線工具一般要選用所選器件的生產(chǎn)商開(kāi)發(fā)的工具,因?yàn)橹挥猩a(chǎn)者最了解器件內(nèi)部的結(jié)構(gòu),如在ISE的集成環(huán)境中完成實(shí)現(xiàn)與布局布線的工具是Flow Engine。
5)時(shí)序驗(yàn)證,其目的是保證設(shè)計(jì)滿足時(shí)序要求,即setup/hold time符合要求,以便數(shù)據(jù)能被正確的采樣。時(shí)序驗(yàn)證的主要方法包括STA(Static Timing Analysis)和后仿真。在后仿真中將布局布線的時(shí)延反標(biāo)到設(shè)計(jì)中去,使仿真既包含門延時(shí),又包含線延時(shí)信息。這種后仿真是最準(zhǔn)確的仿真,能較好地反映芯片的實(shí)際工作情況。仿真工具與綜合前仿真工具相同。
6)生成并下載BIT或PROM文件,進(jìn)行板級(jí)調(diào)試。
在以上幾個(gè)主要開(kāi)發(fā)步驟當(dāng)中,屬于驗(yàn)證的有功能仿真和時(shí)序驗(yàn)證兩個(gè)步驟,由于前仿真和后仿真涉及驗(yàn)證環(huán)境的建立,需要耗費(fèi)大量的時(shí)間,而在STA中對(duì)時(shí)序報(bào)告進(jìn)行分析也是一個(gè)非常復(fù)雜的事情,因此驗(yàn)證在整個(gè)設(shè)計(jì)流程中占用了大量的時(shí)間,在復(fù)雜的FPGA/IC設(shè)計(jì)中,驗(yàn)證所占的時(shí)間估計(jì)在60%~70%之間。相比較而言, FPGA設(shè)計(jì)流程的其他環(huán)節(jié)由于需要人為干預(yù)的東西比較少,例如綜合、布局布線等流程,基本所有的工作都由工具完成,設(shè)置好工具的參數(shù)之后,結(jié)果很快就可以出來(lái),因此所花的時(shí)間精力要比驗(yàn)證少的多。
一般而言,在驗(yàn)證的幾個(gè)內(nèi)容中功能驗(yàn)證最受重視,研究討論得最多,特別是現(xiàn)在FPGA/IC設(shè)計(jì)都朝向SOC(System On Chip,片上系統(tǒng))的方向發(fā)展,設(shè)計(jì)的復(fù)雜都大大提高,如何保證這些復(fù)雜系統(tǒng)的功能是正確的成了至關(guān)重要的問(wèn)題。功能驗(yàn)證對(duì)所有功能進(jìn)行充分的驗(yàn)證,盡早地暴露問(wèn)題,保證所有功能完全正確,滿足設(shè)計(jì)的需要。任何潛在的問(wèn)題都會(huì)給后續(xù)工作作帶來(lái)難以極大的困難,而且由于問(wèn)題發(fā)現(xiàn)得越遲,付出的代價(jià)也越大,這個(gè)代價(jià)是幾何級(jí)數(shù)增長(zhǎng)的。這里將以功能驗(yàn)證為主說(shuō)明驗(yàn)證方法、工具、驗(yàn)證環(huán)境的建立、
做功能驗(yàn)證時(shí),需要建立驗(yàn)證環(huán)境,以便對(duì)設(shè)計(jì)(DUT/DUV,Design Under Test/Verification)施加特定的輸入,然后對(duì)DUT的輸出進(jìn)行檢查,確實(shí)其是否正確。在實(shí)際驗(yàn)證工作中,一般采用由TESTBENCH 和DUT(design under test)組成的Verification體系。
Verification體系是驗(yàn)證系統(tǒng)普遍適用的模型,Testbench為DUT提供輸入,然后監(jiān)視輸出,從而判斷DUT工作是否正確。注意到這是一個(gè)封閉的系統(tǒng),沒(méi)有輸入也沒(méi)有輸出。驗(yàn)證工作的難度在于確定應(yīng)該輸入何種激勵(lì),相應(yīng)的正確的輸出應(yīng)該是怎樣的。
下一篇我們看個(gè)具體的例子,一起寫(xiě)代碼和仿真。
第二篇 分析一個(gè)testbench
很多FPGA/IC開(kāi)發(fā)工具都提供設(shè)計(jì)例子,方便使用者學(xué)習(xí)和練習(xí),例如,Xilinx ISE提供了很多設(shè)計(jì)實(shí)例,放在ISE5.X的安裝目錄下的ISEexamples目錄下,例如CDMA匹配濾波器、Johnson計(jì)數(shù)器、PN碼發(fā)生器、頻率計(jì)等,這些例子是經(jīng)驗(yàn)豐富的工程師寫(xiě)的,我們可以學(xué)到編程思想、代碼風(fēng)格等方面的知識(shí)和經(jīng)驗(yàn),這些東西可能從學(xué)校老師或一般書(shū)籍都學(xué)習(xí)不到。如果你用的不是Xilinx的FPGA,也就是說(shuō)不使用ISE,那也沒(méi)關(guān)系,HDL代碼和testbench的設(shè)計(jì)思想和方法是一樣的,你照樣可以從中學(xué)到很多東西。下面以其中一個(gè)例子――同步FIFO為例,分析一下我們的第一個(gè)testbench,設(shè)計(jì)的源代碼可以在ISEexamples目錄下找到, Xilinx還提供了Application Note詳細(xì)介紹了該FIFO的細(xì)節(jié),下載的網(wǎng)址是http://www.xilinx.com/xapp/xapp131.pdf
1.511x8同步FIFO功能簡(jiǎn)介
為了對(duì)這個(gè)511x8同步FIFO進(jìn)行功能驗(yàn)證,首先要清楚它的功能,只有這樣才能知道需要驗(yàn)證什么功能,以及如何進(jìn)行驗(yàn)證,圖1為該同步FIFO的原理框圖。
與異步FIFO相比,同步FIFO的讀、寫(xiě)時(shí)鐘是同一個(gè)時(shí)鐘,簡(jiǎn)化了FIFO的設(shè)計(jì),Empty和Full標(biāo)志的產(chǎn)生也比較容易,同步 FIFO內(nèi)部使用二進(jìn)制計(jì)數(shù)器記錄讀地址和寫(xiě)地址。在異步FIFO中,由于讀寫(xiě)使用不同的時(shí)鐘,也就是說(shuō)設(shè)計(jì)存在兩個(gè)時(shí)鐘域,為了減少出現(xiàn)亞穩(wěn)態(tài)時(shí)產(chǎn)生的錯(cuò)誤,記錄讀寫(xiě)地址的計(jì)數(shù)器要使用格雷碼,Empty和Full標(biāo)志的產(chǎn)生也比較復(fù)雜。511x8同步FIFO(以下簡(jiǎn)稱FIFO)的工作時(shí)序如圖2所示。
讀FIFO數(shù)據(jù)時(shí),首先read_allow信號(hào)置高,時(shí)鐘上升沿到來(lái)時(shí)read_addr地址處的數(shù)據(jù)將出現(xiàn)在read_data處,同時(shí)read_addr加1。讓read_allow信號(hào)持續(xù)為高可以完成burst read操作。如果讀出的數(shù)據(jù)是FIFO的最后一個(gè)數(shù)據(jù),那么讀操作完成后Empty信號(hào)變高。Empty信號(hào)為高時(shí)讀出來(lái)的數(shù)據(jù)是無(wú)效的。
寫(xiě)FIFO數(shù)據(jù)時(shí),首先write_allow信號(hào)置高,同時(shí)準(zhǔn)備好輸入數(shù)據(jù)write_data,時(shí)鐘上升沿到來(lái)時(shí),數(shù)據(jù)將寫(xiě)入 write_addr所指向的地址中,同時(shí)write_addr加1。讓write_allow信號(hào)持續(xù)為高可以完成burst write操作。如果某一個(gè)時(shí)鐘上升沿時(shí)寫(xiě)入第511個(gè)數(shù),那么下一個(gè)時(shí)鐘沿到來(lái)的時(shí)候Full信號(hào)變高,表示FIFO已經(jīng)寫(xiě)滿。
我們?cè)僭敿?xì)分析FIFO的工作時(shí)序圖。在圖2中,開(kāi)始時(shí)FIFO的讀寫(xiě)指針均為0,Empty為高表示FIFO處于空的狀態(tài),然后 write_allow置高,時(shí)鐘上升沿到來(lái)時(shí)寫(xiě)入第一個(gè)數(shù)據(jù),Empty變低;一個(gè)CLK之后,read_allow置高,時(shí)鐘上升沿到來(lái)時(shí),讀出數(shù)據(jù),由于是最后一個(gè)數(shù)據(jù),所以Empty信號(hào)又變?yōu)橛行?高電平)。在時(shí)序圖的右半部分,寫(xiě)入509個(gè)數(shù)據(jù)之后,再寫(xiě)入兩個(gè)數(shù)據(jù),F(xiàn)ull信號(hào)變?yōu)橛行?,表示FIFO為滿。
這個(gè)FIFO還有一個(gè)名為fifo_count_out的輸出,從4’b0000~4’b1111,分別表示FIFO滿的程度從不足1/16到15/16,為某些應(yīng)用提供方便。
2.驗(yàn)證
清楚FIFO的功能之后,我們就可以開(kāi)始驗(yàn)證工作了。驗(yàn)證工作的第一步是整理出FIFO需要驗(yàn)證的功能點(diǎn),這些功能點(diǎn)一般直接來(lái)源于FIFO應(yīng)該具有的功能,或者來(lái)源于它的使用方法。FIFO需要驗(yàn)證的功能點(diǎn)包括:
1)FIFO復(fù)位后,read_addr和write_addr為0,F(xiàn)ull為0,Empty為1。
2)讀FIFO數(shù)據(jù)時(shí),read_allow信號(hào)必須置高,時(shí)鐘上升沿到來(lái)時(shí)read_addr地址處的數(shù)據(jù)將出現(xiàn)在read_data處,同時(shí)read_addr加1。
3)讀出FIFO的最后一個(gè)數(shù)據(jù)后,Empty信號(hào)變高。
4)寫(xiě)FIFO數(shù)據(jù)時(shí),write_allow信號(hào)必須置高,時(shí)鐘上升沿到來(lái)時(shí),輸入數(shù)據(jù)write_data將寫(xiě)入write_addr所指向的地址中,同時(shí)write_addr加1。
5)如果某一個(gè)時(shí)鐘上升沿時(shí)寫(xiě)入第511個(gè)數(shù),那么下一個(gè)時(shí)鐘沿到來(lái)的時(shí)候Full信號(hào)變高,表示FIFO已經(jīng)寫(xiě)滿。
6)fifo_count_out端能正確的指示FIFO滿的程度。
分析Xilinx提供的testbench可以為我們編寫(xiě)自己的testbench提供很好的參考。FIFO的RTL代碼和 testbench代碼放在ISEexamplesfifo_ver_131和fifo_vhd_131下。以verilog代碼為例, fifo_ver_131中包括了兩個(gè)testbench文件,一個(gè)是功能仿真testbench文件fifoctlr_cc_tb.tf,另一個(gè)是時(shí)序仿真(后仿真)testbench文件fifoctlr_cc_tb_timing.tf,這里我們主要分析功能仿真文件,為了方便大家理解,以下(下一帖)為注釋過(guò)的功能仿真testbench。大家看testbench的代碼時(shí),對(duì)照FIFO需要驗(yàn)證的功能點(diǎn),檢查是不是所有功能點(diǎn)都經(jīng)過(guò)了驗(yàn)證。
FIFO的testbench主要包括初始化、驗(yàn)證initial塊、讀寫(xiě)task等內(nèi)容,初始化部分主要完成復(fù)位信號(hào)、CLK信號(hào)等的初始化工作,讀寫(xiě)task把讀寫(xiě)、delay等操作模塊化,方便使用。這里主要介紹一下驗(yàn)證initial塊,也可以說(shuō)是驗(yàn)證的主程序,如下所示。
initial begin
delay; //保證驗(yàn)證環(huán)境正確復(fù)位
writeburst128; //寫(xiě)入512個(gè)數(shù),F(xiàn)ull信號(hào)應(yīng)該在寫(xiě)入511個(gè)數(shù)后變高
writeburst128;
writeburst128;
writeburst128;
read_enable = 1; //讀出一個(gè)數(shù),F(xiàn)ull信號(hào)應(yīng)該變低
writeburst128; //同時(shí)讀寫(xiě),檢查FIFO操作是否正確
read_enable = 0; //讀操作結(jié)束
endwriteburst; //寫(xiě)操作結(jié)束
delay;
readburst128; //連續(xù)讀512次,Empty信號(hào)應(yīng)在讀出511個(gè)數(shù)后變高
readburst128;
readburst128;
readburst128;
endreadburst;
end
這段程序首先延遲5個(gè)時(shí)鐘周期,等初始化完成之后再開(kāi)始驗(yàn)證工作。驗(yàn)證時(shí),首先寫(xiě)入512個(gè)數(shù),使用波形觀察器可以檢查寫(xiě)入的過(guò)程是否正確,以及Full信號(hào)在寫(xiě)入511個(gè)數(shù)后是否變高;然后read_enable = 1,讀出一個(gè)數(shù),F(xiàn)ull信號(hào)應(yīng)該變低,這樣寫(xiě)操作和Full信號(hào)的驗(yàn)證就基本完成了;程序接著也啟動(dòng)了寫(xiě)操作,由于此時(shí)read_enable仍然為高,即讀寫(xiě)同時(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ì)象的功能,具有比較高的抽象層次,開(kāi)發(fā)、運(yùn)行速度都比RTL代碼要會(huì),因此testbench都是用行為級(jí)描述寫(xiě)的。關(guān)于行為級(jí)描述的特點(diǎn)、寫(xiě)法以后將有專門的章節(jié)論述。
這個(gè)testbench的特點(diǎn)是,輸入激勵(lì)由testbench產(chǎn)生,輸出響應(yīng)的檢查人工完成,這樣的testbench編寫(xiě)相對(duì)容易,可以加快開(kāi)發(fā)速度,作為開(kāi)發(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)證開(kāi)發(fā)工程師的RTL級(jí)代碼,如果發(fā)現(xiàn)問(wèn)題,開(kāi)發(fā)工程師修改后在testbench再運(yùn)行一次所花的時(shí)間非常少,開(kāi)發(fā)復(fù)雜項(xiàng)目時(shí)這樣做可以比用波形觀察器節(jié)省很多時(shí)間。
3.總結(jié)
驗(yàn)證一般要通過(guò)寫(xiě)testbench實(shí)現(xiàn),從《FPGA驗(yàn)證》第一篇我們知道,testbench要完成向DUT施加激勵(lì)和檢查DUT相應(yīng)是否正確的功能,這就要求我們非常清楚待驗(yàn)證模塊(DUT)的功能,這樣才知道需要驗(yàn)證什么、如何施加激勵(lì)和如何檢查響應(yīng)是否正確。寫(xiě)
第三篇 驗(yàn)證工具介紹
我們做FPGA/IC開(kāi)發(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)制代碼遵從編寫(xiě)規(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)工具,需要編寫(xiě)激勵(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 的值被更新?;谥芷诘姆抡嫫鞯娜秉c(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ì)中用得比較多。
評(píng)論