0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在模塊化設(shè)計(jì)過(guò)程中編寫(xiě)testbench并仿真的方法介紹

FPGA之家 ? 來(lái)源:FPGA之家 ? 2023-09-04 09:54 ? 次閱讀

仿真第1個(gè)子模塊

??在開(kāi)始設(shè)計(jì)前,根據(jù)設(shè)計(jì)劃分好各功能模塊(為了敘述方便,這里以對(duì)“FPGA數(shù)字信號(hào)處理(十三)鎖相環(huán)位同步技術(shù)的實(shí)現(xiàn)”中設(shè)計(jì)的系統(tǒng)仿真為例)。編寫(xiě)好第一個(gè)子模塊(本例中為雙相時(shí)鐘生成模塊),在Vivado中添加仿真sim文件,編寫(xiě)testbench:

`timescale 1ns / 1ps
//-----------------------------------------------------
//  雙相時(shí)鐘信號(hào)生成模塊測(cè)試
//-----------------------------------------------------
module clk_gen_sim;

reg clk, rst;
wire clk_d1, clk_d2;
clk_gen i1
(
  .clk(clk),   //32MHz系統(tǒng)時(shí)鐘
  .rst(rst),   //高電平有效復(fù)位信號(hào)
  .clk_d1(clk_d1), //時(shí)鐘1
  .clk_d2(clk_d2)  //時(shí)鐘2
);

always #10 clk = ~clk;

initial begin
  clk = 1'b1;
  rst = 1'b1;
  #50;
  rst = 1'b0;
  #1000; $stop;
end

endmodule

??綜合正確后,點(diǎn)擊“Run Simulation”->“Run Behavioral Simulation”進(jìn)行行為仿真,仿真結(jié)果如下圖:

2cfa69ee-49f6-11ee-97a6-92fbcf53809c.jpg

??仿真結(jié)果正確(即功能與預(yù)期相符),則表明該子模塊設(shè)計(jì)正確,可以開(kāi)始下一個(gè)子模塊的設(shè)計(jì)和仿真。

加入第N個(gè)子模塊

??和上節(jié)一樣,設(shè)計(jì)好一個(gè)子模塊,則添加一個(gè)仿真激勵(lì)testbench文件,在仿真中確認(rèn)功能正確性。最終的仿真文件清單如下所示:

2d0eb99e-49f6-11ee-97a6-92fbcf53809c.jpg

??Vivado對(duì)多模塊、多文件的仿真提供了很好的特性支持。上面有多個(gè)testbench文件,分別對(duì)不同的模塊進(jìn)行仿真。當(dāng)仿真好第一個(gè)模塊后,需要仿真第二個(gè)模塊時(shí),對(duì)第一個(gè)模塊對(duì)應(yīng)的testbench點(diǎn)右鍵->“Disable File”,并將第二個(gè)模塊對(duì)應(yīng)的testbench點(diǎn)右鍵->“Set as Top”(當(dāng)狀態(tài)為Enable的仿真文件只有一個(gè)時(shí)會(huì)自動(dòng)設(shè)置為T(mén)op),如下圖所示:

2d1d493c-49f6-11ee-97a6-92fbcf53809c.jpg

??如果想要重新仿真先前的模塊,在testbench文件上點(diǎn)右鍵->“Enable File”即可重新將其置為有效。通過(guò)這樣的方法可以完成所有模塊的仿真。

多模塊聯(lián)合仿真

??我們知道,模塊化設(shè)計(jì)的代碼,各個(gè)模塊之間的聯(lián)系是非常緊密的。對(duì)于簡(jiǎn)單的設(shè)計(jì)還比較好,可以像上節(jié)一樣每個(gè)模塊單獨(dú)測(cè)試,各自編寫(xiě)testbench也并不復(fù)雜。而更多的設(shè)計(jì)在仿真時(shí)我們期望能直接使用第一個(gè)模塊產(chǎn)生的信號(hào),作為第二個(gè)模塊的測(cè)試激勵(lì),即多模塊聯(lián)合仿真。比如在“FPGA綜合系統(tǒng)設(shè)計(jì)(七)基于DDC的兩路信號(hào)相位差檢測(cè)”中,在仿真DDC模塊(數(shù)字下變頻)時(shí)顯然更希望直接使用信號(hào)生成模塊(signal_gen)中產(chǎn)生的信號(hào)作為激勵(lì),而不是另外在testbench中生成一個(gè)信號(hào)作為激勵(lì)。否則不僅費(fèi)時(shí)費(fèi)力,也沒(méi)有測(cè)試到模塊之間連接的正確性。

??方法有兩個(gè):第一個(gè)是先編寫(xiě)好設(shè)計(jì)的頂層模塊,不斷的將子模塊實(shí)例化到頂層模塊中,只對(duì)頂層模塊做仿真;第二個(gè)是在testbench中把需要的子模塊都實(shí)例化好。

1. 第一種方法

??Vivado可以觀察模塊的內(nèi)部信號(hào),在運(yùn)行頂層模塊的仿真后,Scope窗口內(nèi)顯示了頂層模塊內(nèi)包含的所有子模塊。如下圖所示:

2d394fb0-49f6-11ee-97a6-92fbcf53809c.jpg

??仿真波形窗口內(nèi)默認(rèn)只顯示頂層模塊的接口和在testbench文件中定義的變量。如果要觀察子模塊內(nèi)部的信號(hào),在子模塊上右鍵->“Add to Wave Window”,即可將相關(guān)信號(hào)添加到波形窗口。

??借助于Vivado的這個(gè)特性,可以在設(shè)計(jì)過(guò)程中不斷在頂層模塊中實(shí)例化子模塊,達(dá)到多模塊聯(lián)合仿真的目的。這樣做的優(yōu)點(diǎn)是在編寫(xiě)testbench代碼上更省力,缺點(diǎn)是只有一個(gè)頂層模塊的testbench,無(wú)法對(duì)各個(gè)子模塊進(jìn)行單獨(dú)測(cè)試。

2. 第二種方法

??在仿真一個(gè)子模塊時(shí)希望用到其它子模塊的輸出信號(hào),將兩者都在testbench中實(shí)例化即可。和下面testbench代碼類(lèi)似:

`timescale 1ns / 1ps
module clk_iq_sim;

