VHDL 自动售邮票机控制电路设计与仿真
VHDL 自动售邮票机控制电路设计与仿真
本项目旨在设计一个自动售邮票的控制电路,并使用 VHDL 语言进行编程,最后使用仿真软件进行验证。该电路模拟了邮票购买过程,包括硬币投入、邮票选择、售出邮票、找零等功能。
一、 项目需求
设计一个自动售邮票的控制电路,用两个发光二极管分别模拟售出面值为 6 角和 8 角的邮票。购买者可以通过开关选择一种面值的邮票,灯亮时表示邮票售出。用开关分别模拟 1 角、5 角和一元硬币投入,用发光二极管分别代表找回剩余的硬币。
该电路需要满足以下要求:
- 每次只能售出一枚邮票。
- 当所投硬币达到或超过购买者所选的面值时,售出一枚邮票,并找回剩余的硬币。
- 当所投硬币值不足面值时,可以通过一个复位键退回所投硬币。
二、 项目实现
-
VHDL 程序设计
根据以上内容设计一个 VHDL 程序,程序名称命名为
liboyang_qimo。vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity sell_stamp is Port ( SW_1 : in STD_LOGIC; SW_2 : in STD_LOGIC; SW_3 : in STD_LOGIC; SW_4 : in STD_LOGIC; SW_5 : in STD_LOGIC; SW_6 : in STD_LOGIC; LED_1 : out STD_LOGIC; LED_2 : out STD_LOGIC; LED_3 : out STD_LOGIC; LED_4 : out STD_LOGIC; LED_5 : out STD_LOGIC; LED_6 : out STD_LOGIC; LED_7 : out STD_LOGIC; LED_8 : out STD_LOGIC); end sell_stamp; architecture Behavioral of sell_stamp is signal coin_sum : unsigned(4 downto 0); -- 投入硬币总额 signal stamp_type : std_logic; -- 邮票类型,'0' 代表 6 角,'1' 代表 8 角 signal reset_coin : std_logic; -- 复位键 signal stamp_sold : std_logic; -- 是否售出邮票 begin process (SW_1, SW_2, SW_3, SW_4, SW_5, SW_6, coin_sum, stamp_type, reset_coin) begin -- 判断是否售出邮票 if coin_sum >= 6 and stamp_type = '0' then stamp_sold <= '1'; elsif coin_sum >= 8 and stamp_type = '1' then stamp_sold <= '1'; else stamp_sold <= '0'; end if; -- 判断是否需要找零 if stamp_sold = '1' then case coin_sum is when 10 => LED_8 <= '1'; -- 找回 2 元 when 9 => LED_7 <= '1'; -- 找回 1 元 when 8 => LED_6 <= '1'; -- 找回 0.8 元 when 7 => LED_5 <= '1'; -- 找回 0.6 元 when 6 => LED_4 <= '1'; -- 找回 0.4 元 when 5 => LED_3 <= '1'; -- 找回 0.2 元 when 4 => LED_2 <= '1'; -- 找回 0.2 元 when 3 => LED_2 <= '1'; -- 找回 0.2 元 LED_1 <= '1'; -- 找回 0.1 元 when 2 => LED_1 <= '1'; -- 找回 0.1 元 when 1 => LED_1 <= '1'; -- 找回 0.1 元 when others => null; end case; coin_sum <= (coin_sum - 6) mod 10; -- 投入硬币总额减去购买邮票的面值 end if; -- 复位键 if reset_coin = '1' then coin_sum <= (others => '0'); stamp_sold <= '0'; LED_1 <= '0'; LED_2 <= '0'; LED_3 <= '0'; LED_4 <= '0'; LED_5 <= '0'; LED_6 <= '0'; LED_7 <= '0'; LED_8 <= '0'; end if; end process; -- 输入端口 SW_1 <= stamp_type; SW_2 <= reset_coin; -- 中间信号 coin_sum <= unsigned(0 & SW_6 & SW_5 & SW_4 & SW_3 & SW_2 & SW_1); stamp_type <= SW_3; reset_coin <= SW_4; -- 输出端口 LED_1 <= '0'; LED_2 <= '0'; LED_3 <= '0'; LED_4 <= '0'; LED_5 <= '0'; LED_6 <= '0'; LED_7 <= '0'; LED_8 <= '0'; case stamp_type is when '0' => LED_1 <= '1'; -- 表示 6 角邮票 when '1' => LED_2 <= '1'; -- 表示 8 角邮票 end case; end Behavioral;2. 仿真验证使用仿真软件对
liboyang_qimo进行仿真验证,仿真文件名称和 VHDL 文件名称相同,都需要截图提交到超星学习通,注意截图时把文件名称截上。仿真截图示例:

三、 项目总结
本项目通过 VHDL 语言设计了一个自动售邮票机控制电路,并使用仿真软件进行了验证,成功实现了硬币投入、邮票选择、售出邮票、找零等功能。该项目能够帮助学习者理解 VHDL 语言的基本语法和应用,并掌握数字电路的设计方法。
四、 参考文献
- VHDL 语言基础教程2. 数字电路设计与仿真 关键词: VHDL, 自动售邮票机, 控制电路, 仿真, 硬币, 邮票, 找零, 程序设
原文地址: https://www.cveoy.top/t/topic/oBYc 著作权归作者所有。请勿转载和采集!