自动售货机设计VHDL代码Quartus仿真

名称:自动售货机设计VHDL代码Quartus仿真(文末获取)

软件:Quartus

语言:VHDL

代码功能:

设计内容

在EDA环境下,使用VHDL语言设计一个自动饮料售卖机

设计任务和目标

1.使用VHDL语言描述一个自动饮料售卖机,能够接收5角以上10元以下共4

种面额的货币,进行饮料的购买,并根据实际情况找零

2.饮料共6种,对应6个按键。饮料售价分为1元、1.5元、2元和3元,存在两种或两种以上的饮料对应相同售价的情况

3.编写合适的 testbench文件,对上述系统进行测试并仿真

4.完成该系统的ⅦHDL模块化描述,注意使用分层次设计,并在顶层设计中采用

元件例化的方式指定模块间的硬件连接方式

1. 自动售货机功能描述

2. 工程文件

3. 程序文件

4. 程序编译

5. RTL图

6. Testbench

7. 仿真图

整体仿真图

按键下降沿检测模块仿真

售货机控制模块仿真

数码管显示模块仿真

部分代码展示:

LIBRARY ieee;
   USE ieee.std_logic_1164.all;
ENTITY auto_sell IS
   PORT (
      clk_50M        : IN STD_LOGIC;--时钟
      reset_n        : IN STD_LOGIC;--复位
      select_1   : IN STD_LOGIC;--商品选择按键1--价钱1.0
select_2   : IN STD_LOGIC;--商品选择按键2--价钱1.5
select_3   : IN STD_LOGIC;--商品选择按键3--价钱2.0
select_4   : IN STD_LOGIC;--商品选择按键4--价钱3.0
select_5   : IN STD_LOGIC;--商品选择按键5--价钱1.0
select_6   : IN STD_LOGIC;--商品选择按键6--价钱2.0
      confirm_key_n  : IN STD_LOGIC;--确认按键
      cancel_key_n   : IN STD_LOGIC;--取消按键
      coin_1_n       : IN STD_LOGIC;--投币1元
      coin_2_n       : IN STD_LOGIC;--投币0.5元
      coin_5_n       : IN STD_LOGIC;--投币5元
coin_10_n       : IN STD_LOGIC;--投币10元
      
      buy_succeed    : OUT STD_LOGIC;--购买成功
      bit_select     : OUT STD_LOGIC_VECTOR(3 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;
      concel_p       : IN STD_LOGIC;
      select_1   : IN STD_LOGIC;--商品选择按键1--价钱1.0
select_2   : IN STD_LOGIC;--商品选择按键2--价钱1.5
select_3   : IN STD_LOGIC;--商品选择按键3--价钱2.0
select_4   : IN STD_LOGIC;--商品选择按键4--价钱3.0
select_5   : IN STD_LOGIC;--商品选择按键5--价钱1.0
select_6   : IN STD_LOGIC;--商品选择按键6--价钱2.0
      
      coin_1_p       : IN STD_LOGIC;
      coin_2_p       : IN STD_LOGIC;
      coin_5_p       : IN STD_LOGIC;
coin_10_p       : IN STD_LOGIC;--投币10元
      
      buy_succeed    : OUT STD_LOGIC;
      select_num     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
      input_money    : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
      refound_money  : OUT STD_LOGIC_VECTOR(7 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(7 DOWNTO 0);
      input_money    : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
      refound_money  : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
      
      bit_select     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
      seg_select     : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
   );
END component;
   SIGNAL select_num        : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL input_money       : STD_LOGIC_VECTOR(7 DOWNTO 0);
   SIGNAL refound_money     : STD_LOGIC_VECTOR(7 DOWNTO 0);
   
   SIGNAL confirm_p         : STD_LOGIC;
   SIGNAL concel_p          : STD_LOGIC;
   
   SIGNAL coin_1_p          : STD_LOGIC;
   SIGNAL coin_2_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(3 DOWNTO 0);
   SIGNAL seg_select_buf  : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
   buy_succeed <= buy_succeed_buf;
   bit_select <= bit_select_buf;
   seg_select <= seg_select_buf;
     
--调用按键下降沿检测模块   
   i1_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => confirm_key_n,
         key_negedge  => confirm_p
      );
   
   
--调用按键下降沿检测模块 
   i2_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => cancel_key_n,
         key_negedge  => concel_p
      );
   
   
--调用按键下降沿检测模块 
   i3_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_1_n,
         key_negedge  => coin_1_p
      );
   
   
--调用按键下降沿检测模块 
   i4_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_2_n,
         key_negedge  => coin_2_p
      );
   
--调用按键下降沿检测模块 
   i5_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_5_n,
         key_negedge  => coin_5_p
      );
--调用按键下降沿检测模块  
   i6_key_jitter : key_jitter
      PORT MAP (
         clkin        => clk_50M,
         key_in       => coin_10_n,
         key_negedge  => coin_10_p
      );
   
 --调用售货控制模块  
   i_sell_ctrl : sell_ctrl
      PORT MAP (
         clk            => clk_50M,
         reset_n        => reset_n,
         
         confirm_p      => confirm_p,
         concel_p       => concel_p,
select_1       => select_1,
select_2       => select_2,
select_3       => select_3,
select_4       => select_4,
select_5       => select_5,
select_6       => select_6,         
         coin_1_p       => coin_1_p,
         coin_2_p       => coin_2_p,
         coin_5_p       => coin_5_p,
coin_10_p      => coin_10_p,
         
         buy_succeed    => buy_succeed_buf,
         select_num     => select_num,
         input_money    => input_money,
         refound_money  => refound_money
      );
   
   
 --调用显示模块  
   i_display : display
      PORT MAP (
         clk            => clk_50M,
         
         select_num     => select_num,
         input_money    => input_money,
         refound_money  => refound_money,
         
         bit_select     => bit_select_buf,
         seg_select     => seg_select_buf
      );
   
END trans;
源代码

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

  • 17
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动售货机VHDL设计EDA课程设计是基于VHDL(Very High-Speed Integrated Circuit Hardware Description Language)语言和EDA(Electronic Design Automation)工具进行的。该设计旨在实现一个能够自动进行商品销售的自动售货机。 首先,我将根据设计需求和功能要求,使用VHDL语言编写自动售货机的硬件描述代码。该代码将包括自动售货机的控制逻辑、状态机、输入输出接口等。 接下来,我将使用EDA工具对编写的VHDL代码进行仿真和验证。通过仿真,我可以模拟自动售货机的运行过程,测试控制逻辑的正确性和性能。如果出现错误或不符合要求的情况,我将修改代码并再次进行仿真,直到达到预期效果。 在完成仿真验证后,我将使用EDA工具进行自动售货机的综合。综合是将VHDL代码转换为可用于FPGA或ASIC等硬件平台的逻辑门级的电路描述。综合的过程中,我会关注电路的时序约束、资源利用率和功耗等因素。 接着,我将进行布局布线,即将综合后的逻辑电路映射到实际的硬件平台上。在布局布线过程中,我会考虑电路的物理约束、时序优化和信号完整性等问题,以确保设计的可靠性和稳定性。 最后,我将使用EDA工具进行静态时序分析和时序约束的验证。通过时序分析,我可以评估自动售货机的性能指标,如最大可达频率和潜在的时序冲突。同时,我还将验证时序约束是否满足设计要求。 总结来说,自动售货机VHDL设计EDA课程设计包括硬件描述代码的编写、仿真验证、综合、布局布线和时序分析等步骤。通过这样的设计流程,能够实现一个功能强大、性能优良的自动售货机系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值