我的计数器在时钟上升沿驱动时出现错误

问题描述 投票:0回答:1

我制作了最多计数 100 的计数器。计数行为由时钟的上升沿驱动。 你可以看下面的代码

    //codes for "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
   //codes for testbench.sv

    module test;
  
      reg clk;
      reg rstn;
      wire[7:0] count;
  
  
      initial begin
        clk = 0;
        forever #5 clk = ~clk;
      end

      counter counter_1(clk, rstn, count);
  
      initial begin
        rstn = 1;
        #0.1 rstn = 0;
        #0.1 rstn = 1;
    
        #1000 $finish;
      end
  
      initial begin
        $dumpfiles("wave.vcd");
        $dumpvars(0, test);
      end
  
    endmodule

模拟器给出如下错误。

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

我花了几个小时寻找声明 design.sv 第 7 个声明。 我考虑了测试台线[7:0]计数和模块寄存器[7:0]计数的连接。但是,我认为模块输出和测试台输入的端口连接作为注册线是可以的。

问题摘要:什么语句写错了?

verilog system-verilog
1个回答
0
投票

问题是您错误地使用了关键字

reg
而不是时钟信号名称(
clk
)。变化:

  always @ (posedge reg, negedge rstn) begin

至:

  always @ (posedge clk, negedge rstn) begin

测试台代码中存在另一个语法错误。将

$dumpfiles
更改为
$dumpfile

© www.soinside.com 2019 - 2024. All rights reserved.