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

Vivado中Verilog数字时钟修改后仿真报错修复

问题成因

第二版代码无法启动仿真的错误共3类:

  • 语法结构错误:if/else 语句配对混乱,存在多个未闭合的begin块,还出现了无对应if的孤立else分支,属于Verilog基础语法错误,仿真工具无法解析代码结构直接报错。
  • 信号拼写错误:模块中定义的分钟寄存器名为MINS,代码分支里误写为MIN,工具会判定为未定义信号,触发编译错误。
  • 逻辑嵌套错误:分钟、小时的进位判断被错误放在「秒计数不等于59」的分支下,完全违背时钟进位规则(仅当秒计到59才会触发分钟进位,仅当分、秒都计到59才会触发小时进位),即便修正语法也无法实现预期计数功能。
修复方案

修正语法错误、对齐信号名、调整进位逻辑的嵌套层级,修复后可正常仿真运行的代码如下:

`timescale 1ns / 1ps
module watch(
  input            CLK,  
  input            rst_n, // 低电平有效复位
  output reg [4:0] HRS,
  output reg [5:0] MINS,SECS
);

always @ (posedge CLK or negedge rst_n) begin
  if (~rst_n) begin
    SECS <= 'b0;
    MINS <= 'b0;
    HRS  <= 'b0;
  end else begin   
    // 秒计数+进位判断
    if (SECS == 59) begin
      SECS <= 0;
      // 秒满溢后触发分钟计数+进位判断
      if (MINS == 59) begin
        MINS <= 0;
        // 分满溢后触发小时计数+进位判断
        HRS <= (HRS == 23) ? 5'd0 : HRS + 1'd1;
      end else begin
        MINS <= MINS + 1'd1;
      end
    end else begin
      SECS <= SECS + 1'd1;
    end    
  end
end
endmodule

修复后逻辑完全符合数字时钟计数规则:低电平复位时所有计数寄存器清0,正常工作时每秒加1,秒计到59归0同时分钟加1,分钟计到59归0同时小时加1,小时计到23归0,循环计数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:39:20