收藏 分销(赏)

EDA课程设计报告停车场管理.doc

上传人:快乐****生活 文档编号:2940234 上传时间:2024-06-11 格式:DOC 页数:22 大小:633KB 下载积分:10 金币
下载 相关 举报
EDA课程设计报告停车场管理.doc_第1页
第1页 / 共22页
EDA课程设计报告停车场管理.doc_第2页
第2页 / 共22页


点击查看更多>>
资源描述
长 沙 学 院 课程设计说明书 题目 模拟停车场管理系统的设计 系(部) 电子与通信工程系 专业(班级) 姓名 学号 指导教师 刘辉、龙英、谢明华 起止日期 2010.5.31-2010.6.11 EDA技术课程设计任务书 系(部):电子与通信工程系 专业:电子信息工程 指导教师:刘辉、龙英、谢明华 课题名称 模拟停车场管理系统的设计 设计内容及要求 实现一个模拟停车场管理系统,使用8位拨码开关表示车号,按键A按下一次表示该车进入停车场,同时数码管显示该车车号信息(3个数码管显示拨码开关对应的十进制数)及收费费率(位方便模拟,按1元/分钟);按键B按下一次表示该车从停车场出来,该车出来时用数码管显示的信息包括:3位车号、停车时间(2位小时数、两位分钟数)、3位停车费用。(数码管位数不够可采用滚动显示的方式) 设计工作量 1、VHDL语言程序设计; 2、波形仿真; 3、在实验装置上进行硬件测试,并进行演示; 4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。 进度安排 起止日期(或时间量) 设计内容(或预期目标) 备注 第1天 课题介绍,答疑,收集材料 第2天 设计方案论证及设计 第3-7天 设计VHDL语言程序 第8-9天 在实验装置上进行硬件测试 第5~9天,第10天上午 在实验装置上进行硬件测试 第10天下午 编写设计说明书 教研室 意见 年 月 日 系(部)主管领导意见 年 月 日 长沙学院课程设计鉴定表 姓名 谭鑫 学号 2007044228 专业 电子信息工程 班级 2 设计题目 模拟停车场管理系统的设计 指导教师 刘辉、龙英、谢明华 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级:     答辩小组长签名:     日期:     教研室意见: 教研室主任签名: 日期:   系(部)意见: 系主任签名:        日期:      说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类; 目 录 1.设计思路分析 1 1.1题目要求 1 1.2设计思路 1 2.系统结构设计及分析 2 2.1分频模块 4 2.2消抖模块 6 2.3车牌显示模块 7 2.4计时模块 9 2.5费率器模块 11 2.6滚动模块 12 2.7译码模块 15 3.使用说明 17 4.心得与体会 18 参考文献 18 1.设计思路分析 1.1题目要求 实现一个模拟停车场管理系统,使用8位拨码开关表示车号,按键A按下一次表示该车进入停车场,同时数码管显示该车车号信息(3个数码管显示拨码开关对应的十进制数)及收费费率(位方便模拟,按1元/分钟);按键B按下一次表示该车从停车场出来,该车出来时用数码管显示的信息包括:3位车号、停车时间(2位小时数、两位分钟数)、3位停车费用。(数码管位数不够可采用滚动显示的方式) 1.2设计思路 分析题目要求,宜采用“模块法”的设计方法。(模块法——先用VHDL语言设计各个模块,将这些模块生成图形文件,在顶层文件中再调用这些图形。) 具体思路: 当一辆车进入停车场,按键A被按下:计时器开始计时,同时把该车的车牌号和费率送入数码管显示(3个数码管显示拨码开关对应的十进制数:采用BCD码转换的方法;费率显示采用输入设置,可以通过按键+1的方式设置从1~99的费率)。当车驶出停车场时,按键B被按下,此时计时器停止计时,并把计时时间送入数码管显示(2位小时数、两位分钟数),同时显示车牌号信息及停车费用(三位显示:停车费用=停车时间×费率)。由于数码管位数不够采用滚动显示的方式。 2.系统结构设计及分析 本系统主要包括以下八个模块:分频模块fpq,车牌BCD转换模块chepai,消抖模块xiaodou,计时模块jishi,费率模块feilvqi,计价器模块jjq,滚动模块gundong,译码器模块YMQ。先通过VHDL文本生成这些模块,再在顶层文件中调用这些模块。 系统的主程序流程图如图1所示。 图1.系统主程序流程图 系统的顶层文件,即为本系统的总原理图,如图2所示。 图2.系统总原理图 2.1分频模块 该模块对实验箱上的50MHz时钟进行分频,分成所需要的几种不同频率的时钟。分频的原理为:对50MHz时钟每来一个上升沿计一次数,当计数到一定值的时候,计数值清零并且让输出电平取反,根据计数值的不同可以得到不同的输出频率。在本设计中分频出0.1HZ,1HZ,100Hz,200Hz,500Hz的频率,以供不同的需要。 分频模块源程序: 图3 分频模块 2.2消抖模块 作为机械开关的键盘,在按键操作时,机械触点的弹性及电压突跳等原因,在触点闭合和开启瞬间会出现电压的抖动。为保证按键识别的准确性,在按键电压信号抖动的情况下不能进行状态输入。为此必须进行去抖动处理,消除抖动部分的电压信号,一般有硬件和软件两种方法。硬件就是加去抖动电路,这样可以从根本上解决按键抖动问题。软件消抖就是利用软件延时消抖,具体说就是当检测到高电平(有按键按下),1kHz脉冲来一个高电平计数值加1,一遇到低电平计数值清零,当计数值大于10时,说明按键是被真的按下,消除了抖动。本系统采用软件消抖。 图4.消抖模块 图5.消抖模块波形仿真 消抖模块源程序: 2.3车牌显示模块 用8位拨码开关表示车号,拨码开关对应的8位二进制通过BCD转换为12位BCD码。 图5.拨码开关BCD转换模块 8位拨码开关BCD码转换程序: --拨码开关对应数码管显示 --**************库定义、 包定义******************** LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.All; USE ieee.STD_LOGIC_UNSIGNED.ALL; --******************实体定义*********************** ENTITY chepai IS PORT(--clk : IN STD_LOGIC;--时钟输入 key : in std_logic_vector(7 downto 0);--键入 -- l : out STD_LOGIC_VECTOR(7 downto 0);--输出数码管位选 chep : out STD_LOGIC_VECTOR(11 downto 0)--数码管段码 ); END chepai ; --**************构造体定义******************** ARCHITECTURE an OF chepai IS signal clock : std_logic;--分频后时钟 signal p : integer range 0 to 255;--显示数据寄存器 signal b0,b1,b2 : integer range 0 to 9;--显示数位寄存器,b0表示个位,b1表示十位,b2表示百位 signal cnt : integer range 0 to 3:=0;--数码管位选扫描程序 begin p<=conv_integer(key);--数据输入 process(p)--显示查表进程 FUNCTION b_to_s4(bcd8421:INTEGER RANGE 0 TO 9) RETURN STD_LOGIC_VECTOR IS--BCD转换七段函数 VARIABLE smg4: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN CASE bcd8421 IS --计算输出值 WHEN 0 => smg4:="0000";--0 --gfedcba 共阳 WHEN 1 => smg4:="0001";--1 WHEN 2 => smg4:="0010";--2 WHEN 3 => smg4:="0011";--3 WHEN 4 => smg4:="0100";--4 WHEN 5 => smg4:="0101";--5 WHEN 6 => smg4:="0110";--6 WHEN 7 => smg4:="0111";--7 WHEN 8 => smg4:="1000";--8 WHEN 9 => smg4:="1001";--9 when others=>null; END CASE; RETURN smg4; END b_to_s4; begin case p is when 0|10|20|30|40|50|60|70|80|90|100|110|120|130|140|150|160|170 |180|190|200|210|220|230|240|250=>b0<=0; when 1|11|21|31|41|51|61|71|81|91|101|111|121|131|141|151|161|171 |181|191|201|211|221|231|241|251=>b0<=1; when 2|12|22|32|42|52|62|72|82|92|102|112|122|132|142|152|162|172 |182|192|202|212|222|232|242|252=>b0<=2; When 3|13|23|33|43|53|63|73|83|93|103|113|123|133|143|153|163|173 |183|193|203|213|223|233|243|253=>b0<=3; When 4|14|24|34|44|54|64|74|84|94|104|114|124|134|144|154|164|174 |184|194|204|214|224|234|244|254=>b0<=4; When 5|15|25|35|45|55|65|75|85|95|105|115|125|135|145|155|165|175 |185|195|205|215|225|235|245|255=>b0<=5; When 6|16|26|36|46|56|66|76|86|96|106|116|126|136|146|156|166|176 |186|196|206|216|226|236|246=>b0<=6; When 7|17|27|37|47|57|67|77|87|97|107|117|127|137|147|157|167|177 |187|197|207|217|227|237|247=>b0<=7; When 8|18|28|38|48|58|68|78|88|98|108|118|128|138|148|158|168|178 |188|198|208|218|228|238|248=>b0<=8; When 9|19|29|39|49|59|69|79|89|99|109|119|129|139|149|159|169|179 |189|199|209|219|229|239|249=>b0<=9; when others=> end case; case p is when 0|1|2|3|4|5|6|7|8|9|100|101|102|103|104|105|106|107|108|109 |200|201|202|203|204|205|206|207|208|209=>b1<=0; when 10|11|12|13|14|15|16|17|18|19|110|111|112|113|114|115|116|117 |118|119|210|211|212|213|214|215|216|217|218|219=>b1<=1; when 20|21|22|23|24|25|26|27|28|29|120|121|122|123|124|125|126|127 |128|129|220|221|222|223|224|225|226|227|228|229=>b1<=2; when 30|31|32|33|34|35|36|37|38|39|130|131|132|133|134|135|136|137 |138|139|230|231|232|233|234|235|236|237|238|239=>b1<=3; when 40|41|42|43|44|45|46|47|48|49|140|141|142|143|144|145|146|147 |148|149|240|241|242|243|244|245|246|247|248|249=>b1<=4; when 50|51|52|53|54|55|56|57|58|59|150|151|152|153|154|155|156|157 |158|159|250|251|252|253|254|255=>b1<=5; when 60|61|62|63|64|65|66|67|68|69|160|161|162|163|164|165|166|167 |168|169=>b1<=6; when 70|71|72|73|74|75|76|77|78|79|170|171|172|173|174|175|176|177 |178|179=>b1<=7; when 80|81|82|83|84|85|86|87|88|89|180|181|182|183|184|185|186|187 |188|189=>b1<=8; when 90|91|92|93|94|95|96|97|98|99|190|191|192|193|194|195|196|197 |198|199=>b1<=9; when others=>--b0<=10; end case; if p<100 then b2<=0; elsif p>=100 and p<200 then b2<=1; elsif p>=200 then b2<=2; end if; chep(3 downto 0)<=b_to_s4(b0); chep(7 downto 4)<=b_to_s4(b1); chep(11 downto 8)<=b_to_s4(b2); end process; end an; 2.4计时模块 当A键按下时,计时器开始计时,B键按下时,计时器停止计时,clk为计时脉冲,来一个上升沿,计数器加1,reset为总复位信号。 计时模块程序: 图7.计时模块波形仿真 2.5费率器模块 初值为0,当费率在0-99范围内时,费率按键每按一次,费率加1。 图7.费率器波形仿真图 8.费率器模块图形文件 费率器模块源程序: 2.6滚动模块 滚动显示模块,当C=1时不滚动,但当C=0时滚动显示车牌、停车时间、及停车中费用。y[3..0]输出到译码器,sel为位选信号。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; 图9 滚动模块图形文件 entity gundong is port ( A,B:in std_logic; data: in std_logic_vector(15 downto 0); chep:in std_logic_vector(11 downto 0); price:in std_logic_vector(11 downto 0); feilv:in std_logic_vector(7 downto 0); clk_200Hz,clk_1Hz: in std_logic; sel: out std_logic_vector(7 downto 0);--weixuan y: out std_logic_vector(3 downto 0)); end ; architecture body_chooser of gundong is signal c:std_logic; signal count: std_logic_vector (2 downto 0); signal cnt:std_logic_vector(3 downto 0); begin -- process(clk_200Hz) -- begin process(A,B) begin if (A'event and A='1') then c<='1'; end if; if B='1' then c<='0'; end if; end process; process(clk_200Hz) begin if(clk_200Hz'event and clk_200Hz='1')then if count<"111" then count<=count+1; else count<="000"; end if; end if; end process; process(clk_1Hz) begin if clk_1Hz'event and clk_1Hz='1' then if cnt<"1100" then cnt<=cnt+1; else cnt<="0000"; end if; end if; end process; process(c,cnt,count) begin if c='1' then case count is --when "000"=>y<="1010";sel<="00000001"; when "000"=>y<=feilv(3 downto 0);sel<="00000010"; when "001"=>y<=feilv(7 downto 4);sel<="00000100"; --when "011"=>y<="1010";sel<="00001000"; when "010"=>y<=chep(3 downto 0);sel<="00100000"; when "011"=>y<=chep(7 downto 4);sel<="01000000"; when "100"=>y<=chep(11 downto 8);sel<="10000000"; when others=>null; end case; elsif cnt="0000" then case count is when "000"=>y<=chep(11 downto 8);sel<="10000000"; when "001"=>y<=chep(7 downto 4);sel<="01000000"; when "010"=>y<=chep(3 downto 0);sel<="00100000"; when "011"=>y<="1010";sel<="00010000"; when "100"=>y<=data(15 downto 12);sel<="00001000"; when "101"=>y<=data(11 downto 8);sel<="00000100"; when "110"=>y<=data(7 downto 4);sel<="00000010"; when "111"=>y<=data(7 downto 4);sel<="00000001"; when others=>null; end case; elsif cnt="0001" then case count is when "000"=>y<=chep(7 downto 4);sel<="10000000"; when "001"=>y<=chep(3 downto 0);sel<="01000000"; when "010"=>y<="1010";sel<="00100000"; when "011"=>y<=data(15 downto 12);sel<="00010000"; when "100"=>y<=data(11 downto 8);sel<="00001000"; when "101"=>y<=data(7 downto 4);sel<="00000100"; when "110"=>y<=data(3 downto 0);sel<="00000010"; when "111"=>y<="1010";sel<="00000001"; when others=>null; end case; elsif cnt="0010" then … elsif cnt="0011" then … elsif cnt="0100" then … elsif cnt="0101" then … elsif cnt="0110" then … elsif cnt="0111" then … elsif cnt="1000" then … elsif cnt="1001" then … elsif cnt="1010" then … elsif cnt="1011" then … elsif cnt="1100" then case count is when "000"=>y<="1010";sel<="10000000"; when "001"=>y<=chep(11 downto 8);sel<="01000000"; when "010"=>y<=chep(7 downto 4);sel<="00100000"; when "011"=>y<=chep(3 downto 0);sel<="00010000"; when "100"=>y<="1010";sel<="00001000"; when "101"=>y<=data(15 downto 12);sel<="00000100"; when "110"=>y<=data(11 downto 8);sel<="00000010"; when "111"=>y<=data(7 downto 4);sel<="00000001"; when others=>null; end case; end if; end process; end body_chooser; 图10 滚动显示 2.7译码模块 该模块将将输入的二进制信号译成相应的七段共阳极数码管的编码。数据输入data[3..0],译码输出led7s[6..0]。 图11.译码模块图形文件 译码模块程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ymq is port(data: in std_logic_vector(3 downto 0); led7s: out std_logic_vector(6 downto 0)); end ; architecture one of ymq is begin process(y) begin case y is when "0000"=>led7s<="1000000"; --0 when "0001"=>led7s<="1111001"; --1 when "0010"=>led7s<="0100100"; --2 when "0011"=>led7s<="0110000"; --3 when "0100"=>led7s<="0011001"; --4 when "0101"=>led7s<="0010010"; --5 when "0110"=>led7s<="0000010"; --6 when "0111"=>led7s<="1111000"; --7 when "1000"=>led7s<="0000000"; --8 when "1001"=>led7s<="0010000"; --9 when others=>null; end case; end process; end ; 图12.译码模块波形仿真 3. 使用说明 按键说明: A按键:为开始按钮,即当车辆进入停车场时,按下A开始计时,并显示进入车辆的车牌号及收费费率。B按键:为停止按钮,即当车辆驶出停车场时,按下B按钮,停止计时,并滚动显示,车牌号、停车时间及停车费用。费率按键:为费率设置按钮,每按一次,费率加1。Reset按钮为总复位按钮。clk为系统时钟,绑定到实验箱上的50MHz的时钟上,led7s[6..0]为数码管段选控制信号,sel[7..0]为8个数码管的位选控制信号。 测试方法:首先按下复位键,然后设置八位拨码开关的值(车牌号),此时,数码管显示三位车牌号信息和费率,按下费率按键可以设置费率的值(每按一次加1,范围0~99),过一段时间,按下B键,此时8位数码管会滚动显示,三位车牌号,四位停车时间和三位停车费。按下复位键,可重新测试。 系统的引脚绑定如图13所示,实际操作中只需要按下图绑定即可。 图13.系统引脚绑定 4. 心得与体会 两周的EDA课程设计,我终于能在第8天成功的设计出了我的课题:模拟停车场管理系统,虽然在速度上我没能赶上部分同学,但是与他们不同的是,从软件到硬件完全是我一个人做出来的。没有人跟我同一个题目,网上也找不到资料,完全是一个人的战斗,但最后,我相信我赢得了这场战斗的胜利,圆满完成了模拟停车场管理系统的软硬件设计。 在这场战斗中我有很大的收获,首先我采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块联合起来调试,加深了我们对层次化设计的概念的认识。在设计的过程中,虽然遇到了很多困难,但是通过向老师和同学请教以及自己不断摸索、测试,一个个难题迎刃而解。从而提高了我独立发现问题、分析问题、解决问题的能力,其次,我也明白了一个道理,任何一件事情,只有亲自去做的时候才知道它到底难不难,有多难。我们就像小马过河中的小马,需要自己多去尝试。 参考文献 [1].《 EDA技术实用教程》潘松,黄继业.. 北京:科学出版社,2006 [2].《 VHDL设计实例与仿真》姜雪松,吴钰淳,王鹰等.. 北京:机械工业出版社,2007 [3]. 《基于Quartus Ⅱ的FPGA/CPLD设计》李洪伟,袁斯华..北京:电子工业出版社,2006
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服