日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

1.?前言

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

2. 關(guān)于 Icarus Verilog

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

3. iverilog的安裝

iverilog安裝時,默認(rèn)會把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文件,進(jìn)行語法檢查,生成可執(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.

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

4.1 參數(shù)-o

這是比較常用的一個參數(shù)了,和GCC中-o的使用幾乎一樣,用于指定生成文件的名稱。如果不指定,默認(rèn)生成文件名為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ù)指定庫文件的路徑,詳細(xì)的使用方法可以查看官方用戶指南:

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的編譯仿真實際應(yīng)用

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

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

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

5.2 生成波形文件

使用 vvp-n wave-lxt2命令生成vcd波形文件,運(yùn)行之后,會在當(dāng)前目錄下生成.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世紀(jì)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的標(biāo)準(zhǔn)來檢查VHDL文件的語法。需要添加 -g2012參數(shù)來對VHDL文件進(jìn)行編譯,如 iverilog-g2012 led_demo.vhd,和Verilog一樣,同樣也支持Testbech文件的編譯和仿真,當(dāng)然需要編寫對應(yīng)的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

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

9. 總結(jié)

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

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