reg clk, rst;
wire clk_d1, clk_d2;
wire clk_i, clk_q;
clk_gen i1
(
  .clk(clk),   //32MHz系統(tǒng)時(shí)鐘
  .rst(rst),   //高電平有效復(fù)位信號(hào)
  .clk_d1(clk_d1), //時(shí)鐘1
  .clk_d2(clk_d2)  //時(shí)鐘2
);
/*使用clk_gen模塊的輸出信號(hào)作為該模塊的輸入激勵(lì)*/
clk_iq i2
(
  .clk(clk),   //32MHz系統(tǒng)時(shí)鐘
  .rst(rst),   //高電平有效復(fù)位信號(hào)
  .clk_d1(clk_d1), //時(shí)鐘1
  .clk_d2(clk_d2), //時(shí)鐘2
  .clk_i(clk_i),
  .clk_q(clk_q)
);

always #10 clk = ~clk;

initial begin
  clk = 1'b1;
  rst = 1'b1;
  #50;
  rst = 1'b0;
  #1000; $stop;
end

endmodule

??這樣做的好處是仍然可以保持每一個(gè)子模塊都有一個(gè)對(duì)應(yīng)的仿真激勵(lì)文件,更方便功能測(cè)試和文件管理。尤其在經(jīng)常需要修改和運(yùn)行仿真的設(shè)計(jì)中,單獨(dú)測(cè)試一個(gè)模塊的運(yùn)行時(shí)間比運(yùn)行總體的頂層模塊仿真要節(jié)省不少時(shí)間。

使用Quartus+ModelSim

??Vivado自帶的仿真(Vivado Simulation)已經(jīng)足夠好用,而使用Quartus時(shí),由于其自帶的波形仿真工具并不方便,經(jīng)常需要調(diào)用ModelSim來(lái)仿真。使用Quartus+ModelSim也可以達(dá)到上面的效果。

??多仿真文件的管理在Quartus主界面的Assignments菜單->Settings窗口中,如下圖所示:
2d571b58-49f6-11ee-97a6-92fbcf53809c.jpg

