iverilog 配合 Makefile 搭建 Verilog 仿真工程

相关参考

ModelSim 配合 Makefile 搭建 Verilog 仿真工程

iverilog-v11-20190809-x64_setup.exe 安装

目录结构

bash 复制代码
PS D:\test\ax301> tree  /f
卷 新加卷 的文件夹 PATH 列表
卷序列号为 1E8A-2CFF
D:.
│  clock_div.v
│  Makefile
│  tb.sv

命令

手动执行

bash 复制代码
Windows PowerShell
版权所有(C) Microsoft Corporation。保留所有权利。

安装最新的 PowerShell,了解新功能和改进!https://aka.ms/PSWindows

PS D:\test\ax301> iverilog -g2012 -o sim tb.sv clock_div.v
PS D:\test\ax301> vvp sim
VCD info: dumpfile clock_div.vcd opened for output.
===== Start clk_div simulation (N = 2) =====
===== End clk_div simulation =====
PS D:\test\ax301> gtkwave clock_div.vcd

GTKWave Analyzer v3.3.71 (w)1999-2016 BSI

[0] start time.
[2000000] end time.

一步到位

bash 复制代码
 make run

代码更改重新编译

bash 复制代码
make clean
make 
# 手动刷新GTKWave

要保存gtkwave工程,防止选择的信号丢失

bash 复制代码
# 打开gtkwave工程文件
make viewGtk

文件

clock_div.v

verilog 复制代码
`timescale 1ns / 1ps
module clock_div#(
    parameter P_CLK_DIV_CNT = 2 //MAX = 65535
)(
    input    i_clk     ,
    input    i_rst_n     ,
    output   o_clk_div
    );
reg         ro_clk_div ;

reg  [15:0] r_cnt      ;
assign o_clk_div = ro_clk_div;

localparam L_COMPARE_CNT = P_CLK_DIV_CNT/2 - 1;

always @(posedge i_clk or negedge i_rst_n)begin
    if(!i_rst_n)
        r_cnt <= 'd0;
    else if(r_cnt == L_COMPARE_CNT)
        r_cnt <= 'd0;
    else
        r_cnt <= r_cnt + 1;
end

always @(posedge i_clk or negedge i_rst_n)begin
    if(!i_rst_n)
        ro_clk_div <= 'd0;
    else if(r_cnt == L_COMPARE_CNT)
        ro_clk_div <= ~ro_clk_div;
    else
        ro_clk_div <= ro_clk_div;
end

endmodule

tb.sv (生成vcd文件)

verilog 复制代码
`timescale 1ns / 1ps

module tb;

    // ---------------------------------
    // 参数:分频系数
    // ---------------------------------
    parameter int P_CLK_DIV_CNT = 2;

    // ---------------------------------
    // 信号声明
    // ---------------------------------
    reg  i_clk;
    reg  i_rstn;
    wire o_clk_div;

    // ---------------------------------
    // 实例化被测模块
    // ---------------------------------
    clock_div #(
        .P_CLK_DIV_CNT(P_CLK_DIV_CNT)
    ) dut (
        .i_clk     (i_clk),
        .i_rst_n   (i_rstn),
        .o_clk_div (o_clk_div)
    );

    // ---------------------------------
    // 生成时钟:50MHz (20ns)
    // ---------------------------------
    initial i_clk = 1'b0;
    always  #10 i_clk = ~i_clk;

    // ---------------------------------
    // 复位过程
    // ---------------------------------
    initial begin
        i_rstn = 1'b0;
        #100;
        i_rstn = 1'b1;
    end

    // ---------------------------------
    // VCD 波形输出(关键)
    // ---------------------------------
    initial begin
        $dumpfile("clock_div.vcd"); // 生成的波形文件名
        $dumpvars(0, tb);           // dump 整个 tb 层级
    end

    // ---------------------------------
    // 仿真时间控制
    // ---------------------------------
    initial begin
        $display("===== Start clk_div simulation (N = %0d) =====",
                  P_CLK_DIV_CNT);

        #2000;

        $display("===== End clk_div simulation =====");
        $finish;
    end

endmodule

Makefile

bash 复制代码
# =========================
# Icarus Verilog + GTKWave
# =========================

# 工具
IVERILOG = iverilog
VVP      = vvp
GTKWAVE  = gtkwave

# 文件
TOP_TB   = tb.sv
SRCS     = clock_div.v
SIM      = sim
WAVE     = clock_div.vcd
GTK_PRJ  = clock_div.gtkw

# 默认目标
all: sim wave

# 编译
sim:
	$(IVERILOG) -g2012 -o $(SIM) $(TOP_TB) $(SRCS)

# 仿真(生成 VCD)
wave: sim
	$(VVP) $(SIM)

# 打开 GTKWave
view:
	$(GTKWAVE) $(WAVE)

# 打开GTK工程,防止选择的信号丢失
viewGtk:
	$(GTKWAVE) $(GTK_PRJ)

# 一步到位
run: sim wave view

# 清理
clean:
	del /Q $(SIM) $(WAVE) 2>nul || exit 0
相关推荐
FPGA小徐10 小时前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐11 小时前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH1 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡1 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安1 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐2 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯2 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客2 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA2 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发
明德扬2 天前
AD采集卡应用示例交流:从传感器采集到高速信号验证
fpga开发