logo资料库

地铁售票模拟系统VHDL 毕业论文.doc

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
通信线路EDA课程项目 --关于VHDL语言模拟地铁售票控制系 统设计 项目组负责人:胡弘正 通信0903(200985250321) 项 目组成员:刘上校 通信0903(200985250317) 邹 娟 通信0901(200985250103) 完 成 日 期 :遥遥无期
一、 设计要求: 功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功 能。 功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币, 硬币的识别范围是5 角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客 可以连续多次投入钱币。 乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购 买车票时,乘客先选 择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金 额时,售票机自动出 票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘 客可以按取消键取消 本次操作,钱币自动退出。 功能描述:用于模仿地铁售票的自动售票,完成地铁售票的核心控制功 能。 功能要求:售票机有两个进币孔,一个是输入硬币,一个是输入纸币, 硬币的识别范围是5 角和1 元的硬币,纸币的识别范围是1 元、2 元,5 元,10 元。乘客 可以连续多次投入钱币。 乘客可以选择的种类为2 元和4 元,乘客一次只能选择一个出站口。购
买车票时,乘客先选 择出站名,然后选择所需的票数,再进行投币,投入的钱币达到所需金 额时,售票机自动出 票,并找出余额,本次交易结束,等待下一次的交易。在投币期间,乘 客可以按取消键取消 本次操作,钱币自动退出。 二. 课题分析 1. 买车票时,乘客按“开始选择”按钮,接着选择出站口接着 选择购票数量(根据提示,一次购票数限制在 3 张以内);然后按 “开始投币”按钮,投入钱币;当投入的钱币达到所需金额时, 售票机自动出票,并找出余额。考虑到控制整个售票机的物理体 积,余额将全部采用 5 角硬币的形式找出。 2. 选择出站口或投币过程中,乘客都可以按“取消”按钮取消 该次交易。选择出站口的过程中,若按“取消”,则售票机直接回 到初始状态;投币过程中,若按“取消”,则售票机将乘客已经投 入的钱币全部退出,再回到初始状态。 3. 客一次只能选择一个出站口,根据乘坐的站数确定票价。假 设乘客购票所在站到终点站共有 15 站。若乘坐 1-8 站,则票价为
2 元/张;若乘坐 9-16 站,则票价为 4 元/张。16 个站用长度位 4 的二进制向量编码表示,即 0001 表示乘坐 1 站,0010 表示乘坐 2 站,依次类推,1111 表示乘坐 15 站(到终点站)。 4. 票机有 2 个进币端口。硬币口可识别 5 角和 1 元 2 种硬币, 拟用长度为 2 的一比特热位(one-hot)编码方式表示,即 01 表 示 5 角,10 表示 1 元。纸币口类似,用长度为 4 的一比特热位编 码方式表示。乘客可以连续多次投入钱币,并且可以以任意顺序 投入硬币和纸币。 5. 票机设有钱币“暂存杆”,其有 3 个状态:退币状态、等待状 态、进币状态,分别用 00、01、10 表示。退币状态下,“暂存杆” 将乘客投入的钱币推出;等待状态下,投入的钱币被“暂存杆” 挡住暂存;进币状态下,“暂存杆”将乘客投入的钱币推入售票机 内部。
三、系统流程图: 初始状态 按“开始选择” 选择出站口 选择购票数 按“开始投币” 按“取消” 投入钱币 按“取消” 退回钱币 钱币入库 钱币足够 出票口出票 找零口找零
四.系统状态图
五、程序源代码及注释 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity subway is port( :in std_logic; :in std_logic; :in std_logic; :in std_logic; clk select_start insert_start coin :in std_logic_vector(1 downto 0); note :in std_logic_vector(3 downto 0); cancel ticket_stop :in std_logic_vector(3 downto 0); ticket_account :in std_logic_vector(1 downto 0); money_gate :out std_logic_vector(1 downto 0); :out std_logic_vector(4 downto 0); ticket_out ticket_gate :out std_logic; :out std_logic change_gate --系统时钟 --“开始选择”按钮 --“开始投币”按钮 --硬币入口 --纸币入口 --“取消”按钮 --出站口编号 --购票张数 --钱币“暂存杆” --购买的车票 --出票口 --找零口 ); end subway; architecture behave of subway is type state_type is (initialize_state,select_state,insert_state,ticket_state,change_state); signal state:state_type; begin process(clk) --状态变量申明 --状态信号申明 variable type_temp :std_logic; variable account_temp :std_logic; variable temp_type :std_logic_vector(4 downto 0); --记录是否已选择出站口的变量 --记录是否已选择购票张数的变量 --记录票种的中间变量
:std_logic_vector(4 downto 0); --记录票数的中间变量 variable temp_account variable price :std_logic_vector(7 downto 0); :std_logic_vector(1 downto 0); variable number variable total_price :std_logic_vector(7 downto 0); variable total_insert:std_logic_vector(7 downto 0);-- 记录投入钱币总额的变量 variable change variable sign :std_logic; variable temp :std_logic; --记录系统是否已经过初始化的变量 :std_logic_vector(7 downto 0); --记录应找零金额的变量 --记录投入钱币金额达到总票价的变量 --记录单张票价的变量 --记录票数的变量 --记录总票价的变量 begin if (clk'event and clk='1') then --时钟信号上升沿触发 case state is when initialize_state=> then if(sign='0') --初始状态 --表示系统未经过初始化 --钱币“暂存杆”退出钱币 --购票记录清零 --出票口关闭 --找零口关闭 --票种记录清零 --票数记录清零 --单张票价记录清零 --购票张数记录清零 --票价总额记录清零 --投入钱币总额记录清零 --应找零金额记录清零 --记录已完成系统初始化 money_gate<="00"; ticket_out<="00000"; ticket_gate<='0'; change_gate<='0'; temp_type:="00000"; temp_account:="00000"; type_temp:='0'; account_temp:='0'; price:="00000000"; number:="00"; total_price:="00000000"; total_insert:="00000000"; change:="00000000"; sign:='1'; temp:='0' ; --投入达到总票价记录清零 else --表示系统已经过初始化 money_gate<="01"; if (select_start='1') then --按下“开始选择”按钮 --钱币“暂存杆”归为等待状态
分享到:
收藏