<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
答案很简单。将 ps
和 ns
添加到您的模拟图表中,您就会明白为什么。
在模拟开始时,您处于状态 S0
。当 product
大于 0
(第一个黄色标记)时,您将进入状态 S1
。然后你正在等待 EQ
或 GT
,但是 EQ
在一个时钟周期前下降,所以下一个 GT
到达。
设置EQ
和GT
一个时钟周期后。
我正在尝试构建一个由数据路径单元和控制单元组成的有限状态机自动售货机。所附链接是控制单元,由 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
答案很简单。将 ps
和 ns
添加到您的模拟图表中,您就会明白为什么。
在模拟开始时,您处于状态 S0
。当 product
大于 0
(第一个黄色标记)时,您将进入状态 S1
。然后你正在等待 EQ
或 GT
,但是 EQ
在一个时钟周期前下降,所以下一个 GT
到达。
设置EQ
和GT
一个时钟周期后。