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
相关推荐
Hello-FPGA8 小时前
基于RFSOC FPGA ZCU216 的CoaXPress 采集demo
fpga开发
9527华安10 小时前
FPGA基于ADV7182解码PAL视频,Video Processing Subsystem去隔行,提供6套工程源码和技术支持
fpga开发·音视频·pal·adv7182
hahaha601610 小时前
数字图像时域滤波或者3D降噪算法FPGA实现
算法·计算机视觉·fpga开发
GateWorld10 小时前
Xilinx 7系列FPGA时钟网络详解
fpga开发·时钟网络·xilinx 7系列
szxinmai主板定制专家1 天前
X86 工控机 vs RK3588 异构主控:AMR 控制器 BOM、散热、长期运维对比
运维·stm32·单片机·嵌入式硬件·fpga开发·am62x
szxinmai主板定制专家1 天前
AMR 项目落地:机器人控制器硬件定制化需求复盘
arm开发·单片机·fpga开发·系统架构·机器人·am62x
FPGA小迷弟2 天前
FPGA 与卫星:从星载硬件到在轨智能的完整技术解析
fpga开发·架构·fpga·1024程序员节·无线电
NamoAmitabha1282 天前
CPU 内部结构是什么?---deepseek
fpga开发
abc light2 天前
ARM 裸机开发(6)——时钟树与定时器
arm开发·单片机·fpga开发
156082072193 天前
JFMZQ28DR、JFMZQ68DR、RFsoc XCZU47DR、XCZU48DR 信号处理板
fpga开发·信号处理