名称:超市自动售货机VHDL代码vivado ego1开发板
软件:vivado
语言:VHDL
代码功能:
超市自动售货机
所有蔬菜以1斤为一份进行包装销售,其中土豆1元,西红柿2元,黄瓜3元,芹菜4元,大葱5元。一次购买一种蔬菜,可一次性购买一份或两份,只能插入1元或5元两种面值的钞票。
功能:①选择蔬菜种类及份数。②插入钞票。当插入的钞票总金额=菜价时,输出相应蔬菜;当钞票总金额<菜价时,等待继续插入钞票;当钞票总金额>菜价时,在输出相应蔬菜的同时找零。③完成交易,等待下一次交易。
用拨码开关选择蔬菜的种类及份数,用按钮代表插入5元或10元钞票,用LED灯作为输出蔬菜和找零的指示灯,用数码管显示插入的总金额和找零金额。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ego1开发板验证,ego1开发板如下,其他开发板可以修改管脚适配:
演示视频:
设计文档:
功能描述:
自动售货机,售卖蔬菜。所有蔬菜以1斤为一份进行包装销售,其中土豆1元,西红柿2元,黄瓜3元,芹菜4元,大葱5元。一次购买一种蔬菜,可一次性购买一份或两份,只能插入1元或5元两种面值的钞票。
功能:①选择蔬菜种类及份数。②插入钞票。当插入的钞票总金额=菜价时,输出相应蔬菜;当钞票总金额<菜价时,等待继续插入钞票;当钞票总金额>菜价时,在输出相应蔬菜的同时找零。③完成交易,等待下一次交易。
用拨码开关选择蔬菜的种类及份数,用按钮代表插入5元或10元钞票,用LED灯作为输出蔬菜和找零的指示灯,用数码管显示插入的总金额和找零金额。
1. 工程文件
1. 程序文件
2. 程序编译
3. RTL图
4. 管脚分配
5. Testbench
6. 仿真图
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY auto_sell IS PORT ( clk : IN STD_LOGIC;--100M reset_p : IN STD_LOGIC;--复位 vegetables : IN STD_LOGIC_VECTOR(2 DOWNTO 0);--蔬菜选择--SW0~2 number : IN STD_LOGIC;--份数--SW4 coin_10_key : IN STD_LOGIC;--投币1元--S0 coin_50_key : IN STD_LOGIC;--投币5元--S1 start : IN STD_LOGIC;--启动--S2 confirm : IN STD_LOGIC;--确认--S3 succeed_led : OUT STD_LOGIC;--购买成功输出蔬菜--LED0 charge_led : OUT STD_LOGIC;--找零指示灯--LED3 bit_sel : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管位选 seg_sel : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); END auto_sell; ARCHITECTURE behave OF auto_sell IS COMPONENT control IS PORT ( clk : IN STD_LOGIC; reset_p : IN STD_LOGIC; vegetables : IN STD_LOGIC_VECTOR(2 DOWNTO 0); number : IN STD_LOGIC; coin_10 : IN STD_LOGIC; coin_50 : IN STD_LOGIC; start : IN STD_LOGIC; confirm : IN STD_LOGIC; total_money : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); charge_money : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); succeed_led : OUT STD_LOGIC; charge_led : OUT STD_LOGIC ); END COMPONENT; COMPONENT key_jitter IS PORT ( clkin : IN STD_LOGIC;--100M key_in : IN STD_LOGIC;--按键输入 key_negedge : OUT STD_LOGIC--按键下降沿输出 ); END COMPONENT; --显示模块 COMPONENT display IS PORT ( clk : IN STD_LOGIC; total_money : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--输入钱币 charge_money : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--找零钱币 bit_sel : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--数码管位选 seg_sel : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)--数码管段选 ); END COMPONENT; SIGNAL total_money : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL charge_money : STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL coin_10 : STD_LOGIC; SIGNAL coin_50 : STD_LOGIC; BEGIN --调用按键消抖 i0_key_jitter : key_jitter PORT MAP ( clkin => clk, key_in => coin_10_key, key_negedge => coin_10 ); --调用按键消抖 i1_key_jitter : key_jitter PORT MAP ( clkin => clk, key_in => coin_50_key, key_negedge => coin_50 ); --调用控制模块 i_control : control PORT MAP ( clk => clk, reset_p => reset_p, vegetables => vegetables, number => number, coin_10 => coin_10, coin_50 => coin_50, start => start, confirm => confirm, total_money => total_money, charge_money => charge_money, succeed_led => succeed_led, charge_led => charge_led ); --调用数码管显示模块 i_display : display PORT MAP ( clk => clk, total_money => total_money, charge_money => charge_money, bit_sel => bit_sel, seg_sel => seg_sel ); END behave;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=473
346