RM新时代网站-首页

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

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

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

verilog仿真工具編譯

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-08-15 09:11 ? 次閱讀

Icarus Verilog(以下簡(jiǎn)稱iverilog )號(hào)稱“全球第四大”數(shù)字芯片仿真器,也是一個(gè)完全開源的仿真器。由于Synopsys、Cadence、Mentor版權(quán)的關(guān)系,國(guó)外很多高校在數(shù)字芯片設(shè)計(jì)的教學(xué)中都采用iverilog。 GTKWave是一個(gè)開源的波形文件察看工具,支持Verilog VCD/EVCD文件格式。因此,通過“iverilog +gtkwave”的方式,可以很方便地實(shí)現(xiàn)商用仿真器的功能。 本文為我的學(xué)生整理自 iverilog 和 gtkwave 官方網(wǎng)站。 介紹 iverilog Icarus Verilog是一個(gè)verilog仿真工具. 以編譯器的形式工作, 將以verilog編寫的源代碼編譯為某種目標(biāo)格式. 如果要進(jìn)行仿真的話, 它可以生成一個(gè)叫做vvp的中間格式. 這個(gè)格式可以由其所附帶的vvp命令執(zhí)行. gtkwave wave viewer. 可以用于查看標(biāo)準(zhǔn)的verilog VCD/EVCD, 以及其他的一些格式的波形文件。 安裝 iverilog

linux a. 包管理器安裝下載:sudo pacman -S gtkwave b. 從上面的鏈接下載源碼, 然后編譯

使用 1. 示例:


1//adder_rtl.v 2moduleadder(clk,rst_n,a,b,c); 3input[3:0]a; 4input[3:0]b; 5output[7:0]c; 6inputclk,rst_n; 7 8wire[3:0]a; 9wire[3:0]b; 10wire[7:0]c; 11 12always@(posedgeclkornegedgerst_m)begin 13if(rst_n==1'b0) 14c<=?8'b0; 15????????else 16????????????c?<=?a+b; 17????end 18endmodule 2. 編譯:

1iverlogadder_rtl.v  8ce86450-1c2f-11ed-ba43-dac502259ad0.png 抄錯(cuò)了. damn.

