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

HDLBits考题m2014_q6c代码异常:Y2、Y4始终接地求助

解决HDLBits Exams/m2014_q6c输出Y2、Y4始终为GND的问题

错误原因分析

你的代码存在两个核心问题,直接导致Y2和Y4永远为低电平:

  • 参数定义未指定基数:A = 000001这类写法会被解析为十进制数(实际值为1),而非预期的6位二进制1-hot编码。同时next_state被定义为3位寄存器,与6位宽度的参数不匹配,赋值时会被截断,导致next_state永远无法等于6位的B或D。
  • 状态变量位宽不匹配:输入y是6位1-hot状态编码,next_state却定义为3位,与状态编码的位宽完全不符,后续next_state == B这类比较永远不成立。

修正后的代码

module top_module (
    input [6:1] y,
    input w,
    output Y2,
    output Y4);

    // 明确指定6位二进制1-hot编码的状态参数
    parameter A = 6'b000001, 
              B = 6'b000010, 
              C = 6'b000100, 
              D = 6'b001000, 
              E = 6'b010000, 
              F = 6'b100000;
    // next_state位宽与状态参数、输入y保持一致(6位)
    reg [5:0] next_state;
    
    always @(*) begin
        casez(y)
            6'b000001 : next_state = w ? A : B;
            6'b00001z : next_state = w ? D : C;
            6'b0001zz : next_state = w ? D : E;
            6'b001zzz : next_state = w ? A : F;
            6'b01zzzz : next_state = w ? D : E;
            6'b1zzzzz : next_state = w ? D : C;
            default : next_state = A;
        endcase
    end

    assign Y2 = (next_state == B);
    assign Y4 = (next_state == D);
endmodule

额外说明

  • 状态参数必须明确指定基数(6'b),确保是6位二进制1-hot编码,避免十进制数值解析错误。
  • next_state的位宽需与输入y、状态参数一致,保证状态赋值和比较的正确性。
  • 组合逻辑块中建议使用阻塞赋值(=)而非非阻塞赋值(<=),这是Verilog组合逻辑的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:50:25