www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 電子電路開發(fā)學習
[導讀]1.?前言如果你只是想檢查Verilog文件的語法是否有錯誤,然后進行一些基本的時序仿真,那么IcarusVerilog就是一個不錯的選擇。相比于各大FPGA廠商的IDE幾個G的大小,IcarusVerilog顯得極其小巧,最新版安裝包大小僅有17MB,支持全平臺:Windows...

1.?前言

如果你只是想檢查Verilog文件的語法是否有錯誤,然后進行一些基本的時序仿真,那么Icarus Verilog 就是一個不錯的選擇。相比于各大FPGA廠商的IDE幾個G的大小,Icarus Verilog 顯得極其小巧,最新版安裝包大小僅有17MB,支持全平臺:Windows Linux MacOS,并且源代碼開源。本文將介紹如何使用Icarus Verilog來進行verilog文件的編譯和仿真。

2. 關(guān)于 Icarus Verilog

Icarus Verilog是一個輕量、免費、開源的Verilog編譯器,基于C 實現(xiàn),開發(fā)者是 Stephen Williams ,遵循 GNU GPL license 許可證,安裝文件中已經(jīng)包含 GTKWave支持Verilog/VHDL文件的編譯和仿真,命令行操作方式,類似gcc編譯器,通過testbench文件可以生成對應的仿真波形數(shù)據(jù)文件,通過自帶的GTKWave可以查看仿真波形圖,支持將Verilog轉(zhuǎn)換為VHDL文件。

3. iverilog的安裝

iverilog安裝時,默認會把GTKWave一起安裝,用于查看生成的波形圖。

iverilog支持Windows、Linux和MacOS三大主流平臺,截止2019年12月1日,最新版本v11-20190809下載:

http://bleyer.org/icarus/iverilog-v11-20190809-x64_setup.exe

3.1 Windows下的安裝

Windows下直接雙擊上面下載的安裝文件即可,安裝完成后安裝目錄如下:

3.2 Linux下的安裝

Linux下的安裝,以Ubuntu 16.04為例,可以通過apt-get直接安裝。

  • 安裝iverilog:?sudo apt-getinstall iverilog

  • 安裝GTKWave:?sudo apt-getinstall gtkwave

不能成功安裝的,嘗試更換鏡像地址,我使用的是網(wǎng)易的開源鏡像地址。

3.3 MacOS下的安裝

Mac下的安裝可以通過 macports 或者 homebrew 來安裝,

通過 Macports 安裝:

  • 安裝iverilog:?

    sudo ports-d-v install iverilog

  • 安裝GTKWave:

    ?sudo ports-d-v install gtkwave

通過 homebrew 安裝:

  • 安裝iverilog:?

    brew install icarus-verilog

  • 安裝GTKWave:?

    brew install caskroom/cask/gtkwave

3.4 查看是否安裝成功

安裝成功后,可以通過命令窗口來查看命令所在的路徑。

Windows環(huán)境可以通過where命令查看安裝路徑

  1. where iverilog

  2. where vvp

  3. where gtkwave

Linux環(huán)境可以通過which命令查看安裝路徑

  1. which iverilog

  2. which vvp

  3. which gtkwave

4. 基本參數(shù)介紹

Icarus Verilog編譯器主要包含3個工具:

  • iverilog:用于編譯verilog和vhdl文件,進行語法檢查,生成可執(zhí)行文件

  • vvp:根據(jù)可執(zhí)行文件,生成仿真波形文件

  • gtkwave:用于打開仿真波形文件,圖形化顯示波形

在終端輸入 iverilog回車,可以看到常用參數(shù)使用方法的簡單介紹:

  1. $ iverilog

  2. D:\iverilog\bin\iverilog.exe: no source files.


  3. Usage: iverilog [-EiSuvV] [-B base] [-c cmdfile|-f cmdfile]

  4. [-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012] [-g]

  5. [-D macro[=defn]] [-I includedir]

  6. [-M [mode=]depfile] [-m module]

  7. [-N file] [-o filename] [-p flag=value]

  8. [-s topmodule] [-t target] [-T min|typ|max]

  9. [-W class] [-y dir] [-Y suf] [-l file] source_file(s)


  10. See the man page for details.

下面來詳細介紹幾個常用參數(shù)的使用方法。

4.1 參數(shù)-o

這是比較常用的一個參數(shù)了,和GCC中-o的使用幾乎一樣,用于指定生成文件的名稱。如果不指定,默認生成文件名為a.out。如:iverilog-o test test.v

4.2 參數(shù)-y

用于指定包含文件夾,如果top.v中調(diào)用了其他的的.v模塊,top.v直接編譯會提示

  1. led_demo_tb.v:38: error: Unknownmodule type: led_demo

  2. 2 error(s) during elaboration.

  3. *** These modules were missing:

  4. led_demo referenced 1 times.

  5. ***

