而在Linux操作系統中,Iverilog作為一款輕量級、高效的Verilog仿真工具,憑借其開源和易于使用的特性,成為了許多硬件工程師和愛好者的首選
本文將詳細介紹如何在Linux環境下,利用Iverilog進行Verilog代碼的仿真,并通過GTKwave波形查看器來可視化仿真結果
一、環境準備 首先,我們需要在Linux系統上安裝Iverilog和GTKwave
以Ubuntu 22.04 LTS為例,可以通過以下命令進行安裝: sudo apt install iverilog sudo apt install gtkwave 安裝完成后,我們可以通過以下命令來驗證安裝是否成功: iverilog -V gtkwave -V 如果系統返回了相應的版本信息,說明安裝成功
二、Iverilog的使用 Iverilog是Icarus Verilog的簡稱,它是一個以編譯器形式工作的Verilog仿真工具
它將Verilog源代碼編譯成一種中間格式(通常是.vvp文件),然后可以通過Iverilog附帶的vvp命令來執行這個中間格式,生成仿真結果
1. 編寫Verilog文件 在進行仿真之前,我們需要編寫Verilog源代碼文件
例如,我們可以編寫一個簡單的加法器模塊(add.v)和一個測試平臺(test_tb.v)來測試這個加法器
add.v: ilog module add( input sclk, inputrst_n, input【7:0】 data1_i, input【7:0】 data2_i, outputreg 【7:0】data_o ); always@(posedge sclk or negedgerst_n) begin if(~rst_n) data_o <= 8b0; elsedata_o <= data1_i + data2_i; end endmodule test_tb.v: ilog `timescale 1ns / 1ps module test(); reg clk; regrst_n; reg【7:0】 data1_i; reg【7:0】 data2_i; wire【7:0】 data_o; initial begin $dumpfile(test.vcd); $dumpvars(0, test); clk = 0; forever5 clk = ~clk; rst_n = 0; data1_i = 0; data2_i = 0; #100 rst_n = 1; repeat(2@(posedgeclk) begin data1_i <= data1_i + 8d1; data2_i <= data2_i + 8d2; end #500 $stop; end addu_add( .sclk(clk), .rst_n(rst_n), .data1_i(data1_i), .data2_i(data2_i), .data_o(data_o) ); endmodule 2. 編譯與仿真 編寫完Verilog文件后,我們需要使用Iverilog進行編譯
編譯命令如下: iverilogtest_tb.v add.v -o test.vvp 這條命令會將test_tb.v和add.v兩個文件編譯成一個名為test.vvp的中間文件
編譯完成后,我們可以使用vvp命令來運行這個中間文件,并生成仿真結果(通常是.vcd文件): vvp -n test.vvp -lxt2 這條命令會運行test.vvp文件,并在終端上顯示仿真時的文字信息
同時,它會在當前目錄下生成一個名為test.vcd的波形數據文件
三、使用GTKwave查看波形 GTKwave是一款免費的波形查看器