You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SystemVerilog时钟模块多驱动错误排查困惑求助

SystemVerilog计时模块多驱动冲突问题排查

错误根源明确

你遇到的"minute、hour变量不能同时被过程赋值和连续赋值驱动"错误,核心原因是信号被两个独立驱动源同时驱动:

  • 模块中output reg minute/hour是由内部always块(过程赋值)作为驱动源;
  • 测试台里的assign minute = 0/assign hour = 0是另一个独立的连续赋值驱动源。

SystemVerilog中,reg类型信号(包括output reg端口对应的内部寄存器)不允许多驱动,线网类型(wire)虽可多驱动但需特殊处理,这里你的测试台直接给模块输出端口对应的wire加了额外驱动,必然触发冲突。

代码对比验证

初始错误代码

design.sv

module timer(
    input clk,
    output reg minute,  // line1: 模块内用reg存储,由always块驱动
    output reg hour     // line2
);
    always @(posedge clk) begin
        // 计时逻辑:每分钟翻转minute,每60分钟翻转hour
        static int cnt = 0;
        cnt <= cnt + 1;
        if(cnt == 60) begin
            hour <= ~hour;
            cnt <= 0;
        end
        minute <= ~minute;
    end
endmodule

testbench.sv

module tb;
    reg clk;
    wire minute, hour;

    timer u_timer(
        .clk(clk),
        .minute(minute),
        .hour(hour)
    );

    assign minute = 0;  // line3: 测试台额外驱动,引发多冲突
    assign hour = 0;

    initial begin
        clk = 0;
        forever #30 clk = ~clk;  // 模拟1分钟周期(半周期30秒)
    end
endmodule

修改后正常代码

design.sv(新增初始化)

module timer(
    input clk,
    output reg minute,
    output reg hour
);
    // 初始化寄存器状态,仅仿真开始时执行一次
    initial begin
        minute = 0;
        hour = 0;
    end

    always @(posedge clk) begin
        static int cnt = 0;
        cnt <= cnt + 1;
        if(cnt == 60) begin
            hour <= ~hour;
            cnt <= 0;
        end
        minute <= ~minute;
    end
endmodule

testbench.sv(移除额外驱动)

module tb;
    reg clk;
    wire minute, hour;

    timer u_timer(
        .clk(clk),
        .minute(minute),
        .hour(hour)
    );

    // 移除了assign minute/hour的代码,不再额外驱动信号

    initial begin
        clk = 0;
        forever #30 clk = ~clk;
    end
endmodule

关键细节说明

修改后的代码中,模块内部的initial块和always块属于同一驱动源的不同阶段:

  • initial仅在仿真启动时给寄存器赋初始值,之后不再执行;
  • always块接管后续的计时逻辑驱动,两者不会同时驱动寄存器,因此不存在多冲突问题。

内容的提问来源于stack exchange,提问作者gubang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:11:21