基于VHDL +FPGA 的自动售货机控制模块的设计与实现

出处:node 发布于:2011-01-04 11:31:25

     EDA技术是以计算机为工具完成数字系统的逻辑综合、布局布线和设计仿真等工作。电路设计者只需要完成对系统功能的描述,就可以由计算机软件进行系统处理,得到设计结果,并且修改设计方案如同修改软件一样方便。利用EDA工具可以极大地提高设计效率。

  利用硬件描述语言编程来表示逻辑器件及系统硬件的功能和行为,是EDA设计方法的一个重要特征。VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)是硬件描述语言的一种,对系统硬件的描述功能很强而语法又比较简单。VHDL具有强大的行为描述能力,设计者可以不懂硬件的结构,只需集中精力进行电子系统的设计和性能优化;具有方便的逻辑仿真与调试功能,在设计早期就能查验系统的功能,方便地比较各种方案的可行性及其优劣。目前,VHDL作为IEEE的工业标准硬件描述语言,得到众多EDA公司的支持,在电子工程领域已经成为事实上通用硬件描述语言。

  本文采用VHDL作为工具描述了自动售货机控制模块的逻辑控制电路,并在FPGA上实现。该自动售货机能够根据投入硬币额度,按预定的要求在投入硬币大于规定值时送出饮料并找零。

  设计方案

  本文所设计的简易自动售货机可销售矿泉水,假设每瓶1.5元。设两个投币孔,分别接收1元和5角两种硬币,两个输出口,分别输出购买的商品和找零。假设每次只能投入一枚1元或5角硬币,投入1元5角硬币后机器自动给出一瓶矿泉水;投入2元硬币后,在给出一瓶矿泉水的同时找回一枚5角的硬币。另外设置一复位按钮,当复位按钮按下时,自动售货机回到初始状态。

  开发软件选用功能强大的Altera公司的可编程逻辑器件开发工具Quartus II 8.0,实现芯片选用Altera公司FLEX10K系列的EPF10K10LC84-4;首先在计算机上完成程序设计、编译及时序仿真,然后将经过验证的设计文件到选择的可编程逻辑器件中,并在电子设计自动化实验系统中进行硬件模拟和测试。

  状态机VHDL程序设计

  有限状态机FSM(Finite State Machine)及其设计技术是实用数字系统设计中实现高效率、高可靠逻辑控制的重要途径。传统的状态机设计方法需进行繁琐的状态分配、绘制状态表、简化次态方程等,而利用VHDL可以避免这些烦琐的过程,直接利用状态转换图进行状态机的描述。此外,与VHDL的其他描述方式相比,状态机的VHDL表述丰富多样,程序层次分明,结构清晰,易读易懂;在排错、修改和模块移植方面也有其独到的特点。

  状态机有摩尔(Moore)型和米立(Mealy)型两种。Moore型状态机的输出信号只与当前状态有关;Mealy型状态机的输出信号不仅与当前状态有关,还与输入信号有关。结合本文设计,由于输出仅与状态有关,选用了Moore型状态机设计自动售货机控制模块,状态转换图如图1所示。

自动售货机状态转换图

