EDA实训报告基于FPGA的数字系统设计出租车自动计费系统设计Word下载.docx
《EDA实训报告基于FPGA的数字系统设计出租车自动计费系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《EDA实训报告基于FPGA的数字系统设计出租车自动计费系统设计Word下载.docx(19页珍藏版)》请在冰豆网上搜索。
工作中有创新意识,对前人工作有一些改进或有一定应用价值。
15
答辩
能正确回答指导教师所提出的问题。
综合成绩等级
年月日
目录
1项目名称、内容与要求………………………………………xx页
1.1设计内容…………………………………………………xx页
1.2具体要求…………………………………………………xx页
2系统整体架构(ArchitectureDescription)………………xx页
2.1设计思路…………………………………………………xx页
2.2系统原理与设计说明等内容……………………………xx页
2.3创新点与原创性内容……………………………………xx页
3系统设计(含HDL或原理图输入设计)………………………xx页
注:
此部分包含主要逻辑单元、模块、源代码等内容
3.1VHDL代码………………………………………………xx页
3.2系统整体电路图(或RTL级电路图)…………………xx页
4系统仿真(SimulationWaveform)…………………………xx页
5FPGA实现(FPGAImplementation)………………………xx页
此处应包含硬件验证、操作过程、结果等说明
6总结(Closing)……………………………………………xx页
参考书目(Reference):
…………………………………………xx页
附录(Appendix):
………………………………………………xx页
1.项目名称、内容与要求
1.1设计内容
本实验是采用单片CPLD芯片进行出租车计费器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用CPLD的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器体积更小功能更强大。
本设计实现了出租车计费器所需的一些基本功能,计费包括起步价、行车里程计费、等待时间计费,同时考虑到出租车行业的一些特殊性,更注重了把一些新的思路加入到设计中。
主要包括采用了CPLD芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品升级。
关键词:
VHDL;
计费器;
QuartusⅡ;
CPLD
1.2具体要求
②运用QuartusⅡ软件中的仿真功能对所设计的出租车自动计费器的各个模块及顶层电路的功能进行仿真分析。
③将所设计的整个系统写入CPLD器件中,加上需要的外围电路在实验箱上实现整个系统的硬件搭建。
2.系统整体架构
2.1设计思路
本次设计首先在QuartusⅡ环境中对出租车自动计费器的各个部分利用VHDL这一硬件描述语言予以设计,生成模块。
而整个设计的核心部分就在分频/计量模块,该模块完成的功能主要包括计费脉冲的产生,等待计时、计价、计程功能。
随后运用QuartusⅡ中的仿真功能对其予以仿真,从仿真的结果中分析程序的正确性。
待所有模块的功能正确之后,运用原理图搭建顶层电路并进行整体仿真直至达到最初的设计要求,最后再在实验箱上检验设计的正确与否。
2.2系统原理与设计说明等内容
根据层次化设计理论,该设计问题自顶向下可分为分频模块、控制模块、计量模块、译码动态扫描显示模块,其系统框图如图
(1)所示。
图
(1)出租车自动计费器系统框图
2.3创新点与原创性内容
EDA器件取代传统的电子设计方法,利用CPLD的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使出租车计费器体积更小功能更强大。
VHDL语言设计的出现从根本上改变了以往数字电路的设计模式,使电路由硬件设计转变为软件设计,使电子设计的核心转化为VHDL语言的编程设计,这样提高了设计的灵活性,降低了电路的复杂程度,修改起来也很方便。
并且整个设计很大一部分由电脑辅助来完成,大大缩短了设计周期,减少了设计费用,降低了设计风险。
在VHDL设计流程中,设计的验证是一个重要但费时的环节。
由于验证方法手段不断改进和提高,对于一个系统的设计,提倡用软件、硬件协同验证方法,加速仿真过程。
有经验的设计师认为,一个设计项目的成功与否,关键是仿真,其中涉及工作的90%时间花在仿真验证上。
仿真有功能仿真与时序仿真之分。
在逻辑综合和布线之前对VHDL模型的逻辑功能进行仿真,可以有效提高效率。
3系统设计(含HDL或原理图输入设计)
3.1VHDL代码
分频模块对频率为240HZ的输入脉冲进行分频,得到16HZ、10HZ、和1HZ的三种频率。
该模块产生频率信号用于计费,每1HZ脉冲为0.1元计费控制,10HZ信号为1元的计费控制,16HZ信号为1.6元计费控制。
计量控制模块是出租车计费的主体部分,该模块主要完成等待计时功能、计价功能、计程功能,同时产生3分钟的等待计时始能控制信号en1、行程3公里外的是能控制信号en0。
其中计价功能主要完成的任务是:
行程3公里内,且等待累计时间在3分钟内,起步费为8元;
3公里以外以每公里1.6元计费。
等待时间3分钟以外以每分钟1元计费。
计时功能主要完成的任务是:
计算乘客的等待累计时间,计时的量程为59分,满量程自动归零。
计程功能主要完成的任务是:
计算乘客所行驶的公里数,计程器的量程为99公里,满量程自动归零[4]。
根据前面的描述,该电路的核心部分就是分频/计量控制电路,通过VHDL语言的顺序语句IF-THEN-ELSE根据一个或一组条件来选择某一特定的执行通道,生成计费数据、计时数据和里程数据。
其VHDL源程序如下。
LIBRARYIEEE;
USEIEEE.std_logic_1164.all;
USEIEEE.std_logic_unsigned.all;
USEIEEE.std_logic_arith.all;
ENTITYtaxiis
port(clk_240:
instd_logic;
--频率为240Hz的时钟
start:
--计价使能信号
stop:
--等待信号
fin:
--公里脉冲信号
cha3,cha2,cha1,cha0:
outstd_logic_vector(3downto0);
--费用数据
km1,km0:
--公里数据
min1,min0:
outstd_logic_vector(3downto0));
--等待时间
endtaxi;
architecturebehavoftaxiis
signalf_10,f_16,f_1:
std_logic;
--频率为10Hz,16Hz,1Hz的信号
signalq_10:
integerrange0to23;
--24分频器
signalq_16:
integerrange0to14;
--15分频器
signalq_1:
integerrange0to239;
--240分频器
signalw:
integerrange0to59;
--秒计数器
signalc3,c2,c1,c0:
std_logic_vector(3downto0);
--十制制费用计数器
signalk1,k0:
--公里计数器
signalm1:
std_logic_vector(2downto0);
--分的十位计数器
signalm0:
--分的个位计数器
signalen1,en0,f:
--使能信号
begin
feipin:
process(clk_240,start)
ifclk_240'
eventandclk_240='
1'
then
ifstart='
0'
thenq_10<
=0;
q_16<
f_10<
='
;
f_16<
f_1<
f<
else
ifq_10=23thenq_10<
--此IF语句得到频率为10Hz的信号
elseq_10<
=q_10+1;
endif;
ifq_16=14thenq_16<
--此IF语句得到频率为16Hz的信号
elseq_16<
=q_16+1;
ifq_1=239thenq_1<
--此IF语句得到频率为1Hz的信号
elseq_1<
=q_1+1;
ifen1='
thenf<
=f_10;
--此IF语句得到计费脉冲f
elsifen0='
=f_16;
elsef<
endprocess;
main:
process(f_1)
w<
en1<
en0<
m1<
="
000"
m0<
0000"
k1<
k0<
elsiff_1'
eventandf_1='
then
ifstop='
ifw=59thenw<
--此IF语句完成等待计时
ifm0="
1001"
thenm0<
--此IF语句完成分计数
ifm1="
101"
thenm1<
elsem1<
=m1+1;
elsem0<
=m0+1;
ifm1&
m0>
"
0000010"
--此IF语句得到en1使能信号
elseen1<
elsew<
=w+1;
elsiffin='
ifk0="
thenk0<
--此IF语句完成公里脉冲计数
ifk1="
thenk1<
elsek1<
=k1+1;
elsek0<
=k0+1;
ifk1&
k0>
00000010"
thenen0<
--此IF语句得到en0使能信号
elseen0<
cha3<
=c3;
cha2<
=c2;
cha1<
=c1;
cha0<
=c0;
--费用数据输出
km1<
=k1;
km0<
=k0;
min1<
&
m1;
min0<
=m0;
--公里数据、分钟数据输出
endprocessmain;
jifei:
process(f,start)
thenc3<
c2<
c1<
1000"
c0<
elsiff'
eventandf='
ifc0="
thenc0<
--此IF语句完成对费用的计数
ifc1="
thenc1<
ifc2="
thenc2<
ifc3="
elsec3<
=c3+1;
elsec2<
=c2+1;
elsec1<
=c1+1;
elsec0<
=c0+1;
endprocessjifei;
endbehav;
①模8计数器se的VHDL源程序。
ENTITYseIS
port(clk:
a:
outstd_logic_vector(2downto0));
ENDse;
ARCHITECTURErt1ofseIS
process(clk)
variableb:
begin
if(clk'
eventandclk='
)then
if(b="
111"
)then
b:
else
=b+1;
a<
=b;
endprocess;
endrt1;
②8选1选择器mux8_1的VHDL源程序。
ENTITYmux8_1IS
port(c:
instd_logic_vector(2downto0);
dp:
outstd_logic;
a1,a2,a3,a4,b1,b2,t1,t2:
instd_logic_vector(3downto0);
d:
endmux8_1;
architecturert1ofmux8_1is
process(c,a1,a2,a3,a4,b1,b2,t1,t2)
variablecomb:
comb:
=c;
casecombis
when"
=>
d<
=a1;
dp<
001"
=a2;
010"
=a3;
011"
=a4;
100"
=b1;
=b2;
110"
=t1;
=t2;
whenothers=>
null;
endcase;
③七段数码显示译码器di_LED的VHDL源程序。
ENTITYdi_LEDIS
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
enddi_LED;
architecturert1ofdi_LEDis
process(d)
casedis
q<
0111111"
--gfedcba
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
0101"
1101101"
0110"
1111101"
0111"
0100111"
1111111"
1101111"
3.2系统整体电路图(或RTL级电路图)
顶层电路的设计
根据图
(1)出租车自动计费器系统框图,出租车自动计费顶层电路分为4个模块,它们是出租车自动计费器系统的主体FPGA电路taxi模块,模8计数器se模块,8选1选择器mux8_1模块,七段数码显示译码器di_LED模块,生成动态扫描显示片选信号的3-8译码器模块decode3_8。
按已经确立的层次化设计思路,在图形编辑中调入前面的层次化设计方案中所设计的底层的元件符号taxi.sym、mux8_1.sym、se.sym、di_LED.Sym,并加入相应的输入输出引脚与辅助元件。
由于实验箱中有已经带有3-8译码器,所以在顶层电路的设计中就不再需要此模块。
然后完成出租车自动计费器的顶层原理图搭建,最终得到的顶层电路原理图如图3-6所示。
图(6)出租车自动计费器顶层电路原理图
计量控制模块
此模块包含3个进程模块。
fenpin进程对频率为240HZ的输入脉冲进行分频,得到的频率为16HZ、10HZ和1HZ的3种计费频率信号,供main进程和jifei进程进行计费、计时、计程之用;
main进程完成等待计时功能、计程功能,该模块将等待时间和行驶公里数变换成脉冲个数计算,同时产生3分钟的等待计时使能控制信号en1、行程3公里外的使能控制信号en0;
jifei进程将起步价8预先固定在电路中,通过对计费脉冲个数的统计,计算出整个费用数据。
生成的元件符号如图3-2所示。
图
(2)出租车自动计费器系统的主体FPGA电路taxi的元件符号
译码显示模块
该模块经过8选1选择器将计费数据(4位BCD码)、计时数据(2位BCD码)、计程数据(2位BCD码)动态显示输出。
其中计费数据jifei4~jifei1送入译码显示模块进行译码,然后送至以百元、十元、元、角为单位对应的数码管上显示,最大显示为999.9元;
计时数据送入译码显示模块进行译码,最后送至一分为单位对应的数码管上显示,最大显示为59s;
计程数据送入译码显示模块进行译码,最后送至以公里为单位的数码管上显示,最大显示为99公里。
该模块包含8选1选择器、模8计数器、七段显示译码器3个子模块。
输入信号clk为系统输入的240HZ基准时钟,输出a为3位二进制编码。
生成的元件符号如图(3)所示。
图(3)模8计数器se的元件符号
输入信号c[2..0]为系统选择输入,a1a2a3a4为计费器数据BCD码输入,b1b2为里程数BCD码输入,t1t2为计时时间的BCD码输出,d为4位BCD码输出,dp为小数点信号。
生成的元件符号如图(4)所示。
图(4)选择器mux8_1的元件符号
输入信号d[3..0]位BCD码输入,q[6..0]为七段译码输出(高电平有效)。
生成的元件符号如图(5)所示。
图(5)七段数码显示译码器di_LED的元件符号
4系统仿真(SimulationWaveform)
以下是对本次设计的各个模块以及顶层电路进行的功能仿真及分析。
顶层电路的仿真及分析
根据图(6)完成出租车自动计费器的顶层原理图输入。
电路连好线,对其编译和仿真。
正确编译后输出的仿真波形如图4-6所示。
图4-6出租车自动计费器顶层电路仿真输出波形
在图4-6中,STOP=0即全程无停止等待时间,因此计时显示输出为3F(00),该电路中出租车总行驶3F(0)7D(6)(即6公里),等待累计时间为3F(0)3F(0)(0分钟),总费用为06
(1)5B
(2)7F(8)(即12.8元),仿真结果真确。
并且整个设计很大一部分由电脑辅助来完成,大大