售货机状态机疑问

2019-07-15 22:01发布

modulemachine_sell(one_dollar,
half_dollar,
collect,
half_out,
dispense,
reset,
clk);  
parameter idle=2'b00, half=2'b01, one=2'b10;    //代表投入币值 的几种情况

inputone_dollar,half_dollar,reset,clk;
outputcollect,half_out,dispense;
regcollect,half_out,dispense;
reg[1:0] D;
  
always@(posedgeclk)
begin  
if(reset)
begin  
  dispense=0;
  collect=0;
  half_out=0;  
  D=idle;
end
else
case(D)
  idle:  
  if(half_dollar)
  begin  
   dispense=0;
   collect=0;
   half_out=0;  
   D=half;
  end  

  else if(one_dollar)
  begin  
   dispense=0;
   collect=0;
   half_out=0;  
   D=one;
  end

  else
  begin  
   dispense=0;
   collect=0;

   half_out=0;  
   D=idle;
  end
half:  
if(half_dollar)
  begin  
   dispense=0;
   collect=0;
   half_out=0;  
   D=one;
  end  
else if(one_dollar)
begin  
  dispense=1;
  collect=1;  
  half_out=0;  
  D=idle;
end
else
begin  
  dispense=0;
  collect=0;
  half_out=0;  
  D=half;
end

one:  
if(half_dollar)
begin  
  dispense=1;
  collect=1;
  half_out=0;  
  D=idle;
end  
else if(one_dollar)
begin  
  dispense=1;
  collect=1;
  half_out=1;  
  D=idle;
end
else
begin  
  dispense=0;
  collect=0;
  half_out=0;  
  D=one;
end  
endcase
end  
endmodule



如果开始输入half_dollar,状态机切换到half状态。如果half_dollar一直保持高电平,这样子计数是不是有问题。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
李春明
1楼-- · 2019-07-16 01:57
加一个投币延时功能 最佳答案
reallmy
2楼-- · 2019-07-16 04:33
是啊,你投了5毛,一直保持高电平不就变成1元了吗,加个一个周期的使能信号就好了!
reallmy
3楼-- · 2019-07-16 04:42
你仿真一下,啥都看明白了!Modelsim仿真
lurian
4楼-- · 2019-07-16 05:59
 精彩回答 2  元偷偷看……
lurian
5楼-- · 2019-07-16 09:34
王栋春 发表于 2017-2-10 20:41
加一个投币延时功能

好的,谢谢回复,刚开始玩这东西。
李春明
6楼-- · 2019-07-16 10:28
lurian 发表于 2017-2-13 08:17
好的,谢谢回复,刚开始玩这东西。

你太客气了  我只是搞过PLC类的这个程序 单片的还真不懂

一周热门 更多>