找不到調(diào)用的模塊,那么就需要指定調(diào)用模塊所在文件夾的路徑,支持相對路徑和絕對路徑。

如:iverilog-y D:/test/demo led_demo_tb.v

如果是同一目錄下:iverilog-y./led_demo_tb.v,另外,iverilog還支持Xilinx、Altera、Lattice等FPGA廠商的仿真庫,需要在編譯時通過-y參數(shù)指定庫文件的路徑,詳細的使用方法可以查看官方用戶指南:

https://iverilog.fandom.com/wiki/User_Guide

4.3 參數(shù)-I

如果程序使用`include語句包含了頭文件路徑,可以通過-i參數(shù)指定文件路徑,使用方法和-y參數(shù)一樣。

如:iverilog-I D:/test/demo led_demo_tb.v

4.4 參數(shù)-tvhdl

iverilog還支持把verilog文件轉(zhuǎn)換為VHDL文件,如 iverilog-tvhdl-o out_file.vhd in_file.v

5. Verilog的編譯仿真實際應用

新建led_demo.v源文件,內(nèi)容如下:

  1. module led_demo(

  2. input clk,

  3. input rst_n,


  4. output reg led

  5. );


  6. reg [7:0] cnt;


  7. always @ (posedge clk)

  8. begin

  9. if(!rst_n)

  10. cnt <= 0;

  11. elseif(cnt >= 10)

  12. cnt <= 0;

  13. else

  14. cnt <= cnt 1;

  15. end


  16. always @ (posedge clk)

  17. begin

  18. if(!rst_n)

  19. led <= 0;

  20. elseif(cnt == 10)

  21. led <= !led;

  22. end


  23. endmodule

功能非常簡單,每10個時鐘周期,led翻轉(zhuǎn)一次。

仿真testbench文件leddemotb.v,內(nèi)容如下:

  1. `timescale 1ns/100ps


  2. module led_demo_tb;


  3. parameter SYSCLK_PERIOD = 10;


  4. reg SYSCLK;

  5. reg NSYSRESET;


  6. initial

  7. begin

  8. SYSCLK = 1'b0;

  9. NSYSRESET = 1'b0;

  10. end


  11. /*iverilog */

  12. initial

  13. begin

  14. $dumpfile("wave.vcd"); //生成的vcd文件名稱

  15. $dumpvars(0, led_demo_tb); //tb模塊名稱

  16. end

  17. /*iverilog */


  18. initial

  19. begin

  20. #(SYSCLK_PERIOD * 10 )

  21. NSYSRESET = 1'b1;

  22. #1000

  23. $stop;

  24. end


  25. always @(SYSCLK)

  26. #(SYSCLK_PERIOD / 2.0) SYSCLK <= !SYSCLK;


  27. led_demo led_demo_ut0 (

  28. // Inputs

  29. .rst_n(NSYSRESET),

  30. .clk(SYSCLK),


  31. // Outputs

  32. .led( led)

  33. );


  34. endmodule

注意testbench文件中有幾行iverilog編譯器專用的語句,如果不加的話后面不能生成vcd文件。

  1. initial

  2. begin

  3. $dumpfile("wave.vcd"); //生成的vcd文件名稱

  4. $dumpvars(0, led_demo_tb); //tb模塊名稱

  5. end

5.1 編譯

通過 iverilog-o wave led_demo_tb.v led_demo.v命令,對源文件和仿真文件,進行語法規(guī)則檢查和編譯。由于本示例比較簡單,只有1個文件,如果調(diào)用了多個.v的模塊,可以通過前面介紹的-y參數(shù)指定源文件的路徑,否則編譯報錯。如果源文件都在同同一個目錄,可以直接通過 ./絕對路徑的方式來指定。

例如,leddemotb.v中調(diào)用了led_demo.v模塊,就可以直接使用 iverilog-o wave-y./top.v top_tb.v來進行編譯。

如果編譯成功,會在當前目錄下生成名稱為wave的文件。

5.2 生成波形文件

使用 vvp-n wave-lxt2命令生成vcd波形文件,運行之后,會在當前目錄下生成.vcd文件。

如果沒有生成,需要檢查testbench文件中是否添加了如下幾行:

  1. initial

  2. begin

  3. $dumpfile("wave.vcd"); //生成的vcd文件名稱

  4. $dumpvars(0, led_demo_tb); //tb模塊名稱

  5. end

5.3 打開波形文件

使用命令 gtkwave wave.vcd,可以在圖形化界面中查看仿真的波形圖。

6. Verilog轉(zhuǎn)換為VHDL

