VHDL语言与EDA课程设计Word文档下载推荐.doc
《VHDL语言与EDA课程设计Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《VHDL语言与EDA课程设计Word文档下载推荐.doc(16页珍藏版)》请在冰豆网上搜索。
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩
教研室审核意见:
教研室主任签字:
教学系审核意见:
主任签字:
年月日
摘要
随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普遍的交通工具。
出租车计价器是出租车营运收费的专用智能化仪表,是出租车市场规范化、标准化以及减少司机与乘客之间发生纠纷的重要设备。
一种功能完备、简单易用、计量准确的出租车计价器是加强出租车行业管理、提高服务质量的必备品。
根据预定的设计要求和设计思路,我们使用VHDL硬件描述语言设计了一个实际的基于AlteraFPGA芯片的出租车自动计价器系统,介绍了该系统的电路结构和程序设计。
通过在QuartusII6.0软件中编译和下载测试,得到了仿真波形和关键的设计结果。
经过在实验箱上进行硬件测试,证明该出租车计价系统具有实用出租车计价器的基本功能,如能进一步完善,将可以实用化和市场化。
关键词:
出租车自动计价器;
VHDL;
FPGA;
QuartusII6.0
目录
设计要求 1
1、方案论证与对比 1
1.1方案一 1
1.2方案二 2
1.3两种方案的对比 2
2、实验步骤和设计过程 2
2.1计程模块 2
2.2等待计时模块 2
2.3计费模块 3
3、调试与操作说明 3
3.1QuartusII中的VHDL程序 3
3.2程序的编译与及仿真波形 6
3.3程序的下载与功能的测试 7
4、课程设计心得体会 9
5、元器件及仪器设备明细 10
6、参考文献 11
7、致谢 12
出租车自动计价器设计
设计要求
设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,最大值为99.99元,行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)。
设计的主要技术指标如下:
1) 计价范围:
0~99.99元计价分辨率:
0.01元
2) 计程范围:
0~99公里计程分辨率:
1公里
3) 计时范围:
0~59分计时分辨率:
1分
1、方案论证与对比
根据本课程设计要求,需要对出租车当行驶公里数和等待时间两种情况对应进行计数计费,同时要求显示出对应行驶公里数、等待时间和出租车费用,我们想到了以下两种方案。
1.1方案一
用分频器将外部时钟分为三路频率的信号,用来计时和计程,同时也供整个系统工作,通过设置使能信号,使系统自动对等待时间计时和对行驶公里数的计数,最后将所得结果分别在数码管上显示出来。
数码管显示
等待时间脉冲
公里脉冲
计费/复位
FPGA控制器
计程
计时
计费
图
图1方案一设计结构图
1.2方案二
各部分主要功能包括:
信号输入模块对车轮传感器传送的脉冲信号进行计数,并以高低脉冲模拟出租汽车启动、停止按钮,具有输入信号作用;
数据转换模块将计费模块输出的车费和路程转换成十进制数据;
译码/动态扫描模块将路程与费用的数值译码后用动态扫描的方式驱动数码管[5];
数码管显示模块将公里数和计费金额显示出来。
信号输入模块
片选信号
产生模块
数据转换模块
数码管
控制模块
动态扫描/译码/数码管显示模块
图2方案二设计结构图
1.3两种方案的对比
经分析,两种方案都要通过模块组合来实现出租车计价器的功能。
方案一模块数量比方案二多一些,但思路简单,各模块程序也相对简单,因此较容易实现,适合我们初学EDA的编程设计。
方案二模块较少,但单个模块功能要求较高,程序复杂。
所以,我们选择方案一。
2、实验步骤和设计过程
2.1计程模块
计程模块:
根据提供的里程脉冲信号fin,计算乘客上车后出租车所行驶的里程数。
fin每来一个上升沿,计程模块实现一次计数,里程数就加1。
当行驶里程大于3Km时,本模块中en0信号变为1;
进行行驶公里都计费。
2.2等待计时模块
等待计时模块:
根据分频得到的时钟信号f_1,计算乘客的等待累计时间。
计时器的量程为59min,满量程归零。
等待时间大于3min时,本模块中en1信号变为1;
f_1每来一个上升沿,计量模块实现一次计数,等待时间加1。
2.3计费模块
计费模块:
实现计价、计时和计程的数据计费。
计量模块实现对于出租车在行驶和等待过程中的里程数和计时功能:
计费时钟每来一个上升沿,计量模块实现一次计数,里程数或者等待时间加1。
进行的是行驶公里数大于3公里以每公里1.6元计费的操作;
当等待时间大于2min时,本模块中en1信号变为1,进行的是等待时间大于2分钟以每分钟1.6元计费的操作;
最后用cha3,cha2,cha1,cha0来组成的4位数显示总费用,最大显示为999.9元。
3、调试与操作说明
3.1QuartusII中的VHDL程序
根据设计要求我们写出了VHDL程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitytaxiis
--定义实体[3]
port(clk_256
:
instd_logic;
--频率为256Hz的时钟
start:
--计价使能信号
stop:
--等待信号
fin:
--公里脉冲信号
cha3,cha2,cha1,cha0:
outstd_logic_vector(3downto0);
--费用数据
km1,km0:
--公里数据
min1,min0:
outstd_logic_vector(3downto0));
--等待时间
endtaxi;
architecturebehavoftaxiis
signalf_16,f16,f_1:
std_logic;
signalq_16:
integerrange0to15;
--分频器
signalq16:
--分频器
signalq_1:
integerrange0to255;
--分频器
signalw:
integerrange0to59;
--秒计数器
signalc3,c2,c1,c0:
std_logic_vector(3downto0);
--制费用计数器
signalk1,k0:
--公里计数器
signalm1:
std_logic_vector(2downto0);
--分的十位计数器
signalm0:
--分的个位计数器
signalen1,en0,f:
--使能信号
begin
fenpin:
process(clk_256,start)--分频器模块
ifclk_256'
eventandclk_256='
1'
then
ifstart='
0'
thenq_16<
=0;
q16<
f_16<
='
;
f16<
f_1<
f<
else
ifq_16=15thenq_16<
--此if语句得到频率为16Hz的信号
elseq_16<
=q_16+1;
endif;
ifq16=15thenq16<
--此if语句得到另一个频率为16Hz的信号
elseq16<
=q16+1;
ifq_1=255thenq_1<
--此if语句得到频率为1Hz的信号
elseq_1<
=q_1+1;
ifen1='
thenf<
=f_16;
--此if语句得到计费脉冲f
elsifen0='
=f16;
elsef<
endprocess;
process(f_1)