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
相关产品推荐
相关产品推荐