??點(diǎn)擊EDA Tool Settings下的Simulation,在Test Benches窗口中可以添加和管理多個(gè)testbench文件。在Compile test bench的下拉菜單里選擇指定的一個(gè)testbench,調(diào)用ModelSim仿真時(shí)會(huì)讀取相應(yīng)的文件。

??ModelSim仿真過(guò)程中也可以觀察到頂層模塊內(nèi)部子模塊的信號(hào)。在sim-Default窗口下可以看到頂層模塊和子模塊之間的實(shí)例化信息,選中相應(yīng)的子模塊,在Objects窗口(如果沒(méi)有則在ModelSim主界面的View菜單中選中打開(kāi))下會(huì)顯示出該子模塊的相關(guān)信號(hào)。

??對(duì)需要顯示的信號(hào)點(diǎn)右鍵->“Add to”->“Wave”->“Selected Signals”,即可添加到波形窗口。點(diǎn)擊“Run-All”重新運(yùn)行仿真,新添加信號(hào)的波形便會(huì)顯示出來(lái)。

2d744016-49f6-11ee-97a6-92fbcf53809c.jpg








審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鎖相環(huán)
    +關(guān)注

    關(guān)注

    35

    文章

    596

    瀏覽量

    88503
  • FPGA設(shè)計(jì)
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    27175
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1034

    瀏覽量

    85034
  • DDC
    DDC
    +關(guān)注

    關(guān)注

    2

    文章

    95

    瀏覽量

    37570
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    831

    瀏覽量

    68316