图1 自动售货机状态转换图

  1)状态定义:S0表示初态,S1表示投入5角硬币,S2表示投入1元硬币,S3表示投入1元5角硬币,S4表示投入2元硬币。

  2)输入信号:取投币信号为输入逻辑变量,用两位的矢量state_inputs表示。state_inputs(0)表示投入1元硬币,state_inputs(1)表示投入5角硬币。输入信号为1表示投入硬币,输入信号为0表示未投入硬币。

  3)输出信号:给出矿泉水和找零为两个输出变量,用两位的矢量comb_outputs表示。comb_outputs(0)表示输出货物,comb_outputs(1)表示找5角零钱。输出信号为1表示输出货物或找零,输出信号为0表示不输出货物或不找零。

  根据图1所示的状态转换图,用VHDL中的CASE_WHEN结构和IF_THEN_ELSE语句实现控制功能,源程序如下:

  LIBRARY IEEE;                   --库和程序包的使用说明

  USE IEEE.STD_LOGIC_1164.ALL;

  ENTITY sellmachine IS                     --实体定义

  PORT(clk,reset:   IN  std_logic;

  state_inputs:IN  std_logic_vector(0 TO 1);

  comb_outputs:OUT std_logic_vector(0 TO 1));

  END sellmachine;

  ARCHITECTURE state OF sellmachine IS      --结构体

  TYPE fsm_st IS (S0,S1,S2,S3,S4);        --状态枚举类型定义

  SIGNAL current_state,next_state:fsm_st;   --状态信号的定义

  BEGIN

  reg:PROCESS(reset,clk)                --时序进程

  BEGIN

  IF reset='1' THEN current_state<=S0;  --异步复位

  ELSIF rising_edge(clk) THEN

  current_state<=next_state;       --状态转换

  END IF;

  END PROCESS;

  corn:PROCESS(current_state,state_inputs)   --组合进程

  BEGIN

  CASE current_state IS

  WHEN S0=>comb_outputs<="00";                   --现态S0

  IF    state_inputs<="00" THEN next_state<=S0;  --输入不同,次态不同

  ELSIF state_inputs<="01" THEN next_state<=S1;

  ELSIF state_inputs<="10" THEN next_state<=S2;

  END IF;

  WHEN S1=>comb_outputs<="00";                   --现态S1

  IF    state_inputs<="00" THEN next_state<=S1;  --输入不同,次态不同

  ELSIF state_inputs<="01" THEN next_state<=S2;

  ELSIF state_inputs<="10" THEN next_state<=S3;

  END IF;

  WHEN S2=>comb_outputs<="00";                   --现态S2

  IF    state_inputs<="00" THEN next_state<=S2;  --输入不同,次态不同

  ELSIF state_inputs<="01" THEN next_state<=S3;

  ELSIF state_inputs<="10" THEN next_state<=S4;

  END IF;

  WHEN S3=>comb_outputs<="10";                   --现态S3

  IF    state_inputs<="00" THEN next_state<=S0;  --输入不同,次态不同

  ELSIF state_inputs<="01" THEN next_state<=S1;

  ELSIF state_inputs<="10" THEN next_state<=S2;

  END IF;

  WHEN S4=>comb_outputs<="11";                   --现态S4

  IF    state_inputs<="00" THEN next_state<=S0;  --输入不同,次态不同

  ELSIF state_inputs<="01" THEN next_state<=S1;

  ELSIF state_inputs<="10" THEN next_state<=S2;

  END IF;

  END CASE;

  END PROCESS;

  END state;

  编译、仿真及FPGA实现

  在Altera公司的可编程逻辑器件集成开发平台Quartus II 8.0下完成程序的编辑、编译并进行时序仿真。

  1)编译:编译是EDA设计中的环节。软件将对设计输入文件进行逻辑化简、综合和优化, 适当地用一片或多片器件进行适配,产生编程用的编程文件。主要包括设计编译和检查、逻辑优化和综合、适配和分割、布局和布线、生成编程数据文件等过程。自动售货机控制模块VHDL文件编译如图2所示。

编译

图2 编译

  中给出了进行编译的时间、采用的开发软件的版本、顶层设计实体名、选用器件的系列和型号、时序分析情况、占用资源情况及引脚使用情况等信息。

  2)时序仿真:编译后对系统和各模块进行时序仿真,分析其时序关系,估计设计的性能及检查和消除竞争冒险是非常有必要的。仿真前,先利用波形编辑器建立波形文件,仿真结果将会生成文件和输出信号波形,从中便可以观察到各个节点的信号变化。若发现错误,则返回设计输入中修改设计逻辑。自动售货机控制模块仿真波形如图3所示。

时序仿真波形

图3 时序仿真波形

  3) FPGA实现:将编译阶段生成的编程数据文件通过Quartus II 到芯片EPF10K10LC84-4中,并在电子设计自动化实验系统中进行测试得到了正确的结果。


  

参考文献:

[1]. FLEX10K datasheet https://www.dzsc.com/datasheet/FLEX10K_328755.html.
[2]. EPF10K10LC84-4 datasheet https://www.dzsc.com/datasheet/EPF10K10LC84-4_1097486.html.


关键词:FPGA

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!