微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 售货机状态机疑问

售货机状态机疑问

时间:10-02 整理:3721RD 点击:
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一直保持高电平,这样子计数是不是有问题。

加一个投币延时功能

是啊,你投了5毛,一直保持高电平不就变成1元了吗,加个一个周期的使能信号就好了!

你仿真一下,啥都看明白了!Modelsim仿真

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

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top