雖然VHDL和Verilog都誕生于20世紀80年代,而且都屬于硬件描述語言(HDL),但是二者的語法特性卻不一樣。Icarus Verilog 還有一個小功能就是支持把使用Verilog語言編寫的.v文件轉(zhuǎn)換為VHDL語言的.vhd文件。

如把leddemo.v文件轉(zhuǎn)換為VHDL文件leddemo.vhd,使用命令 iverilog-tvhdl-o led_demo.vhd led_demo.v。

生成的VHDL文件內(nèi)容如下:

  1. -- This VHDL was converted fromVerilogusing the

  2. -- IcarusVerilog VHDL CodeGenerator11.0(devel) (s20150603-612-ga9388a89)


  3. library ieee;

  4. use ieee.std_logic_1164.all;

  5. use ieee.numeric_std.all;


  6. -- GeneratedfromVerilogmodule led_demo (led_demo.v:1)

  7. entity led_demo is

  8. port (

  9. clk : in std_logic;

  10. led : out std_logic;

  11. rst_n : in std_logic

  12. );

  13. end entity;


  14. -- GeneratedfromVerilogmodule led_demo (led_demo.v:1)

  15. architecture from_verilog of led_demo is

  16. signal led_Reg : std_logic;

  17. signal cnt : unsigned(7 downto 0); -- Declared at led_demo.v:8

  18. begin

  19. led <= led_Reg;


  20. -- Generatedfrom always process in led_demo (led_demo.v:10)

  21. process (clk) is

  22. begin

  23. if rising_edge(clk) then

  24. if(not rst_n) = '1'then

  25. cnt <= X"00";

  26. else

  27. ifResize(cnt, 32) >= X"0000000a"then

  28. cnt <= X"00";

  29. else

  30. cnt <= cnt X"01";

  31. endif;

  32. endif;

  33. endif;

  34. end process;


  35. -- Generatedfrom always process in led_demo (led_demo.v:20)

  36. process (clk) is

  37. begin

  38. if rising_edge(clk) then

  39. if(not rst_n) = '1'then

  40. led_Reg <= '0';

  41. else

  42. ifResize(cnt, 32) = X"0000000a"then

  43. led_Reg <= not led_Reg;

  44. endif;

  45. endif;

  46. endif;

  47. end process;

  48. end architecture;

7. VHDL文件的編譯和仿真

如果你還和編譯Verilog一樣,使用 iverilog led_dmeo.v來編譯VHDL文件的話,那么會提示有語法錯誤,這是正常的,因為Verilog和VHDL是不同的語法規(guī)則,不能使用Verilog的標準來檢查VHDL文件的語法。需要添加 -g2012參數(shù)來對VHDL文件進行編譯,如 iverilog-g2012 led_demo.vhd,和Verilog一樣,同樣也支持Testbech文件的編譯和仿真,當然需要編寫對應的VHDL Testbench文件。

8. 批處理文件一鍵執(zhí)行

通過批處理文件,可以簡化編譯仿真的執(zhí)行過程,直接一鍵執(zhí)行編譯和仿真。

新建文本文檔,輸入以下內(nèi)容:

  1. echo "開始編譯"

  2. iverilog -o wave led_demo.v led_demo_tb.v

  3. echo "編譯完成"

  4. vvp -n wave -lxt2

  5. echo "生成波形文件"

  6. cp wave.vcd wave.lxt

  7. echo "打開波形文件"

  8. gtkwave wave.lxt

文件擴展名需要更改,Windows系統(tǒng)保存為.bat文件,Linux系統(tǒng)保存為.sh文件。Windows直接雙擊運行,Linux在終端執(zhí)行。

9. 總結(jié)

從20040706版本,到現(xiàn)在的最新版本20190809,作者還在繼續(xù)更新,有興趣的朋友可以研究一下源代碼是如何實現(xiàn)語法規(guī)則檢查的,或者可以嘗試編譯源碼,獲得最新的版本。當然,和FPGA廠商的IDE相比,功能還是非常有限,GTKWave界面也比較簡陋,如不支持寬度測量等,主要是小巧 全平臺支持,可以配合IDE來使用。這個工具還支持主流FPGA廠商的IP核仿真,如Xilinx和Lattice,詳細的使用方法可以參考官方使用指南。

10. 參考資料

文章部分內(nèi)容參考自Icarus Verilog官方網(wǎng)站。

  • iverilog官網(wǎng):

    http://iverilog.icarus.com/

  • iverilog下載:

    http://bleyer.org/icarus/

  • iverilog用戶指南:

    https://iverilog.fandom.com/wiki/User_Guide

  • Github開源地址:

    https://github.com/steveicarus/iverilog

  • GTKWave下載(iverilog已經(jīng)包含):

    http://gtkwave.sourceforge.net/

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

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