FPGA|CPLD|ASIC论坛
直播中

lurian

7年用户 44经验值
擅长:可编程逻辑 模拟技术 嵌入式技术 MEMS/传感技术
私信 关注
[问答]

售货机状态机疑问

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)

王栋春

2017-2-10 14:03:45

最佳答案

加一个投币延时功能
举报

冷锋

2017-2-10 17:47:56
是啊,你投了5毛,一直保持高电平不就变成1元了吗,加个一个周期的使能信号就好了!
举报

冷锋

2017-2-10 17:48:44
你仿真一下,啥都看明白了!Modelsim仿真
举报

lurian

2017-2-13 08:15:51
引用: reallmy 发表于 2017-2-10 17:48
你仿真一下,啥都看明白了!Modelsim仿真

哈哈,仿真过了,就是觉得有点问题,才请教大神。代码应该还要完善下。这是网上查到的代码。
举报

lurian

2017-2-13 08:17:49
引用: 王栋春 发表于 2017-2-10 20:41
加一个投币延时功能

好的,谢谢回复,刚开始玩这东西。
举报

王栋春

2017-2-13 20:18:17
引用: lurian 发表于 2017-2-13 08:17
好的,谢谢回复,刚开始玩这东西。

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

更多回帖

发帖
×
20
完善资料,
赚取积分