基于FPGA的地铁售票机设计VHDL代码ISE仿真

名称:基于FPGA的地铁售票机设计VHDL代码ISE仿真(文末获取)

软件:ISE

语言:VHDL

代码功能:

地铁售票机

一、设计功能要求   

1、有两元,三元两种地铁车票。只能用五角、一元两种硬币购票

2,投入硬币,数管显示投入便币金额,金与所选票价一致,给出车票,并置金额显示为零,否则,退还便币,按“取消”同样退还硬币,并置金额显示为零

二、画出设计准图    

三、说明设计图中各模块功能

四、实验步骤

初步设计:由设计流程图画出顶层原理图草稿

设计时,用两个按扭代替五角、和一元硬门币的投入,三个发光二极管分别代替给出两元、三元车票和退出钱款。

模块设计和调试:设计各个模块,对每一模块进行功能仿真,验其逻时序是否符合设计要求

总体设计调试,完成地铁售票机设计顶层原理,根据所选芯片型号,定义LOC,进行设计实现调试    

硬牛验证:根据实际需要在示板上进行部分联线,将程序通过数据电缆由电脑下载到芯片,在演示板上进行设计功能硬件验证    

五、实验报告要求

1、地铁售票机功能和工作原理说明    

2、画出设计框图和原理图

3、画出设计输入(原理图、VEDL、状态图)

4、记录仿真波形图

5、第一次的硬件验证结果和设计思想是否一致,不一致原因分析,最后的解决方法和最终的硬件验证结果

售票机.jpg

1. 工程文件

2. 程序文件

3. 程序编译

4. RTL图

5. Testbench

6. 仿真图

整体仿真图

按键模块仿真

售货机控制模块仿真

数码管显示模块仿真

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY auto_sell IS
   PORT (
      clk_50M        : IN STD_LOGIC;--50M时钟
      reset_n        : IN STD_LOGIC;--复位,低电平表示按下
      
      select_key_n   : IN STD_LOGIC;--票价选择按键,低电平表示按下
      confirm_key_n  : IN STD_LOGIC;--确认按键,低电平表示按下
      cancel_key_n   : IN STD_LOGIC;--取消按键,低电平表示按下
      coin_5_n       : IN STD_LOGIC;--投币0.5元,低电平表示按下
coin_10_n       : IN STD_LOGIC;--投币1元,低电平表示按下
      
      buy_succeed_2    : OUT STD_LOGIC;--出票指示灯2元,高电平有效
buy_succeed_3    : OUT STD_LOGIC;--出票指示灯3元,高电平有效
      bit_select     : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);--数码管位选
      seg_select     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选
   );
END auto_sell;
ARCHITECTURE trans OF auto_sell IS
--售货控制模块
component sell_ctrl IS
   PORT (
      clk            : IN STD_LOGIC;
      reset_n        : IN STD_LOGIC;
      
      confirm_p      : IN STD_LOGIC;
      select_p       : IN STD_LOGIC;
      concel_p       : IN STD_LOGIC;
      coin_5_p       : IN STD_LOGIC;
coin_10_p       : IN STD_LOGIC;--投币1.0元
      
      buy_succeed_2    : OUT STD_LOGIC;--出票指示灯2元
buy_succeed_3    : OUT STD_LOGIC;--出票指示灯3元
      select_num     : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
      input_money    : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
      refound_money  : OUT STD_LOGIC_VECTOR(5 DOWNTO 0)
   );
END component;
--按键消抖模块
component key_jitter IS
   PORT (
      clkin        : IN STD_LOGIC;
      key_in       : IN STD_LOGIC;
      key_negedge  : OUT STD_LOGIC
   );
END component;
--显示模块
component display IS
   PORT (
      clk            : IN STD_LOGIC;
      
      select_num     : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
      input_money    : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
      refound_money  : IN STD_LOGIC_VECTOR(5 DOWNTO 0);
      
      bit_select     : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
      seg_select     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
   );
END component;
   SIGNAL select_num        : STD_LOGIC_VECTOR(5 DOWNTO 0);
   SIGNAL input_money       : STD_LOGIC_VECTOR(5 DOWNTO 0);
   SIGNAL refound_money     : STD_LOGIC_VECTOR(5 DOWNTO 0);
   
   SIGNAL confirm_p         : STD_LOGIC;
   SIGNAL select_p          : STD_LOGIC;
   SIGNAL concel_p          : STD_LOGIC;
   SIGNAL coin_5_p          : STD_LOGIC;
SIGNAL coin_10_p          : STD_LOGIC;
   
   -- Declare intermediate signals for referenced outputs
   SIGNAL buy_succeed_buf : STD_LOGIC;
   SIGNAL bit_select_buf  : STD_LOGIC_VECTOR(5 DOWNTO 0);
   SIGNAL seg_select_buf  : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
   bit_select <= bit_select_buf;
   seg_select <= seg_select_buf;
--调用按键消抖模块   
   i1_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => select_key_n,
         key_negedge  => select_p
      );
   
   
--调用按键消抖模块   
   i2_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => confirm_key_n,
         key_negedge  => confirm_p
      );
   
   
--调用按键消抖模块   
   i3_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => cancel_key_n,
         key_negedge  => concel_p
      );
   
   
--调用按键消抖模块   
   i6_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_5_n,
         key_negedge  => coin_5_p
      );
--调用按键消抖模块   
   i7_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_10_n,
         key_negedge  => coin_10_p
      );

源代码

 扫描文章末尾的公众号二维码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值