EDA课程设计报告出租车计价器.docx
《EDA课程设计报告出租车计价器.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告出租车计价器.docx(15页珍藏版)》请在冰豆网上搜索。
![EDA课程设计报告出租车计价器.docx](https://file1.bdocx.com/fileroot1/2023-6/27/c1b96441-3b02-4209-88e7-a6d607659fee/c1b96441-3b02-4209-88e7-a6d607659fee1.gif)
EDA课程设计报告出租车计价器
EDA课程设计报告--出租车计价器
课程设计
课程设计名称:
出租车计价器
专业班级
学生姓名:
学号:
指导教师:
课程设计时间:
1设计任务及要求
出租车计价器根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并在行程中同步显示车费值。
从起步开始,行程3公里内,且等待累计时间2分钟内,起步费10元;3公里以外以每公里1.6元计费,等待累计时间2分钟外以每分钟1.5元计费。
并能显示行驶公里数、等待累计时间、总费用。
设计的主要技术指标:
(1)计价范围:
0—999.9元计价分辨率:
0.1元
(2)计程范围:
0—99公里计程分辨率:
1公里(3)计时范围:
0—59分计时分辨率:
1分本次设计中假设出租车的速度传感器具有出租车每行驶1Km提供1000个脉冲信号的特性。
当行驶速度小于等于6KM/h时为等待。
本设计的最终任务是显示出租车的等待时间和行驶里程,并计算出所需费用。
根据要求需要进行如下分工,首先要有一个分频模块(FPQ)产生系统工作用的基准信号1HZ,供系统中的有关模块计时用。
其次要有一个判断等待与否的模块(DDPB),再者就是要有计时和计程模块(DDSJ和LCJS),最后要有计费模块和显示译码模块(JFZ和YIMA)。
2设计原理及总体框图
(1)设计总体框图
图1 总设计框图
(2)设计总原理图
图2设计总原理图
设计总原理:
测控FPGA芯片通过采集速度传感器脉冲信号WCLK进行行驶里程计算,利用外部脉冲信号CLK1产生标准时钟信号,用来计算等待时间,最后根据行驶里程、等待时间来计算计价值。
并用译码电路显示行驶里程、等待时间和计价值。
3程序设计
1.VHDL语言简单介绍
VHDL语言(VHSICHardwareDescriptionLanguage,甚高速集成电路硬件描述语言)是一种设计、仿真、综合的标准硬件描述语言,是对可编程逻辑器件进行开发与设计的重要工具,其优点是:
支持自上而下和基于库的设计,支持范围广,具有多层次描述系统硬件功能的能力。
VHDL语言已成为IEEE的一种工业标准,是实现信息系统硬件开发所必备的知识和技能。
VHDL程序结构的显著特点是,任何一个工程设计或称设计实体(可以是一个门电路、一个芯片、一块电路板乃至整个系统)都可以分成内外两个部分,外面的部分称为可视部分,用实体来说明端口特性;里面的部分称为不可视部分,用结构体来说明其内部功能和算法,由实际的功能描述语句组成。
2、模块程序及相应说明
(1)分频器模块
--FPQ.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYFPQIS
PORT(CLK:
INSTD_LOGIC;--CLK=100HZ
CLK1HZ:
OUTSTD_LOGIC);--CLK1HZ=1HZ
ENDENTITYFPQ;
ARCHITECTUREARTOFFPQIS
SIGNALCNT50:
INTEGERRANGE0TO49;
SIGNALCLK1:
STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IFCNT50=49THEN
CNT50<=0;
CLK1<=NOTCLK1;--进行100分频
ELSE
CNT50<=CNT50+1;
ENDIF;
ENDIF;
CLK1HZ<=CLK1;
ENDPROCESS;
ENDART;
由于现实我们只有某些频率的信号,而可能没有我们需要的频率的信号,因此我们需要用到分频器来用已有频率的时钟信号来产生我们需要的频率的时钟信号。
本实验是将100HZ的信号分频后产生1HZ的基准时钟信号。
(2)等待判别模块
--等待判别模块DDPB.VHD
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDDPBIS
PORT(START,WCLK,CLK1HZ:
INSTD_LOGIC;
DDBZ:
OUTSTD_LOGIC);
ENDDDPB;
ARCHITECTUREARTOFDDPBIS
SIGNALT1min:
STD_LOGIC;
SIGNALWCLK1:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
PROCESS(START,CLK1HZ)--产生1分钟的周期性信号
VARIABLECNT60:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFSTART='1'THEN
CNT60:
="00000000";
T1min<='0';
ELSIFCLK1HZ'EVENTANDCLK1HZ='1'THEN
IFCNT60="00111100"THEN--CNT60=60
T1min<='1';
CNT60:
="00000000";
ELSE
CNT60:
=CNT60+'1';
T1min<='0';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(START,WCLK,T1min)--对WCLK进行一分钟内上升沿的计算
BEGIN
IFSTART='1'THEN
WCLK1<="00000000";
ELSIFWCLK'EVENTANDWCLK='1'THEN
IFT1min='1'THEN
WCLK1<="00000000";
ELSE
WCLK1<=WCLK1+'1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(WCLK1,T1min)--当速度等于零时等待
BEGIN
IFT1min'EVENTANDT1min='1'THEN
IFWCLK1<="00000010”
DDBZ<='1';
ELSE
DDBZ<='0';
ENDIF;
ENDIF;
ENDPROCESS;
ENDART;
汽车启动开始计价后,等待时间和行驶时间的价格不一样,因此要产生等待时间的标志,本设计根据WCLK脉冲和时间信号CLK1HZ,来判断汽车行驶的速度是否小于等于6KM,如果是,则产生等待标志。
(3)等待时间计算模块
--等待计时模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYDDJSIS
PORT(START,CLK1HZ,DDBZ:
INSTD_LOGIC;
DDSJ:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
SJBZ:
OUTSTD_LOGIC);
ENDDDJS;
ARCHITECTUREARTOFDDJSIS
SIGNALT1min:
STD_LOGIC;
SIGNALFS,FG:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(START,CLK1HZ)--产生1分钟的周期性信号
VARIABLECNT60:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFSTART='1'THEN
CNT60:
="00000000";
T1min<='0';
ELSIFCLK1HZ'EVENTANDCLK1HZ='1'THEN
IFCNT60="00111100"THEN
T1min<='1';
CNT60:
="00000000";
ELSE
CNT60:
=CNT60+'1';
T1min<='0';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(START,DDBZ,T1min)
BEGIN
IFSTART='1'THEN
FS<="0000";FG<="0000";
ELSIFT1min'EVENTANDT1min='1'THEN--一分为单位计算等待时间
IFDDBZ='1'THEN--有等待标志信号产生时开始等待时间的计算
IFFG=9THENFG<="0000";
IFFS=5THENFS<="0000";--当时间为59分钟时清零
ELSE
FS<=FS+'1';
ENDIF;
ELSE
FG<=FG+'1';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
DDSJ(7DOWNTO4)<=FS;
DDSJ(3DOWNTO0)<=FG;
ENDART;
根据产生的等待标志进行计时计算,当等待标志DDBZ=‘1’时,利用产生的分脉冲进行以分为单位的等待时间计算。
(4)里程计算模块
--里程计算模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYLCJSIS
PORT(START,WCLK,DDBZ:
INSTD_LOGIC;
LCZ:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
LCBZ:
OUTSTD_LOGIC);
ENDLCJS;
ARCHITECTUREARTOFLCJSIS
SIGNALQMZ:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALFS,FG:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(START,WCLK)
VARIABLEMZ:
STD_LOGIC_VECTOR(11DOWNTO0);
BEGIN
MZ:
=“000000000000”;
QMZ:
=“00000000”;
IFWCLK’EVENTANDWCLK=’1’THEN
MZ:
=MZ+’1’;
IFMZ:
=“001111101000”
QMZ<=QMZ+'1';
MZ:
=“000000000000”;
IFQMZ>=3THEN
LCBZ<='1';--当行驶里程大于3Km时产生标志信号
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
LCZ<=QMZ;
ENDART;
当DDBZ=‘0’时,汽车处于行驶过程中,根据WCLK脉冲(汽车行驶1M产生一个脉冲)计算行驶里程。
由于行驶里程分辨率为1公里,因此需要先以米为单位计算到1KM时行驶里程再加1。
(5)计费值模块
--计费模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYJFZIS
PORT(START:
INSTD_LOGIC;
LCZ:
INSTD_LOGIC_VECTOR(7DOWNTO0);
DDSJ:
INSTD_LOGIC_VECTOR(7DOWNTO0);
JJZ:
OUTINTEGERRANGE0TO9999);
ENDENTITYJFZ;
ARCHITECTUREARTOFJFZIS
SIGNALJFZ1:
INTEGERRANGE0TO9999;
SIGNALLCZ1,DDSJ1,DDSJ2,DDSJ3:
INTEGERRANGE0TO199;
BEGIN
LCZ1<=CONV_INTEGER(LCZ);--里程值
DDSJ2<=CONV_INTEGER(DDSJ(7DOWNTO4));DDSJ3<=CONV_INTEGER(DDSJ(3DOWNTO0));
DDSJ1<=DDSJ2*10+DDSJ3;--等待时间计算
PROCESS(START,LCZ,DDSJ)
BEGIN
IFSTART='1'THEN--车启动显示起步价
JFZ1<=30;
ELSIFLCZ1<=3THEN--车行驶中的费用计算
JFZ1<=30;
ELSIFLCZ1<=3THEN
JFZ1<=30+DDSJ1*0.5;
ELSIFLCZ1>3THEN
JFZ1<=30+(LCZ1-3)*10+DDSJ1*0.5;
ENDIF;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
JJZ<=JFZ1;
ENDART;
由行驶里程和等待时间,再根据计费标准进行计价值JJZ的计算。
(6)译码显示模块
--译码模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYYIMA1IS
PORT(LCZ:
INSTD_LOGIC_VECTOR(7DOWNTO0);
JJZ:
ININTEGERRANGE0TO9999;
DDSJ:
INSTD_LOGIC_VECTOR(7DOWNTO0);
LCZSX,LCZGX,DDSJSX,DDSJGX,JJZBX,JJZSX,JJZGX:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
ENDYIMA1;
ARCHITECTUREARTOFYIMA1IS
SIGNALLCZ1:
INTEGERRANGE0TO99;
SIGNALLCZS,LCZG,JJZB,JJZS,JJZG:
INTEGERRANGE0TO9;
BEGIN
DDSJSX<=DDSJ(7DOWNTO4);DDSJGX<=DDSJ(3DOWNTO0);--等待时间译码显示
LCZ1<=CONV_INTEGER(LCZ);
END;
将等待时间DDSJ、里程值LCZ和计价值JJZ的百位十位个位转换成BCD码,通过译码器在七段数码管中显示出来。
4编译及仿真
(1)仿真软件QuartusII的简单介绍和说明
随着技术的发展,用户对开发工具的要求越来越高,Altera公司适时推出了新的开发工具QuartusII软件。
QuartusII集成环境包括以下内容:
系统级设计、嵌入式软件开发、可编程逻辑器件(PLD)设计、综合,布局和布线、验证和仿真。
QuartusII集成环境除支持MAX系列、FLEX系列、ACEX1K系列器件外,还支持Altera公司的APEX20K系列、Stratix系列、Cyclone系列和MAXII系列等新型CPLD/FPGA器件。
QuartusII设计软件根据设计者的需要提供了一个完整的多平台开发环境,它包含整个FPGA和CPLD设计阶段的解决方案。
QuartusII软件的开发流程如下图所示。
图3QuartusII软件的开发流程
(2)仿真波形图
图4 等待判别模块波形图
图5 里程值计算模块波形
图6 等待时间计算模块波形图
图7 计价值模块波形图
图8 译码模块波形图
图9 顶层文件波形图
5硬件调试与结果分析
通过对设计电路的分析,该实验可选择NO.0号电路进行硬件验证,键3对应于START输入信号,WCLK对应于CLK2,CLK1对应于CLK0,八个数码管作为等待时间、里程值和计价值的显示用。
选定电路图之后,再选择ACEX1K/EP1K30TC144-3器件,输出信号进行引脚锁定。
下载完成后便可进行硬件验证和调试。
由于本次课程设计我用的是QuartusⅡ软件,下载出现问题,不能下载。
就遗憾的没有进行硬件验证。
下面是仿真时序图:
图10仿真时序图
译码过程由于有时间延迟和中间信号替换,导致仿真时序图出现一些混乱值,但持续时间很短,不影响译码显示。
6参考文献
(1)黄智伟.FPGA系统设计与实践电子工业出版社2005.1
(2)焦素敏.EDA课程设计指导书河南工业大学2008.2
(3)焦素敏.EDA技术基础清华大学出版社2009.8
(4)谭会生.EDA技术综合应用实例与分析西安电子科技大学出版社2004.11
(5)朱正伟.EDA技术及应用清华大学出版社2006.1
(6)阎石.数字电子技术基础高等教育出版社2006.5
心得体会