我想为可乐设计一台NT15的自动售货机,我的代码如下。
让删除的“case”语句部分为图A.取消删除“case”语句部分为图B.我发现两个数字是相同的,所以我不知道“case”语句部分是不行的。我可以不明白为什么。我的程序问题?谁能告诉我为什么?plz
`timescale 1ns/1ns
module vendor (NT5,NT10,clk,reset,cola,change);
input NT5 , NT10 , clk , reset;
output reg cola , change;
reg [1:0]five = 2'b00;
reg [1:0]ten = 2'b00;
reg [2:0] payment_state, next_state;
parameter D_0 = 3'b000,//0 dollar
D_5 = 3'b001,//5 dollar
...
always @(posedge clk )
begin
if(reset==1||cola==1)
begin
cola<=0;
change<=0;
five<=0;
ten<=0;
end
case (payment_state)
D_0 : begin
cola <= 0;
change <= 0;
if (five == 1'b1)
next_state = D_5;
if (ten == 1'b1)
next_state = D_10;
end
D_5 : ...
D_10 : ...
D_15 : begin
cola <= 1;
change = 0;
next_state = D_0;
end
D_20 : begin
cola <= 1;
change = 1;
next_state = D_0;
end
default : begin
next_state = D_0;
cola<= 1;
change<= 1;
end
endcase
if(NT5==1'b1)
begin
five<=five+1'b1;
end
if(NT10==1'b1)
begin
ten<=ten+1'b1;
end
end
endmodule
答案 0 :(得分:0)
我认为你应该首先在测试平台下测试这个模块。
我认为您的FSM不是一两个或三个总是阻止风格。
我认为这篇文章可以帮到你。 Coding And Scripting Techniques For FSM Designs With Synthesis-Optimized, Glitch-Free Outputs