武汉理工大学FPGA taxi计价器.doc_第1页
武汉理工大学FPGA taxi计价器.doc_第2页
武汉理工大学FPGA taxi计价器.doc_第3页
武汉理工大学FPGA taxi计价器.doc_第4页
武汉理工大学FPGA taxi计价器.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA应用实训课程设计任务书学生姓名: 专业班级: 指导教师: 华 剑 工作单位: 信息工程学院 题 目: 武汉市TAXI计价器的设计与仿真初始条件:EDA开发板,Quartus软件。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、课程设计工作量:1周。2、技术要求: 设计一个符武汉市合现行计价标准的TAXI计价器。计价方案见附件。确定设计方案,按功能模块设计分电路,画出总体电路原理图,阐述基本原理。用Quartus软件完成设计,下载至开发板上运行。查阅至少5篇参考文献,限近5年出版。按武汉理工大学课程设计工作规范要求撰写设计报告书。全文用A4纸打印或手写,图纸应符合绘图规范。时间安排:1、 2013 年 6 月 19 日分班集中,作课设具体实施计划与课程设计报告格式的要求说明。2、 2013 年 7 月 1 日 至 2013 年 7 月 6 日为课程设计周。3、 2013 年 7 月 6日完成课程设计报告与答辩。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录目录摘要31 绪论32 出租车计费系统的实验任务及要求32.1技术要求32.2功能要求32.3计费标准43 方案设计及原理框图43.1硬件方案设计及原理框图43.2软件方案设计及原理框图44 各单元模块设计,仿真结果及分析74.1 分频模块74.2计程模块94.3计时模块144.4 计费模块174.5控制模块104.6 译码模块245 顶层模块设计,仿真结果及分析285.1各模块的连线图285.2 波形仿真285.3输入、输出信号说明295.4调试结果说明及分析296 收获体会29参考文献29基于FPGA的出租车计价器设计摘要介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用FPGA器件构成该数字系统的设计思想和实现过程。论述了计程模块,计费模块,计时模块,译码动态扫描模块等的设计方法与技巧。 1 绪论随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。本文介绍了一个以Altera公司可编程逻辑芯片cyclone2系列的EP2C5T144C8的FPGA芯片为控制核心、附加一定外围电路组成的出租车计费器系统。随着社会的不断进步,人们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛。2 出租车计费系统的实验任务及要求2.1技术要求(1)掌握较复杂逻辑的设计、调试;(2)进一步掌握用VHDL语言设计数字逻辑电路;(3)掌握用QuartusII软件的原理图输入的设计方法。2.2功能要求(1)设置两种收费模式,按里程和按等待时间计费;(2)实现模拟功能:能模拟汽车启动、停止、暂停;(3)设计动态扫描电路:将车费、里程、等待时间动态的显示出来;(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路;(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。2.3计费标准(附件一)3 方案设计及原理框图3.1硬件方案设计及原理框图输入电路FPGA模块动态显示电路图1硬件系统组成框图各模块的作用和组成:(1)输入电路:该模块主要有两个开关以及一个输入信号引脚,作用是输入信号到FPGA中。(3)动态显示模块:此模块由4个数码管所构成,作用是将里程、等待时间和计费动态分时地显示出来。3.2软件方案设计及原理框图3.2.1 FPGA内部具体框图及方案设计出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从6开始计算;出租车载客中途等待,等待时间计数器从0开始计数。行驶途中不断根据行驶里程或停止等待的时间的计费标准计费。出租车到达目的地停止后,停止计费。根据出租车计费器的工作过程,本系统采用分层次、分模块的方式设计,其FPGA内部具体框图如下所示。输入信号车行驶状态等待计时模块译码模块输出控制模块里程计数模块计费模块分频器图2 软件系统组成框图3.2.2 软件路程图开始 否是否开车 是是否暂停否 是 计里程 计费 计时显示结束图3 软件流程图4 各单元模块设计,仿真结果及分析本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。4.1 分频模块4.1.1 分频模块原理图 图4 分频器原理图4.1.2 分频模块介绍此模块的功能是对总的时钟进行分频,总的时钟是50M。计数分频器f60和f50m能分别把时钟频率分到1/60和1/50M,组合两分频器1Hz和1/60Hz的信号。信号介绍为:clk0:输入时钟信号;fout:输出时钟信号。4.1.3 分频模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY f60 IS PORT(clk0:IN STD_LOGIC; fout:OUT STD_LOGIC);END f60;ARCHITECTURE two OF f60 ISBEGIN PROCESS(clk0) VARIABLE cnt:STD_LOGIC_VECTOR(5 DOWNTO 0); VARIABLE full :STD_LOGIC; BEGINIF clk0EVENT AND clk0=1 THEN IF cnt= 111011 THEN cnt:= 000000 ; full:=1; ELSE cnt:=cnt+1; full:=0; END IF;END IF; fout=full; END PROCESS;END two;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY f50m IS PORT(clk0:IN STD_LOGIC; fout:OUT STD_LOGIC);END f50m;ARCHITECTURE three OF f50m ISBEGIN PROCESS(clk0) VARIABLE cnt:STD_LOGIC_VECTOR(25 DOWNTO 0); VARIABLE full :STD_LOGIC; BEGINIF clk0EVENT AND clk0=1 THEN IF cnt= 10111110101111000001111111 THEN cnt:= 00000000000000000000000000 ; full:=1; ELSE cnt:=cnt+1; full:=0; END IF;END IF; fout=full; END PROCESS;END three; 4.1.4分频器仿真图5分频器仿真图从该波形图可以看出输入脉冲的频率是输出脉冲的频率的60倍。4.2计程模块4.2.1计程模块原理图图6 计程模块原理图4.2.2 计程模块介绍此模块的功能是计算出租车行驶的里程和里程费用。在出租车启动并行驶的过程中(开始/结束信号ss为1,行驶/等待信号wr为0),当clks输入上升沿的时候,系统即进行加计数,当路程小于三公里时,费用为6元;当路程超过三公里时,系统将输出标志正脉冲dis_flag0,每走100m费用加0.1元;当路程超过七公里时,系统将输出标志正脉冲dis_flag1,每走100m费用加0.2元。在出租车启动但不行驶的过程中(开始/结束信号ss为1,行驶/等待信号wr为0), 计程模块不计数。信号介绍如下:clks:输入里程信号,每次上升沿代表10m的路程;ss:开始/停止信号;wr:暂停/启动信号;dis10000,dis1000,dis100,dis10:输出里程数,分别代表里程数的万、千、百、十位;fee2,fee1,fee0:输出里程费用,分别代表里程费用的十、个、分位;dis_flag0,dis_flag1:输出标志,分别代表里程数大于3km和7km.4.2.3 计程模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY distance IS PORT(clks,ss,wr :IN STD_LOGIC; dis10000,dis1000 :BUFFER STD_LOGIC_vector(3 downto 0); dis100,dis10,fee2,fee1,fee0:OUT STD_LOGIC_vector(3 downto 0); dis_flag1,dis_flag0 :BUFFER STD_LOGIC);END ENTITY distance;ARCHITECTURE one OF distance ISBEGIN PROCESS(clks,ss,wr) VARIABLE fee_flag2,fee_flag1,fee_flag0,q3,q2,q1,q0:STD_LOGIC_vector(3 downto 0); VARIABLE sw:STD_LOGIC_VECTOR(1 DOWNTO 0); VARIABLE flag:STD_LOGIC; BEGINsw := ss≀ IF sw = 00 OR sw = 01 THEN q2 := 0000; q1 := 0000; q0 := 0000; fee_flag0 := 0000; fee_flag1 := 0000; fee_flag2 := 0000; flag := 1;ELSIF sw = 11 THEN q2 := q2; q1 := q1; q0 := q0; ELSIF clksEVENT AND clks =1 THEN IF (q3 = 9 AND q2 =9) AND (q1=9 AND q0=9) THEN q3 := 0000; q2 := 0000; q1 := 0000;q0 := 0000; flag := 1; ELSIF q2 = 9 AND (q1 =9 AND q0 =9) THEN q3 := q3 + 1; q2 := 0000; q1 := 0000; q0 := 0000; flag := 1;ELSIF q1 = 9 AND q0 = 9 THEN q2 := q2 + 1; q1 := 0000; q0 := 0000; flag := 1;ELSIF q0 = 9 THEN q1 := q1 + 1; q0 := 0000; flag := 1;ELSE q0 := q0 + 1; flag := 0; END IF; IF flag = 1 THEN IF dis_flag0 = 0 AND dis_flag1 = 0 THEN fee_flag2 := 0000; fee_flag1 := 0110; fee_flag0 :=0000;ELSIF dis_flag0 = 1 THENIF fee_flag0 = 9 AND fee_flag1 = 9 THEN fee_flag2 := fee_flag2 + 1;fee_flag0 := 0000; fee_flag1 := 0000; ELSIF fee_flag0 = 9 THEN fee_flag0 := 0000; fee_flag1 := fee_flag1 + 1; ELSE fee_flag0 := fee_flag0 + 1; END IF; ELSEIF fee_flag2 = 9 AND (fee_flag0 = 8 AND fee_flag1 = 9) THEN fee_flag2 := 0000; fee_flag1 := 0000; fee_flag0 := 0000; ELSIF fee_flag0 = 8 AND fee_flag1 = 9 THEN fee_flag2 := fee_flag2 + 1; fee_flag0 := 0000; fee_flag1 := 0000;ELSIF fee_flag0 = 8 THEN fee_flag0 := 0000; fee_flag1 := fee_flag1 + 1; ELSE fee_flag0 := fee_flag0 + 2; END IF;END IF;END IF; END IF; fee2 = fee_flag2; fee1 = fee_flag1; fee0 = fee_flag0; dis10000 = q3; dis1000 = q2; dis100 = q1; dis10 = q0; END PROCESS; PROCESS(ss,dis1000,dis10000) BEGIN IF ss = 0 OR ( dis1000 4 AND dis10000 = 0 ) THEN dis_flag0 = 0; dis_flag1 = 0; ELSIF dis1000 8 AND dis10000 = 0 THEN dis_flag0 = 1; dis_flag1 = 0;ELSE dis_flag0 = 0; dis_flag1 = 1; END IF; END PROCESS;END one;4.2.4 计程模块仿真结果图7 计程模块仿真1图8 计程模块仿真2从波形图可以看出在时钟的控制下当ss为低电平或wr为高电平的时候LC为零,当SS为高电平且WR为低电平的时候LC开始计数,当计到大于三的时候输出dis_flag0为高电平,当计到大于七的时候输出dis_flag1为高电平。4.3计时模块4.3.1计时模块原理图图9计时模块原理图4.3.2 计时模块介绍此模块用于计算停车等待的时间。在出租车行进中,如果车辆暂停而等待(wr=0),计数器则在信号clk的上升沿进行加计数,当等待时间每增加3分钟,按下述规则收费:如果里程不大于3km,不计费;如果里程数大于3km不大于7km,计费增加0.5元;如果里程数大于7km,计费增加1元。信号介绍如下:clk:时钟信号输入;ss:开始/停止信号;wr:暂停/启动信号;dis1,dis0:里程标志输入信号,分别代表里程数大于7km和大于3km;wait_time1,wait_time0:等待时间输出,分别代表等待时间的个、分位;wait_fee1,wait_fee0:等待费用输出,分别代表等待费用的个、分位4.3.3 计时模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY wait_time IS PORT(clk,wr,ss,dis1,dis0 :IN STD_LOGIC; wait_time1,wait_time0,wait_fee1,wait_fee0 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY wait_time;ARCHITECTURE one OF wait_time IS SIGNAL time3m: STD_LOGIC;BEGIN PROCESS(clk,wr,ss,time3m,dis1,dis0) VARIABLE q1,q0: STD_LOGIC_VECTOR(3 DOWNTO 0); VARIABLE q3m : STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN IF ss = 0 THEN q1 := 0000; q0 := 0000; time3m = 0; ELSE IF wr = 1 THEN IF clkEVENT AND clk = 1 THENIF q1=9 AND q0=9 THEN q1:=0000;q0:=0000; ELSIF q0=9 THEN q1:=q1+1;q0:=0000; ELSE q1:=q1;q0:=q0+1; END IF; IF dis1 = 1 OR dis0 = 1 THEN IF q3m = 10 THEN q3m := 00 ; time3m = 1;ELSE q3m := q3m + 1; time3m = 0; END IF; END IF;END IF; END IF; END IF; wait_time1 = q1; wait_time0 = q0; END PROCESS; PROCESS(time3m)VARIABLE q3,q2: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF time3m = 1 THENIF dis0 = 1 THEN IF (q3 = 9 AND q2 = 5) THEN q3 := 0000; q2 := 0000;ELSIF q2 = 5 THEN q3 := q3 + 1; q2 := 0000;ELSE q2 := q2 + 5;END IF;ELSIF time3m = 1 THEN IF q3 = 9 THEN q3 := 0000;ELSE q3 := q3 + 1;END IF;END IF;END IF;wait_fee1 = q3; wait_fee0 9) THEN fee_temp0 := dis_fee0 + wait_fee0 - 10; ctemp := 0001;IF(dis_fee1 + wait_fee1 + ctemp 9) THEN fee_temp1 := dis_fee1 + wait_fee1 + ctemp -10; ctemp := 0001;IF (dis_fee2 + ctemp 9) THEN fee_temp2 := 0000; fee_temp1 := 0000; fee_temp0 := 0000;ctemp := 0000;ELSE fee_temp2 := dis_fee2 + ctemp; ctemp := 0000;END IF;ELSE fee_temp1 := dis_fee1 + wait_fee1 + ctemp; ctemp := 0000;IF (dis_fee2 + ctemp 9) THEN fee_temp2 := 0000; fee_temp1 := 0000; fee_temp0 := 0000;ctemp := 0000;ELSE fee_temp2 := dis_fee2 + ctemp;ctemp := 0000;END IF;END IF;ELSE fee_temp0 := dis_fee0 + wait_fee0; ctemp := 0000;IF(dis_fee1 + wait_fee1 + ctemp 9) THEN fee_temp1 := dis_fee1 + wait_fee1 + ctemp -10; ctemp := 0001;IF (dis_fee2 + ctemp 9) THEN fee_temp2 := 0000; fee_temp1 := 0000; fee_temp0 := 0000;ctemp := 0000;ELSE fee_temp2 := dis_fee2 + ctemp;ctemp := 0000;END IF;ELSE fee_temp1 := dis_fee1 + wait_fee1 + ctemp; ctemp := 0000;IF (dis_fee2 + ctemp 9) THEN fee_temp2 := 0000; fee_temp1 := 0000; fee_temp0 := 0000;ctemp := 0000;ELSE fee_temp2 := dis_fee2 + ctemp; ctemp := 0000;END IF;END IF;END IF;END IF;fee2 = fee_temp2;fee1 = fee_temp1;fee0 = fee_temp0;END PROCESS;END one; 4.4.4 计费模块的仿真结果图12 计费模块仿真图4.5控制模块4.5.1控制模块原理图图13 控制模块原理图4.5.2 控制模块介绍控制模块用于对数码管里程、时间、费用显示的选择,起到位选的作用,实现了数码管动态显示,节省了芯片的资源。信号介绍:clk1:时钟信号输入;s1:选择信号输出;sel2:选择信号输入;dis3,dis2,dis1,dis0:里程信号输入;time1,time0:时间信号输入;fee_in2,fee_in1,fee_in0:总费用信号输入;sout3,sout2,sout1,sout0:被选择输出信号。4.5.2 控制模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY sel1 IS port(clk1:IN STD_LOGIC; s1:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);END sel1;ARCHITECTURE one OF sel1 ISBEGIN PROCESS(clk1) VARIABLE temp:STD_LOGIC_VECTOR(1 DOWNTO 0); VARIABLE cnt:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN IF clk1EVENT AND clk1=1 THEN IF cnt=11 THEN cnt:=00; IF(temp = 10) THEN temp := 00;ELSE temp := temp + 1;END IF;ELSE cnt:=cnt+1; END IF; END IF;s1 sout3= dis3; sout2 = dis2; sout1 = dis1; sout0 sout3= 0000; sout2 = 0000; sout1 = time1; sout0 sout3= 1111; sout2 = fee_in2; sout1 = fee_in1; sout0 sout3= 0000; sout2 = 0000; sout1 = 0000; sout0 dout3dout3dout3dout3dout3dout3dout3dout3dout3dout3dout3dout2dout2dout2dout2dout2dout2dout2dout2dout2dout2dout2dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout0dout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论