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

时钟上升沿驱动的计数器代码出现语法错误,请求排查问题

计数器代码语法错误排查

问题背景

设计了一个由时钟上升沿驱动、计数至100的计数器,编写design.sv和testbench.sv代码后,仿真器报出如下错误:

design.sv:7: syntax error
design.sv:7: error: Malformed event control expression.
design.sv:7: error: Invalid event control.

已确认测试台wire [7:0] count与模块reg [7:0] count的端口连接无问题,需排查代码语句错误。

原错误代码(design.sv)

module counter(
  input clk,
  input rstn,
  output reg[7:0] count
);

  always @ (posedge reg, negedge rstn) begin
    if(!rstn) begin
      count <= 0;
    end

    else if(clk) begin
      count <= count+1;
    end
  end

endmodule

错误分析与修正

1. 核心语法错误(第7行)

always @ (posedge reg, negedge rstn)中的reg是拼写笔误,应为时钟信号clk,这是触发语法报错的直接原因。

2. 冗余逻辑判断

else if(clk)属于多余判断:always块已经由posedge clk触发,进入else分支时,必然是时钟上升沿触发且复位无效的场景,无需再次判断clk信号。

修正后的design.sv代码

module counter(
  input clk,
  input rstn,
  output reg[7:0] count
);

  always @ (posedge clk, negedge rstn) begin
    if(!rstn) begin
      count <= 0;
    end
    else begin
      // 补充计数至100后复位的逻辑,原代码未实现该设计需求
      if(count == 99) begin
        count <= 0;
      end else begin
        count <= count + 1;
      end
    end
  end

endmodule

补充说明:原代码未实现"计数至100"的功能,上述修正代码增加了计数到99(对应十进制100的前一个值)时复位为0的逻辑,符合设计需求。

测试台代码验证

原testbench.sv代码无问题,端口连接逻辑正确,修正设计代码后即可正常仿真。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:51:22