原文標(biāo)題:Testbench編寫(xiě)指南(3)模塊化工程的仿真方法

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    模塊化示波器的技術(shù)原理和應(yīng)用

    。 二、應(yīng)用 電子工程和通信技術(shù): 電子工程和通信技術(shù)領(lǐng)域,模塊化示波器發(fā)揮著不可替代的作用。它可以用于觀察和分析各種電信號(hào)隨時(shí)間的變化,如波形、幅度、頻率等參數(shù)。 電路設(shè)計(jì)過(guò)程中
    發(fā)表于 12-11 14:20

    怎么ISE中進(jìn)行模塊化設(shè)計(jì)?

    你好: 我想在ISE中進(jìn)行模塊化設(shè)計(jì),但是TCL腳本方法,還有其他方法可以進(jìn)行模塊化設(shè)計(jì)嗎?
    發(fā)表于 10-10 11:46

    嵌入式軟件開(kāi)發(fā)過(guò)程中模塊化

    對(duì)很多人來(lái),嵌入式軟件開(kāi)發(fā)過(guò)程中模塊化(Modularization)是一個(gè)海市蜃樓、是一個(gè)書(shū)面詞匯、是一個(gè)過(guò)氣的時(shí)尚——模塊化似乎從未真正的實(shí)現(xiàn)過(guò)。吹牛時(shí)人們常不屑的說(shuō):沒(méi)吃...
    發(fā)表于 12-20 07:22

    介紹一下機(jī)電暫態(tài)開(kāi)源工具使用過(guò)程中的一些體會(huì)

    )作者:一一數(shù)二三這個(gè)工具箱所有代碼開(kāi)源,且提供了圖形仿真界面,單元模塊化,易于添加新的模塊仿真器件。
    發(fā)表于 12-30 08:33

    編寫(xiě)高效率的testbench

    編寫(xiě)高效率的testbench,學(xué)習(xí)編寫(xiě)測(cè)試文件的小伙伴們。
    發(fā)表于 05-11 16:40 ?16次下載

    利用模塊化建模方法實(shí)現(xiàn)基于System Generator的控制器導(dǎo)出多軟硬件仿真驗(yàn)證

    利用System Generator軟件平臺(tái),實(shí)現(xiàn)基于模塊化建模方法的變換器建模,簡(jiǎn)化語(yǔ)言編寫(xiě)控制系統(tǒng)的復(fù)雜過(guò)程。研究了從MATLAB-X
    發(fā)表于 11-15 14:31 ?5735次閱讀
    利用<b class='flag-5'>模塊化</b>建模<b class='flag-5'>方法</b>實(shí)現(xiàn)基于System Generator的控制器導(dǎo)出<b class='flag-5'>并</b>多軟硬件<b class='flag-5'>仿真</b>驗(yàn)證

    關(guān)于testbenchFPGA編程的技巧

    定義信號(hào)類(lèi)型:原來(lái)模塊的輸入信號(hào),定義成reg 類(lèi)型,原來(lái)模塊的輸出信號(hào),定義為wire類(lèi)型,但這里有個(gè)問(wèn)題,如果在testbench
    發(fā)表于 07-31 17:52 ?1216次閱讀

    介紹FPGAtestbench編寫(xiě)技巧

    原來(lái)模塊的輸入信號(hào),定義成reg 類(lèi)型,原來(lái)模塊的輸出信號(hào),定義為wire類(lèi)型,但這里有個(gè)問(wèn)題,如果在testbench
    發(fā)表于 01-06 14:52 ?2063次閱讀
    <b class='flag-5'>介紹</b>FPGA<b class='flag-5'>中</b><b class='flag-5'>testbench</b>的<b class='flag-5'>編寫(xiě)</b>技巧

    使用三種自動(dòng)testbench驗(yàn)證方法

    自我檢查testbench設(shè)計(jì):與前兩種方法不同,該方法實(shí)時(shí)檢查預(yù)期結(jié)果和實(shí)際結(jié)果,而不是仿真結(jié)束后才檢查。
    的頭像 發(fā)表于 11-20 11:26 ?4043次閱讀

    模塊化設(shè)計(jì)過(guò)程中編寫(xiě)testbench仿真的方法

    開(kāi)始設(shè)計(jì)前,根據(jù)設(shè)計(jì)劃分好各功能模塊(為了敘述方便,這里以對(duì)“FPGA數(shù)字信號(hào)處理(十三)鎖相環(huán)位同步技術(shù)的實(shí)現(xiàn)”設(shè)計(jì)的系統(tǒng)仿真為例)。編寫(xiě)
    的頭像 發(fā)表于 11-20 11:29 ?4500次閱讀

    FPGA仿真的學(xué)習(xí)課件和工程文件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA仿真的學(xué)習(xí)課件和工程文件免費(fèi)下載包括了:1、testbench編寫(xiě),2、仿真工具使用,2、
    發(fā)表于 12-10 15:28 ?32次下載

    使用matlab產(chǎn)生待濾波信號(hào)編寫(xiě)testbench進(jìn)行仿真分析

    本講使用matlab產(chǎn)生待濾波信號(hào),編寫(xiě)testbench進(jìn)行仿真分析,Vivado調(diào)用F
    的頭像 發(fā)表于 04-27 18:18 ?4661次閱讀
    使用matlab產(chǎn)生待濾波信號(hào)<b class='flag-5'>并</b><b class='flag-5'>編寫(xiě)</b><b class='flag-5'>testbench</b>進(jìn)行<b class='flag-5'>仿真</b>分析

    模塊化UPS是什么?模塊化UPS電源機(jī)的優(yōu)點(diǎn)

    模塊數(shù)量。通過(guò)機(jī)技術(shù),多個(gè)模塊可以一起運(yùn)行,提供高可靠性和高可擴(kuò)展性的電源系統(tǒng)。下面將詳細(xì)介紹模塊化UPS電源
    的頭像 發(fā)表于 01-10 15:16 ?1748次閱讀

    FPGA入門(mén)必備:Testbench仿真文件編寫(xiě)實(shí)例詳解

    編寫(xiě)完HDL代碼后,往往需要通過(guò)仿真軟件Modelsim或者Vivadao自帶的仿真功能對(duì)HDL代碼功能進(jìn)行驗(yàn)證,此時(shí)我們需要編寫(xiě)Testbenc
    發(fā)表于 04-29 10:43 ?2886次閱讀

    模塊化插座接線(xiàn)方法有哪些

    擴(kuò)展或改變插座的功能。以下是一些模塊化插座接線(xiàn)方法的概述,以及一些安全和安裝的注意事項(xiàng)。 1. 基本接線(xiàn)方法 模塊化插座的基本接線(xiàn)方法通常包
    的頭像 發(fā)表于 10-18 09:50 ?1687次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品