Icarus Verilog安装和验证

本文介绍了如何安装带有gtkwave的软件包,以及如何使用IcarusVerilog编译和仿真一个简单的编码器模块,并生成ValueChangeDump(VCD)文件,最后展示了gtkwave工具的使用方法来分析仿真波形。
摘要由CSDN通过智能技术生成

安装

安装软件: 软件下载地址 http://bleyer.org/icarus/
新版本中软件带的有gtkwave。安装时,会默认安装。
安装后,确认iverilog是否已经添加到系统变量中,如果没有,则手动添加一下 

 安装完成后可以使用命令行查看iverilog的位置,若有则安装成功

C:\Users\Lenovo>where iverilog
D:\Research\HDLiverilog\iverilog\bin\iverilog.exe

源程序

实现一个简单的编码器

module encoder(binary_out,encoder_in,enable);

output [3:0] binary_out;
input enable;
input [15:0] encoder_in;
reg [3:0] binary_out;

always @ (enable or encoder_in)
    begin
        binary_out = 0;
        if(enable) begin
            if(encoder_in == 16'h0002) begin
                binary_out = 1;
            end if(encoder_in == 16'h0004) begin
                binary_out = 2;
            end if(encoder_in == 16'h0008) begin
                binary_out = 3;
            end if(encoder_in == 16'h0010) begin
                binary_out = 4;
            end if(encoder_in == 16'h0020) begin
                binary_out = 5;
            end if(encoder_in == 16'h0040) begin
                binary_out = 6;
            end if(encoder_in == 16'h0080) begin
                binary_out = 7;
            end if(encoder_in == 16'h0100) begin
                binary_out = 8;
            end if(encoder_in == 16'h0200) begin
                binary_out = 9;
            end if(encoder_in == 16'h0400) begin
                binary_out = 10;
            end if(encoder_in == 16'h0800) begin
                binary_out = 11;
            end if(encoder_in == 16'h1000) begin
                binary_out = 12;
            end if(encoder_in == 16'h2000) begin
                binary_out = 13;
            end if(encoder_in == 16'h4000) begin            
                binary_out = 14;
            end if(encoder_in == 16'h8000) begin
                binary_out = 15;
            end
        end
    end
endmodule

测试文件

module encoder_te();
    
    reg enable;
    reg [15:0] encoder_in; 
    wire [3:0] binary_out;
    
    initial begin
        $dumpfile("test.vcd");  //这两行主要是给 gtkwave工具使用
        $dumpvars(0,encoder_te);
        
        $monitor("%g\t %b %b %b",
                $time,enable,encoder_in,binary_out);
                
        enable = 0;
        #5 enable = 1;
        #5 encoder_in = 16'h0004;
        #6 encoder_in = 16'h0040;
        #7 encoder_in = 16'h0400;
        #8 encoder_in = 16'h1000;
        #10 $finish;        
    end
    
    encoder en(binary_out,encoder_in,enable);
    
endmodule

解析

在数字电路设计和仿真中,dumpfile 是一个命令或系统任务,用于生成 Value Change Dump(VCD)文件。VCD 文件记录了在数字电路仿真过程中模拟器中各个信号的值变化。

通常的结构
initial begin
  // 指定 VCD 文件的名称
  $dumpfile("test.vcd");

  // 选择要记录的信号
  $dumpvars(0, top_module); // 这里的 top_module 是要记录的模块或实例的名称

  // 初始化代码,仿真开始
end

 这个软件没有界面,只能在cmd窗口里运行。

 编译

打开命令行

先跳转到文件所在位置

C:\Users\Lenovo>cd /d F:\VIVADO\cocotb

 编译

F:\VIVADO\cocotb>iverilog -o dsn encoder.v encoder_te.v

iverilog -o dsn your_verilog_files.v 这个命令用于编译 Verilog 代码,并生成一个仿真可执行文件,文件名为 dsn。这个可执行文件仿真器的内部逻辑,包括模块、信号、事件和仿真的控制流。它们通常是仿真器生成的中间表示,用于模拟 Verilog 代码的行为。

举例,下面的代码是仿真可执行文件中的具体代码,展示了一些内部指令和详细解释

T_0.20 ;
    %load/vec4 v0000022aaa90c8f0_0;
//这个指令表示从信号 v0000022aaa90c8f0_0 中加载一个 4 位向量。
    %cmpi/e 2048, 0, 16;
//这个指令进行比较,检查加载的向量的值是否等于 2048。
    %jmp/0xz  T_0.22, 4;
//跳转指令。0xz 表示当条件为零时才进行跳转
    %pushi/vec4 11, 0, 4;
//将一个 4 位的常数值 11 推送到堆栈上
    %store/vec4 v0000022aaa90c7b0_0, 0, 4;
//将推送到堆栈上的值(这里是常数 11)存储到信号 v0000022aaa90c7b0_0 中

 运行

F:\VIVADO\cocotb>vvp dsn
  1. vvp 是 Icarus Verilog 提供的用于运行 Verilog 模拟的命令行工具
  2. dsn 是仿真模块的文件名
生成结果
VCD info: dumpfile test.vcd opened for output.//表示test.vcd 文件被打开用于输出。
0        0 xxxxxxxxxxxxxxxx 0000
5        1 xxxxxxxxxxxxxxxx 0000
10       1 0000000000000100 0010
16       1 0000000001000000 0110
23       1 0000010000000000 1010
31       1 0001000000000000 1100
encoder_te.v:20: $finish called at 41 (1s) //仿真器执行到了 $finish 语句

仿真波形显示

F:\VIVADO\cocotb>gtkwave test.vcd

 使用gtkwave工具

 

 参考:Icarus Verilog的使用 - zhuangzhuang1988 - 博客园 (cnblogs.com)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值