EDA课程设计说明书文档格式.docx
《EDA课程设计说明书文档格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计说明书文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
周5:
课程设计答辩并提交设计说明书。
五、主要参考资料
[1].VokneiA.Pedroni.《VHDL数字电路设计教程》.电子工业出版社,2008.5
[2].潘松,黄继业.《EDA技术实用教程》(第二版).科学出版社,2005.2
[3].焦素敏.《EDA应用技术》.清华大学出版社,2002.4
指导教师(签名):
教研室主任(签名):
课程设计成绩评定表
出勤
情况
出勤天数
缺勤天数
成
绩
评
定
出勤情况及设计过程表现(20分)
课设答辩(20分)
设计成果(60分)
总成绩(100分)
提问
(答辩)
问题
综
合
指导教师签名:
年月日
目录
1引言1
2出租车计价器设计2
2.1出租车计价器的设计原理2
2.2各模块功能模块设计3
2.2.1分频模块3
2.2.2计量模块3
2.2.3控制模块3
2.2.4计费模块4
2.2.5译码显示模块4
2.2.6顶层模块4
2.3硬件仿真5
3总结6
参考文献7
附录8
1引言
本设计是一个简易的出租车计费系统,实现计价功能,计费标准为按行程里程收费,起步价为6.00元,当里程小于3公里时,按照起价计费,车行超过3公里后在按1.2元/公里收费,等待累积时间超过2min,按照每分钟1.5元计费。
并用LED数码管实时显示车费和汽车行驶里程,用两位数字显示汽车行驶里程,显示方式为“XX”,单位为km。
此计费器要设有一个由司机控制的整体复位控制。
本设计采用VHDL硬件描述语言作为设计手段,采用自顶向下的设计思路,得到一种出租车计价系统的软件结构,通过QuartusⅡ软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求。
本次课程设计可以熟练掌握了课本上的一些理论知识,课程设计也是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。
加深我们对VHDL数字电路设计教程的理解。
2出租车计价器设计
本设计是一种采用FPGA芯片进行出租车计费器,主要分为分频模块、计量模块、计费模块、控制模块等模块,利用FPGA的可编程性,简洁又多变的设计方法,缩短了研发周期。
主要采用了FPGA芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品的升级。
2.1出租车计价器的设计原理
根据设计要求,系统的输入信号clk,计价开始信号Start,等待信号Stop,里程脉冲信号fin。
系统得输出信号有:
总费用数cha0~cha3,行驶距离km0~km1,等待时间min0~min1等。
系统有两个脉冲输入信号clk_120、fin,其中clk_120将根据设计要求分频成12Hz、15Hz和1Hz分别作为公里计费和超时计费的脉冲。
两个控制输入开关start、stop;
控制过程为:
start作为计费开始开关,当start为高电平时,系统开始根据输入的情况计费。
当有乘客上车并开始行驶时,fin脉冲到来,进行行驶计费,此时的stop需要置为0;
如需停车等待,就把stop变为高电平,并去除fin输入脉冲,进行等待计费;
当乘客下车且不等待时,将stop和fin同时置为0,来读取最终的行驶路程数、等待时间与最后的总费用,直接将start置为0,系统停止工作;
价格开始归为起步价6.00元。
整个设计由分频模块、计量模块、计费模块、控制模块等四个部分组成。
其中计量模块是整个系统实现里程计数和时间计数的重要部分;
控制模块是实现不同计费方式的选择部分,根据所设计的使能端选择是根据里程计费还是根据等待时间计费;
同时设计通过分频模块产生不同频率的脉冲信号来实现系统的计费。
计量模块采用1Hz的驱动信号,计费模块采用12Hz、15Hz的驱动信号;
计量模块每计数一次,计费模块就实现12次或者15次计数,即为实现计时的1.5元/min、计程时的1.2元/km的收费。
组成框图如图2-1所示:
图2-1系统结构框图
2.2各模块功能模块设计
2.2.1分频模块
由于试验箱上没有12Hz和15Hz的整数倍时钟信号,因此我们采用频率较大的750khz进行分频,以近似得到12Hz、15Hz和1Hz的时钟频率。
本设计中通过以上三种不同频率的脉冲信号实现在计程车在行驶、等待两种情况下的不同计费。
分频模块元件如图2-2所示:
图2-2分频模块元件图
2.2.2计量模块
计量模块主要完成计时和计程功能。
计时部分:
计算乘客的等待累积时间,当等待时间大于2min时,本模块中en1使能信号变为1;
当clk1每来一个上升沿,计时器就自增1,计时器的量程为59min,满量程后自动归零。
计程部分:
计算乘客所行驶的公里数,当行驶里程大于3km时,本模块中en0使能信号变为1;
当clk1每来一个上升沿,计程器就自增1,计程器的量程为99km,满量程后自动归零。
Start置1程序始终处于计费状态,当fin脉冲到来时k0和k1进入计程状态,且k0每次满9就向k1进位,超过3km时en0就变为高电平;
同理,当stop由0置为1时开始由计程进入等待状态,fin脉冲归为0里程计数停止,等待时间开始计时,m0每次满9就向m1进位,超过2min时en1就变为高电平。
2.2.3控制模块
本模块主要是通过计量模块产生的两个不同的输入使能信号en0、en1,对两个分频模块输出的12Hz、15Hz的脉冲进行选择输出的过程;
本模块实现了双脉冲的二选一;
最终目的为了计费模块中对行驶过程中不同的时段进行计价。
2.2.4计费模块
当计费信号Start一直处于高电平即计费状态时,本模块根据控制模块选择出的信号从而对不同单价的时段进行计费。
即行程在3km内,而且等待累积时间小于2min则为起步价6元;
3km以外每公里按1.2元计费,等待时间超过2min,则按每分钟1.5元计费。
c0、c1、c2、c3分别表示费用的显示。
由图可知当处于计费状态时,随着clk2的高电平的到来,计费起步价为6元。
c0满9向c1进位,c1满9向c2产生进位,依次逐级进位从而完成计费功能。
2.2.5译码显示模块
译码显示模块完成计价、计时和计程数据显示。
计费数据送入译码显示模块进行译码,最后送至以百元、十元、元、角为单位对应的数码管上显示。
计时数据送入译码显示模块进行译码,最后送至以分为单位对应的数码管上显示。
计程数据送入译码显示模块进行译码,最后送至以km为单位的数码管上显示。
由于本次课程设计所用实验箱上自带数码管译码显示电路,因此不需再写译码程序,选定模式直接管脚锁定在对用的数码管上即可实现。
2.2.6顶层模块
本模块用图形输入法实现出租车的计费器系统设计,将各个模块组合在一起。
程序最终功能实现仿真波形如图2-11所示
图2-11程序最终仿真波形图
由图中可以看出,当fin脉冲信号到来时,实现了行驶计费,当行驶里程超过三公里,则再按每公里1.2元计费;
当stop为高电平,即进入等待计时收费;
当等待时间超过2min时,每过一分钟加1.5元,即为实现每等一分钟收费1.5元。
当stop为电平时所有数值清零,只显示初始值6元,但本次仿真中等待时间为9分钟,行驶里程为20km,应收取费用值为36.9元。
结果验证:
出租车的起步价是6元,收费为6+(20-3)*1.2+(9-2)*1.5=36.9元。
仿真结果于计算结果相同,所以仿真结果正确。
2.3硬件仿真
在QuartusII软件中仿真成功,现在下载到试验箱上以验证其功能。
实验中采用万用模式模式五,程序中各个端口锁定到试验箱上对应的管脚下载验证。
最后得数码管显示计时、计程和计费数据如图2-13所示:
图2-13硬件仿真结果
由上可知等待时间为4分钟,行驶公里数为4公里。
根据设计要求计算所得费用为:
6元+(4km-3km)*1.2元/km+(4min-2min)*1.5元/min=6+1.2+3=10.2元,与试验箱上所得结果相同,仿真下载成功。
3总结
通过为期1周的课程设计,出租车计价器系统的设计已基本完成,能按预期的效果模拟汽车启动、等待、停止、复位等功能,并显示车费数目等待时间及行驶路程。
出租车计费系统的设计中体现了VHDL覆盖面广,描述能力强,是一个多层次的硬件描述语言及CPLD器件速度快,使用方便,便于修改等特点,本设计在实用方面具有一定的价值。
通过不断的编写与尝试,遇到问题,讨论问题,解决问题,使我对《VHDL数字电路设计教程》这门学科有了更系统的认识。
在这次课程设计中我熟练地掌握了VHDL语言中的并行语句与顺序语句的应用、区别与联系;
从根本上了解了信号与变量之间的区别;
熟练掌握并应用了有限状态机与元件例化的方法;
锻炼了我的独立思考能力,培养了我敢于创新的思想:
让我学会了团结同学、互帮互助、在讨论中提炼真知。
在本次设计中还存在很多不足,可以改进的地方目前有以下几点:
一、该设计虽然实现了基本的计费和计程,但是很多问题并没有解决,如本设计只实了一种车速的计费。
若要实现出租车的不同档位下的计程计费,还需要进一步讨论。
二、该设计智能化水平较低,启动、等待、复位等信号需要人为输入,若在实际中出现操作偏差,会导致计费不准确。
通过此次课程设计,我们更进一步的深入了解了VHDL设计语言,并在使用过程中对它有了更深的体会。
对编程过程中可能遇到的问题有了一定的了解和解决方法,在理论学习和编程练习以及硬件测试方面都获得了较大的收获,对于今后进行程序设计有很大的帮助。
最后在此再次向带领我们这次课程设计的老师说声:
谢谢!
参考文献
[3]孟庆海,张洲.VHDL基础及经典实例开发.西安:
西安交通大学出版社,2008.4
[4]刘江海.《EDA技术课程设计》.华中科技大学出版社,2009.5
[5]蒋小燕,余伟钧,张立臣.《EDA技术及VHDL》.2008.12.
[6]焦素敏.《EDA应用技术》.清华大学出版社,2002.4
附录
--分频模块源程序:
libraryieee;
useieee.std_logic.1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityfenpinis
port(clk_240:
instd_logic;
--系统时钟
clk_12:
bufferstd_logic;
--12分频
clk_15:
--15分频
clk_1:
bufferstd_logic);
--1分频
endfenpin;
architecturefenpinoffenpinis
signalq_12:
integerrange0to9;
--定义中间信号量
signalq_15:
integerrange0to7;
signalq_1:
integerrange0to119;
begin
process(clk_240)
begin
if(clk_240'
eventandclk_240='
1'
)then
ifq_12=9thenq_12<
=0;
clk_12<
=notclk_12;
elseq_12<
=q_12+1;
endif;
--得12hz频率信号
ifq_15=7thenq_15<
clk_15<
=notclk_15;
elseq_15<
=q_15+1;
--得15hz频率信号
ifq_1=119thenq_1<
clk_1<
elseq_1<
=q_1+1;
endif;
--得1hz频率信号
endprocess;
--计量模块源程序:
entityjiliangis
port(start:
instd_logic;
--计费开始信号
fin:
--里程脉冲信号
stop:
--行驶中,中途等待信号
clk_1:
--驱动脉冲
en1,en0:
--计费单价使能信号
k1,k0:
bufferstd_logic_vector(3downto0);
--行驶公里计数
m1,m0:
bufferstd_logic_vector(3downto0));
--等待时间计数
endjiliang;
architecturert2ofjiliangis
signalw:
integerrange0to59;
--计时范围0~59
begin
process(clk_1)
ifclk_1'
eventandclk_1='
then
ifstart='
0'
w<
en1<
='
;
en0<
m1<
="
0000"
m0<
k1<
k0<
elsifstop='
then--计时开始信号
ifw=59thenw<
elsew<
=w+1;
ifm0="
1001"
thenm0<
ifm1="
0101"
thenm1<
elsem1<
=m1+1;
elsem0<
=m0+1;
ifstop='
thenen0<
ifm1&
m0>
"
thenen1<
--若等待时间大于2min则en1置1
elseen1<
elsiffin='
then--里程计数开始
ifk0="
thenk0<
ifk1="
thenk1<
--计程范围0~99
elsek1<
=k1+1;
elsek0<
=k0+1;
thenen1<
ifk1&
k0>
--若行驶里程大于3km则en0置1
elseen0<
andfin='
then
en0<
endprocess;
endrt2;
--控制模块源程序:
entitykongzhiis
port(en0,en1:
--使能选择信号
--12分频输入信号
--15分频输入信号
clk_out:
outstd_logic);
--输出信号
endkongzhi;
architecturert3ofkongzhiis
process(en0,en1)
ifen0='
then--实现二选一功能
clk_out<
=clk_15;
elsifen1='
then
=clk_12;
elseclk_out<
=null;
endrt3;
--计费模块源程序
entityjifeiis
port(clk2:
--计费驱动信号
start:
--计费开始信号
c0,c1,c2,c3:
endjifei;
architecturert4ofjifeiis
process(clk2,start)
ifstart='
thenc3<
c2<
c1<
0110"
c0<
--起步价6元
elsifclk2'
eventandclk2='
ifc0="
thenc0<
ifc1="
thenc1<
ifc2="
thenc2<
ifc3="
--计价范围0~999.9元
elsec3<
=c3+1;
elsec2<
=c2+1;
elsec1<
=c1+1;
elsec0<
=c0+1;
endrt4;
entitychuzuchejifeiqiis
port(clk_750k:
start:
instd_logic);
endchuzuchejifeiqi;
architecturechuzuchejifeiqiofchuzuchejifeiqiis
componentfinpinis
bufferstd_logic;
bufferstd_logic);
endcomponent;
componentjiliangis
clk_out:
componentkongzhiis
componentjifeiis
port(clk_1:
U1:
fenpinportmap(clk_240,clk_12,clk_15,clk_1);
U2:
jiliangportmap(start,fin,stop,clk_out,en0,en1,k1,k2,m0,m1);
U3:
kongzhiportmap(en0,en1,clk_12,clk_15,clk_out);
U4:
jifeiportmap(clk_out,start,c0,c1,c2,c3);