Vivado中Verilog写4位LED闪灯代码仿真输出恒为高阻无波形问题求助
Verilog闪灯代码问题排查结果
输出端口高阻直接原因:大小写敏感导致端口未绑定
Verilog区分大小写,你定义的输出端口为大写DATA,内部寄存输出的寄存器为小写data,二者没有建立连接,输出端口始终处于未驱动的高阻状态。需在设计模块中添加assign DATA = data;绑定二者。状态机不工作原因:CLK1s生成逻辑错误
你编写的CLK1s计数逻辑中,初始值为0,计数到最大值时仅会给CLK1s赋值0,全程没有翻转逻辑,CLK1s永远保持低电平,后续以posedge CLK1s为触发条件的状态机永远不会执行,内部data值不会变化。正确逻辑应为计数到最大值时翻转CLK1s同时清空计数器,修改后的逻辑参考:
always @(posedge CLK ) begin if(n == max) begin CLK1s <= ~CLK1s; n <= 0; end else begin n <= n + 1; end end
仿真无波形原因:计数值过大、仿真时长不足
你设定的计数最大值max=5000000,对应testbench 40ns时钟周期下需要运行至少200ms才会触发第一次CLK1s跳变,若你仿真仅运行数百ns自然看不到输出变化。仿真调试阶段可先将max改为10等小数值,快速验证逻辑正确性,功能验证通过后再改回实际计数值。次要语法问题:位宽不匹配、分支包裹不规范
- 状态机中部分赋值位宽不匹配,如
data<=4'b100实际仅写了3位,虽然Verilog会自动高位补0,但建议统一写为4位避免歧义,例如改为4'b0010。 - 条件分支未显式用
begin end包裹所有逻辑,仅靠缩进容易产生逻辑误判,建议所有分支都显式添加块包裹符。
内容的提问来源于stack exchange,提问作者ginne yu
相关产品推荐
相关产品推荐

