自动售货机VHL程序与仿真.docx
- 文档编号:27835963
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:10
- 大小:150.79KB
自动售货机VHL程序与仿真.docx
《自动售货机VHL程序与仿真.docx》由会员分享,可在线阅读,更多相关《自动售货机VHL程序与仿真.docx(10页珍藏版)》请在冰豆网上搜索。
自动售货机VHL程序与仿真
自动售货机VHL程序与仿真
————————————————————————————————作者:
————————————————————————————————日期:
自动售货机VHDL程序与仿真
(1)自动售货机VHDL程序如下:
--文件名:
pl_auto1.vhd。
--功能:
货物信息存储,进程控制,硬币处理,余额计算,显示等功能。
--说明:
显示的钱数coin的以5角为单位。
--最后修改日期:
2004.3.23。
libraryieee;
useieee.std_logic_arith.all;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityPL_auto1is
port(clk:
instd_logic;--系统时钟
set,get,sel,finish:
instd_logic;--设定、买、选择、完成信号
coin0,coin1:
instd_logic;--5角硬币、1元硬币
price,quantity:
instd_logic_vector(3downto0);--价格、数量数据
item0,act:
outstd_logic_vector(3downto0);--显示、开关信号
y0,y1:
outstd_logic_vector(6downto0);--钱数、商品数量显示数据
act10,act5:
outstd_logic);--1元硬币、5角硬币
endPL_auto1;
architecturebehavofPL_auto1is
typeram_typeisarray(3downto0)ofstd_logic_vector(7downto0);
signalram:
ram_type;--定义RAM
signalitem:
std_logic_vector(1downto0);--商品种类
signalcoin:
std_logic_vector(3downto0);--币数计数器
signalpri,qua:
std_logic_vector(3downto0);--商品单价、数量
signalclk1:
std_logic;--控制系统的时钟信号
begin
com:
process(set,clk1)
variablequan:
std_logic_vector(3downto0);
begin
ifset='1'thenram(conv_integer(item))<=price&quantity;act<="0000";
--把商品的单价、数量置入到RAM
elsifclk1'eventandclk1='1'thenact5<='0';act10<='0';
ifcoin0='1'then
ifcoin<"1001"thencoin<=coin+1;--投入5角硬币,coin自加1
elsecoin<="0000";
endif;
elsifcoin1='1'then
ifcoin<"1001"thencoin<=coin+2;--投入1元硬币,coin自加2
elsecoin<="0000";
endif;
elsifsel='1'thenitem<=item+1;--对商品进行循环选择
elsifget='1'then--对商品进行购买
ifqua>"0000"andcoin>=prithencoin<=coin-pri;quan:
=quan-1;
ram(conv_integer(item))<=pri&quan;
ifitem="00"thenact<="1000";--购买时,自动售货机对4种商品的操作
elsifitem="01"thenact<="0100";
elsifitem="10"thenact<="0010";
elsifitem="11"thenact<="0001";
endif;
endif;
elsiffinish='1'then--结束交易,退币(找币)
ifcoin>"0001"thenact10<='1';coin<=coin-2;--此IF语句完成找币操作
elsifcoin>"0000"thenact5<='1';coin<=coin-1;
elseact5<='0';act10<='0';
endif;
elsifget='0'thenact<="0000";
foriin4to7loop
pri(i-4)<=ram(conv_integer(item))(i);--商品单价的读取
endloop;
foriin0to3loop
quan(i):
=ram(conv_integer(item))(i);--商品数量的读取
endloop;
endif;
endif;
qua<=quan;
endprocesscom;
m32:
process(clk)--此进程完成对32Mhz的脉冲分频
variableq:
std_logic_vector(24downto0);
begin
ifclk'eventandclk='1'thenq:
=q+1;
endif;
ifq="111111111111111111111111"thenclk1<='1';
elseclk1<='0';
endif;
endprocessm32;
code0:
process(item)--商品指示灯译码
begin
caseitemis
when"00"=>item0<="0111";
when"01"=>item0<="1011";
when"10"=>item0<="1101";
whenothers=>item0<="1110";
endcase;
endprocess;
code1:
process(coin)--钱数的BCD到七段码的译码
begin
casecoinis
when"0000"=>y0<="0000001";
when"0001"=>y0<="1001111";
when"0010"=>y0<="0010010";
when"0011"=>y0<="0000110";
when"0100"=>y0<="1001100";
when"0101"=>y0<="0100100";
when"0110"=>y0<="0100000";
when"0111"=>y0<="0001111";
when"1000"=>y0<="0000000";
when"1001"=>y0<="0000100";
whenothers=>y0<="1111111";
endcase;
endprocess;
code2:
process(qua)--单价的BCD到七段码的译码
begin
casequais
when"0000"=>y1<="0000001";
when"0001"=>y1<="1001111";
when"0010"=>y1<="0010010";
when"0011"=>y1<="0000110";
when"0100"=>y1<="1001100";
when"0101"=>y1<="0100100";
when"0110"=>y1<="0100000";
when"0111"=>y1<="0001111";
when"1000"=>y1<="0000000";
when"1001"=>y1<="0000100";
whenothers=>y1<="1111111";
endcase;
endprocess;
endbehav;
(2)程序仿真
注:
仿真图里没有对clk信号进行分频处理。
图8.21.2系统仿真全图
图8.21.3系统仿真图-预置部分
图21.4系统仿真图-商品种类选择部分
2图8.21.5系统仿真图-投币部分
图8.21.6系统仿真图-购买、找币结束交易部分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 售货 VHL 程序 仿真