<Verilog>请问为什么EQ=1,输出没有反应?

<Verilog> May I know why EQ=1, but the output no response?

我正在尝试构建一个由数据路径单元和控制单元组成的有限状态机自动售货机。所附链接是控制单元,由 EQ(Equal)、GT(Greater) 和乘积的输入组成。当 product 为“1”且 EQ 或 GT 为“1”时,输出将为 out=product。然而,在我的问题中,verilog 代码显示正确的 GT 但不是 EQ。输出高了好像不能响应EQ

我设计的状态图。 State Diagram

我的 Verilog 代码。 Verilog code

结果。 Result Waveform

module dispense(
  input [1:0] product,
  input GT, EQ, rst, clk,
  output [1:0] out,
  output reg done,
  output R
  );
  reg [1:0] ps,ns; //Present State and Next State
  assign R=EQ||GT;
  //State encoding
  parameter [1:0] S0=2'b00, S1=2'b01, S2=2'b10;
  //Verilog segment Next State logic and Output logic
  always @*
    begin
     //out=0;
     done=0;
     case(ps)
       S0: if(product>0) ns=S1; else ns=S0; 
        S1: if(R) ns=S2; else ns=S1;
        S2: begin  done=1; ns=S0; end
        endcase
      end
        //out=product;
    
    assign out = (done==1)?product:0;

    //State Register
    always@(posedge clk)
        if (!rst) ps=S0;
        else ps=ns;
endmodule

答案很简单。将 psns 添加到您的模拟图表中,您就会明白为什么。

在模拟开始时,您处于状态 S0。当 product 大于 0(第一个黄色标记)时,您将进入状态 S1。然后你正在等待 EQGT,但是 EQ 在一个时钟周期前下降,所以下一个 GT 到达。

设置EQGT一个时钟周期后。