1. VCS编译最小SystemVerilog模块

VCS编译最小SystemVerilog模块 学习卡片

任务目标

创建一个最小化的Verilog计数器模块,使用VCS完成编译、仿真,并生成VPD波形文件供DVE/Verdi查看,验证计数器功能正确。

环境依赖

  • VCS(Synopsys VCS MX)已安装并加入PATH
  • Linux环境(本文以bash为例)

设计文件:counter.v

module counter (
    input  wire       clk,
    input  wire       rst_n,
    output reg  [3:0] count
);
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            count <= 4'd0;
        else
            count <= count + 1'b1;
    end
endmodule

测试平台:tb_counter.v

`timescale 1ns/1ps
module tb_counter;
    reg        clk;
    reg        rst_n;
    wire [3:0] count;

    counter dut (
        .clk   (clk),
        .rst_n (rst_n),
        .count (count)
    );

    initial begin
        clk = 0;
        rst_n = 0;
        #20 rst_n = 1;
    end

    always #5 clk = ~clk;

    initial begin
        $vcdpluson;          // 生成VPD波形
        #200;
        $vcdplusoff;
        $finish;
    end

    // 自动检查:复位释放后,count应在每个时钟上升沿递增
    reg [3:0] expected;
    always @(posedge clk) begin
        if (rst_n) begin
            expected = (expected === 4'bx) ? 4'd0 : expected + 1'b1;
            if (count !== expected) begin
                $display("ERROR at time %0t: expected %0d, got %0d", $time, expected, count);
                $finish;
            end
        end
    end

    initial begin
        expected = 4'bx;
        #200;
        $display("Test completed successfully");
        $finish;
    end
endmodule

编译与仿真命令

# 编译(生成可执行文件 simv)
vcs -sverilog counter.v tb_counter.v -o simv

# 运行仿真(生成 vcdplus.vpd 波形文件)
./simv

验证方法

  1. 功能验证:仿真运行后,终端输出 Test completed successfully 表示计数器递增逻辑正确;若输出 ERROR 则说明计数与预期不符。
  2. 波形查看:仿真结束后,当前目录下生成 vcdplus.vpd 文件。使用以下命令打开波形:
dve -vpd vcdplus.vpd &
# 或使用 Verdi:
# verdi -vpd vcdplus.vpd &

在波形窗口中添加 tb_counter.clk、tb_counter.rst_n、tb_counter.count 信号,观察复位释放后 count 在每个时钟上升沿从0递增到15后回绕到0,即验证通过。

预期输出

Test completed successfully

该输出由测试平台中的自动比较逻辑产生,只要计数器行为正确即会打印此信息。

常见问题

  • vcs命令找不到:确认VCS安装路径已加入 PATH,或使用完整路径调用。
  • 波形文件未生成:检查测试平台中 $vcdpluson 是否在仿真结束前被调用,且仿真正常执行到 $finish。
  • 编译报错:确认文件后缀为 .v,且VCS版本支持 -sverilog 选项(若使用旧版本,可去掉该选项,本设计为Verilog-2001兼容)。