1moduleadder(clk,rst_n,a,b,c); 2input[3:0]a; 3input[3:0]b; 4output[7:0]c; 5inputclk,rst_n; 6 7wire[3:0]a; 8wire[3:0]b; 9reg[7:0]c; 10 11always@(posedgeclkornegedgerst_n)begin 12if(rst_n==1'b0) 13c<=?8'b0; 14????????else 15????????????c?<=?a+b; 16????end 17endmodule 3. 編譯: 1iverlogadder_rtl.v  8d03c538-1c2f-11ed-ba43-dac502259ad0.png 無事發(fā)生. tb:

1//adder_tb.v 2`timescale1ns/1ns 3moduleadder_tb(); 4reg[3:0]a; 5reg[3:0]b; 6wire[7:0]c; 7 8regclk,rst_n; 9 10adderDUT( 11.clk(clk), 12.rst_n(rst_n), 13.a(a), 14.b(b), 15.c(c) 16); 17 18alwaysbegin 19#10clk=0; 20#10clk=1; 21end 22 23initialbegin 24rst_n=1; 25test(4'b1111,4'b1111,5'b11110); 26$finish; 27end 28tasktest; 29input[3:0]in; 30input[3:0]in2; 31input[7:0]e; 32begin 33a=in; 34b=in2; 35@(posedgeclk); 36@(negedgeclk); 37if(c==e)begin 38$display("Itworks"); 39endelsebegin 40$display("opps%d+%d~=%d,expect%d",in,in2,c,e); 41end 42end 43endtask 44endmodule 4. 編譯運(yùn)行:

1iverilogadder_rtl.vadder_tb.v 8d449798-1c2f-11ed-ba43-dac502259ad0.png8d558418-1c2f-11ed-ba43-dac502259ad0.png ? 5. 使用-o選項(xiàng)指定輸出文件的名稱

1iverilogadder_rtl.vadder_tb.v-oadder_test 8d69cc70-1c2f-11ed-ba43-dac502259ad0.png ? 6. 在tb中添加dump:

1initialbegin 2$dumpfile("wave.vcd");//指定用作dumpfile的文件 3$dumpvars;//dumpallvars 4end 7. 重新編譯運(yùn)行一遍, 生成了一個(gè)vcd文件, 使用gtkwave查看. 8d7ddac6-1c2f-11ed-ba43-dac502259ad0.png8d92c7ec-1c2f-11ed-ba43-dac502259ad0.png8daf612c-1c2f-11ed-ba43-dac502259ad0.png ? iverilog的一些選項(xiàng):

-D: 定義宏

-P: 覆蓋root module中的一個(gè)參數(shù)的值

-E: 只預(yù)處理(進(jìn)行宏替換), 不編譯

-g1995, -g2001, -g2005 ...: 選擇支持的verilog語言版本.

-I includedir: 指定(添加)verilog中include指令的搜索路徑

-s topmodule : 指定要建立的頂層模塊. 默認(rèn)是沒有被實(shí)例化的哪些module

VPI: Verilog Prodecure Interface(VPI), 最開始也稱作PLI 2.0, 一個(gè)主要面向C語言接口. 可以讓行為級(jí)別的Verilog代碼調(diào)用C函數(shù), 讓C函數(shù)調(diào)用標(biāo)準(zhǔn)Verilog系統(tǒng)函數(shù).


1//adder.c 2#include 3 4staticintsum_compiletf(char*user_data) 5{ 6fprintf(stderr,"Yes,youcompiledme "); 7return0; 8} 9 10staticintsum(char*user_data) 11{ 12vpiHandlesystfref,args_iter,argh; 13//typedefstructt_vpi_values_vpi_value 14structt_vpi_valueargval; 15unsignedintvalue,value2; 16charres[1024]; 17 18systfref=vpi_handle(vpiSysTfCall,NULL); 19args_iter=vpi_iterate(vpiArgument,systfref);//迭代所有參數(shù). 20 21argh=vpi_scan(args_iter);//獲取下一個(gè)參數(shù) 22argval.format=vpiIntVal;//設(shè)定格式為int 23vpi_get_value(argh,&argval);//獲取參數(shù)值 24value=argval.value.integer;//讀取獲取到的參數(shù)值 25 26argh=vpi_scan(args_iter);//獲取下一個(gè)參數(shù) 27argval.format=vpiHexStrVal;//以hex格式讀入 28vpi_get_value(argh,&argval); 29sscanf(argval.value.str,"%x",&value2);//將hexstr格式讀入的值轉(zhuǎn)換為int 30 31argh=vpi_scan(args_iter);//獲取第三個(gè)參數(shù) 32argval.format=vpiHexStrVal;//設(shè)置格式為hexstr,verilog讀取的時(shí)候會(huì)自動(dòng)轉(zhuǎn)換的. 33sprintf(res,"%x",value+value2);//在C里計(jì)算兩個(gè)值的和,并將其轉(zhuǎn)換為hex格式的字符串 34 35argval.value.str=res; 36vpi_put_value(argh,&argval,0,vpiNoDelay);//設(shè)置第三個(gè)參數(shù)的值 37 38vpi_put_value(systfref,&argval,0,vpiNoDelay); 39vpi_free_object(args_iter); 40return0; 41} 42 43 44//注冊(cè)$sum 45voidsum_register(){ 46s_vpi_systf_datatf_data; 47 48tf_data.type=vpiSysTask;//類型.還有一個(gè)是SysFunc 49tf_data.tfname="$sum";//在verilog中調(diào)用的名稱 50tf_data.calltf=sum;//被verilog調(diào)用時(shí)調(diào)用的函數(shù) 51tf_data.compiletf=sum_compiletf;//被編譯時(shí)調(diào)用的函數(shù) 52tf_data.sizetf=0;//不知道 53tf_data.user_data=0;//不知道 54vpi_register_systf(&tf_data);//注冊(cè) 55} 56 57 58 59//在這個(gè)函數(shù)數(shù)組里的函數(shù)會(huì)自動(dòng)被調(diào)用. 60void(*vlog_startup_routines[])()={ 61sum_register, 620 63}; 修改tb來調(diào)用$sum:

1//adder_tb.v 2`timescale1ns/1ns 3moduleadder_tb(); 4reg[3:0]a; 5reg[3:0]b; 6wire[7:0]c; 7 8regclk,rst_n; 9 10integeri,n,nf; 11 12adderDUT( 13.clk(clk), 14.rst_n(rst_n), 15.a(a), 16.b(b), 17.c(c) 18); 19 20alwaysbegin 21#10clk=0; 22#10clk=1; 23end 24 25initialbegin 26$display("============================="); 27$display("Tbstartathere"); 28rst_n=1; 29n=0; 30nf=0; 31//$test($random%4,2); 32for(i=0;i編譯運(yùn)行:

1iverilogadder_rtl.vadder_tb.v-oadder.vvp 2iverilog-vpiadder.c 3vvp-M.-madderadder.vvp iverilog-vpi: 自帶的幫助生成庫的腳本 -M path: 將path加入定位VPI模塊的路徑, .: 當(dāng)前路徑 -m module: 告訴vvp在執(zhí)行simulation之前加載指定的module. 8dbbf87e-1c2f-11ed-ba43-dac502259ad0.png?
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110074
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32852
  • 仿真工具
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    10801

原文標(biāo)題:一文學(xué)會(huì)使用全球第四大數(shù)字芯片仿真器iverilog!

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA Verilog編譯和Syntesi工具怎么使用

    嗨,我是FPGA和FPGA的新手。 HDL(Verilog)也是這里的新論壇。剛從Pargue(捷克共和國(guó))發(fā)布我的Hello我希望編譯位文件作為練習(xí)(由Wirth ETH Zurig大學(xué)教授
    發(fā)表于 05-20 15:35

    GAL編譯工具

    GAL編譯工具 Atmel提供的GAL編譯工具 4.8a版本
    發(fā)表于 04-14 15:42 ?83次下載

    基于Verilog的順序狀態(tài)邏輯FSM的設(shè)計(jì)與仿真

    基于Verilog的順序狀態(tài)邏輯FSM的設(shè)計(jì)與仿真  硬件描述語言Verilog為數(shù)字系統(tǒng)設(shè)計(jì)人員提供了一種在廣泛抽象層次上描述數(shù)字系統(tǒng)的方式,同時(shí),為計(jì)算機(jī)輔助設(shè)計(jì)工具
    發(fā)表于 02-04 09:32 ?1883次閱讀
    基于<b class='flag-5'>Verilog</b>的順序狀態(tài)邏輯FSM的設(shè)計(jì)與<b class='flag-5'>仿真</b>

    北大微電子verilog講義課件

    介紹Cadence Verilog仿真器, 內(nèi)容包括: 設(shè)計(jì)的編譯仿真 源庫(source libraries)的使用 用Verilog-
    發(fā)表于 05-28 15:23 ?402次下載
    北大微電子<b class='flag-5'>verilog</b>講義課件

    基于STC-TOOL_STC單片機(jī)編譯(匯編)編程(燒錄)仿真工具說明書

    基于STC-TOOL_STC單片機(jī)編譯(匯編)編程(燒錄)仿真工具說明書
    發(fā)表于 10-16 10:11 ?28次下載
    基于STC-TOOL_STC單片機(jī)<b class='flag-5'>編譯</b>(匯編)編程(燒錄)<b class='flag-5'>仿真</b><b class='flag-5'>工具</b>說明書

    verilog編譯指令_verilog編譯器指示語句(數(shù)字IC)

    以`(反引號(hào))開始的某些標(biāo)識(shí)符是編譯器指令。在Verilog 語言編譯時(shí),特定的編譯器指令在整個(gè)編譯過程中有效(
    的頭像 發(fā)表于 03-23 13:40 ?1.5w次閱讀
    <b class='flag-5'>verilog</b><b class='flag-5'>編譯</b>指令_<b class='flag-5'>verilog</b><b class='flag-5'>編譯</b>器指示語句(數(shù)字IC)

    Verilog HDL基礎(chǔ)語法入門

    簡(jiǎn)單介紹Verilog HDL語言和仿真工具
    發(fā)表于 05-06 16:17 ?618次下載

    如何使用Icarus Verilog+GTKWave來進(jìn)行verilog文件的編譯仿真

    本文將介紹如何使用Icarus Verilog+GTKWave來進(jìn)行verilog文件的編譯仿真。 Icarus Verilog Icar
    的頭像 發(fā)表于 07-27 09:16 ?5387次閱讀
    如何使用Icarus <b class='flag-5'>Verilog</b>+GTKWave來進(jìn)行<b class='flag-5'>verilog</b>文件的<b class='flag-5'>編譯</b>和<b class='flag-5'>仿真</b>

    Verilog HDL 編譯器指令說明

    Verilog HDL 編譯器指令 復(fù)雜一點(diǎn)的系統(tǒng)在進(jìn)行設(shè)計(jì)或者驗(yàn)證時(shí),都會(huì)用到一些編譯器指令,那么什么是編譯器指令? ? Verilog
    的頭像 發(fā)表于 11-03 09:31 ?3719次閱讀
    <b class='flag-5'>Verilog</b> HDL <b class='flag-5'>編譯</b>器指令說明

    使用開源verilog仿真工具進(jìn)行文件的編譯仿真

    Icarus VerilogIcarus Verilog極其小巧,支持全平臺(tái)Windows+Linux+MacOS,并且源代碼開源。通過tb文件可以生成對(duì)應(yīng)的仿真波形數(shù)據(jù)文件。
    的頭像 發(fā)表于 11-21 09:40 ?3117次閱讀

    VCS編譯選項(xiàng):-y及+libext+

    VCS是一款常見的Verilog編譯工具,它提供很多編譯選項(xiàng)來控制編譯過程及其輸出。本文主要介紹以下兩個(gè)
    的頭像 發(fā)表于 05-29 14:46 ?1.2w次閱讀

    介紹下Verilog系統(tǒng)完整的8種編譯指令

    以反引號(hào)(`)開始的某些標(biāo)識(shí)符是 Verilog 系統(tǒng)編譯指令。編譯指令為 Verilog 代碼的撰寫、編譯、調(diào)試等提供了極大的便利。
    的頭像 發(fā)表于 05-29 16:43 ?1777次閱讀

    Verilog仿真激勵(lì)舉例

    Verilog 代碼設(shè)計(jì)完成后,還需要進(jìn)行重要的步驟,即邏輯功能仿真。仿真激勵(lì)文件稱之為 testbench,放在各設(shè)計(jì)模塊的頂層,以便對(duì)模塊進(jìn)行系統(tǒng)性的例化調(diào)用進(jìn)行仿真。
    的頭像 發(fā)表于 06-02 11:35 ?1503次閱讀
    <b class='flag-5'>Verilog</b><b class='flag-5'>仿真</b>激勵(lì)舉例

    Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南

    指南: Verilog測(cè)試平臺(tái)設(shè)計(jì)方法 選擇仿真工具 : 選擇一款強(qiáng)大的仿真工具,如ModelSim、Xilinx ISE等。這些
    的頭像 發(fā)表于 12-17 09:50 ?119次閱讀

    Verilog 電路仿真常見問題 Verilog 在芯片設(shè)計(jì)中的應(yīng)用

    。然而,在實(shí)際應(yīng)用中,設(shè)計(jì)師可能會(huì)遇到各種問題,這些問題可能會(huì)影響仿真的準(zhǔn)確性和設(shè)計(jì)的可靠性。 Verilog電路仿真常見問題 仿真環(huán)境的搭建問題
    的頭像 發(fā)表于 12-17 09:53 ?112次閱讀
    RM新时代网站-首页