时钟上升沿驱动的计数器代码出现语法错误,请求排查问题
计数器代码语法错误排查
问题背景
设计了一个由时钟上升沿驱动、计数至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
相关产品推荐
相关产品推荐

