而在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是一款免费的波形查看器