基于CPLD的出租车计费器 嵌入式课程设计 精品版.docx
- 文档编号:4779064
- 上传时间:2022-12-08
- 格式:DOCX
- 页数:23
- 大小:587.10KB
基于CPLD的出租车计费器 嵌入式课程设计 精品版.docx
《基于CPLD的出租车计费器 嵌入式课程设计 精品版.docx》由会员分享,可在线阅读,更多相关《基于CPLD的出租车计费器 嵌入式课程设计 精品版.docx(23页珍藏版)》请在冰豆网上搜索。
基于CPLD的出租车计费器嵌入式课程设计精品版
设计内容与设计要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。
有关知识可参见相关教材或参考书。
一.设计内容
(1)实现计费功能,计费标准为:
按行驶里程计费,起步价为6.00元,并在车行3Km后按2.00元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
(2)现场模拟功能:
能模拟汽车起动、停止、暂停以及加速等状态。
(3)按计动态扫描电路,将车费和路程显示出来,各有两位小数。
二、设计要求:
1、设计思路清晰,给出整体设计框图;
2、设计各单元电路,完成其功能仿真和编译并生成低层模块;
3、完成顶层设计并编译通过;
4、完成设计下载并调试电路;
5、写出设计报告;
主要设计条件
1.提供EDA实验室;
2.提供EL实验箱和CPLD芯片;
3.提供设计软件
说明书格式
1.课程设计封面;
2.任务书;
3.说明书目录;
4.设计总体思路,基本原理和框图(顶层电路图);
5.单元电路设计(各次级模块电路图);
6.设计仿真;
7.编程下载;
8.总结与体会;
9.附录;
10.参考文献。
进度安排
星期一、二:
下达设计任务书,介绍课题内容与要求;
查找资料,确定总体设计方案和单元电路设计;
星期三~第二周星期一:
单元电路设计与仿真,硬件下载;
第二周星期二、三:
硬件下载;
第二星期四、五:
书写设计报告,打印相关图纸;答辩
参考文献
1.康华光主编.电子技术基础(数字部分),高等教育出版社。
2.阎石主编.电子技术基础(数字部分),清华大学出版社。
3.陈大钦主编,电子技术基础实验,高等教育出版社。
4.彭介华主编,电子技术课程设计指导,高等教育出版社。
5.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
7.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社
目录
第一章引言1
1.1课题背景1
1.2本文的主要工作1
第二章出租车计费器的设计3
2.1技术要求3
2.2功能要求3
第三章方案设计及原理框图4
3.1总体框架设计4
3.2出租车计费器主要模块设计5
第四章各单元模块设计与仿真6
4.1速度模块6
4.1.1速度模块VHDL程序6
4.1.2速度模块仿真结果8
4.2计程模块8
4.2.1计程模块VHDL程序9
4.2.2计程模块仿真结果10
4.3计费模块10
4.3.1计费模块VHDL的程序11
4.3.2计费模块仿真结果13
4.4数码管显示模块13
4.4.1显示模块VHDL程序13
4.4.2显示模块仿真结果17
第五章硬件调试18
5.1设计测试18
5.2硬件调试图18
心得体会20
参考文献21
附录整体电路图22
第一章引言
1.1课题背景
几年来,出租车行业发展迅速,全国大大小小的出租车公司已有数千家,基于出租车的附属品市场前景也是十分广阔。
传统的出租车计费器大多是由单片机实现的,发展使用也是十几年了,在稳定性、成本、制造工艺、使用习惯等方面都具有一些优势,但在运营过程中系统不是很稳定,容易造成死机的现象。
传统计费器的不足点:
1.产品更新周期长:
传统的计费器利用微控器,大部分功能依靠单片机实现。
但单片机的程序不通用,不同芯片指令集不相同,因此设计研发比较困难,周期很长。
2.计价方式不灵活:
每次计价标准修改都需要重新烧录芯片,使得每次价格调整都成为很费力的事情,很难适应社会发展的需要。
传统出租车计费器多数由单片机实现,升级繁琐,成本高。
随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLD/FPGA的出现,给设计人员带来了诸多方便。
利用它进行产品开发,不仅可以解决电子系统小型化、低功耗、高可靠性等问题,还具有成本低、开发周期短、开发软件投入少的优点,也能满足对小批量、多品种的产品需求。
使用EDA设计出租车计费器,其部分功能还能由软件实现,减少了硬件的压力,使得系统结构简单、调试方便且成本低廉。
所以基于CPLD的出租车计费器已成首选。
1.2本文的主要工作
面对出租车行业日益迅猛的发展趋势及对计费器更高的灵活性的要求,本设计希望尝试一些新的方法来予以解决。
(1).利用CPLD取代传统微控器
随着CPLD等数字可编程器件的出现解决了传统电子设计不能完成的任务,利用FPGA来实现出租车计费器,可行性很高,而且电路简单,大大减少外围器件,可以用软件完全仿真,灵活度高,可以设计一些复杂的系统,而且编好的系统可以在不同的FPGA或CPLD芯片上通用。
CPLD能完成任何数字器件的功能,使用CPLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
同时由于CPLD的功能完全取决于VHDL语言编写的程序,不拘泥于某种芯片的特殊指令,更加提高了产品的更新换代能力。
(2).完成基于CPLD的出租车计费器的设计
出租车计费器系统是VHDL语言的实际应用,利用VHDL语言设计出来的出租车计费器系统将实现计程模块、计时模块以及动态扫描模块等设计方法与技巧。
计程模块将用计数器来完成,计数器对脉冲数计数,然后提供给程序数据。
通过不同的信号,然后用比较器可以让我们确定出租车是在车行计程还是车停计时。
再将数据传输到计费模块,通过多种条件判定,最后确定输出值,然后相加确定最后的费用,并显示出来。
第二章出租车计费器的设计
2.1技术要求
(1)掌握较复杂逻辑的设计、调试。
(2)进一步掌握用QuartusII7.0。
(3)掌握用Max+pulsII软件的原理图输入的设计方法。
2.2功能要求
基本功能:
(1)按行驶里程计费,起步价为6.00元,并在车行3公里后按2.00元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.00元/km计费。
(2)实现模拟功能:
能模拟汽车启动、停止。
(3)设计动态扫描电路:
将车费、里程、等待时间动态的显示出来。
(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。
(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。
第三章方案设计及原理框图
3.1总体框架设计
系统流程介绍:
分析系统设计要求不难得知,整个出租车计费系统按功能主要分为速度模块、计程模块、计时模块和计费模块,其系统结构图如图3-1所示。
图3-1出租车计费器系统结构图
各模块的功能:
(1)速度模块:
通过对速度信号sp的判断,决定变量kinside的值。
Kinside即是行进100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。
(2)计程模块:
由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。
(3)计费模块:
由两个进程组成,其中一个进程根据条件对enable和price赋值:
当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于20元后,则单价price由原来的2元每公里变成3元每公里;第二个进程在每个时钟周期判断timeout和clkout的值。
当其为1时,则在总费用上加上相应的费用费。
(4)译码模块:
实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。
3.2出租车计费器主要模块设计
从上述设计方案中我们可以大致得到出租车计费器的系统框图,如图3-2所示。
其中clk为输入时钟脉冲,时钟上升沿有效;reset为复位信号,start为开始计费信号,stop为停止计费信号,均高电平有效;SP[2..0]表示出租车状态(停止或不同形式速度);kmcnt和count信号则分别输出出租车行驶的里程和花费。
图3-2出租车计费器系统框图
第四章各单元模块设计与仿真
本系统采用层次化、模块化的设计方法,设计顺序为自下向上。
首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。
4.1速度模块
速度模块首先根据start信号判断是否开始计费,然后根据输入的速度档位sp[2..0]的判断,确定行驶100m所需要的时钟数,每前进100m,输出一个clkout信号。
同时由cnt对clk进行计数,当cnt等于kinside时,把clkout信号置1,cnt清0。
其模块框图如图3-3。
图4-1速度模块框图
4.1.1速度模块VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityspeedis
port(clk:
instd_logic;
reset:
instd_logic;
start:
instd_logic;
stop:
instd_logic;
sp:
instd_logic_vector(2downto0);
clkout:
outstd_logic
);
endspeed;
architecturertlofspeedis
begin
process(clk,reset,start,stop,sp)
typestate_typeis(s0,s1);variables_state:
state_type;
variablecnt:
integerrange0to28;
variablekinside:
integerrange0to30;
begin
casespiswhen"000"=>kinside:
=0;when"001"=>kinside:
=28;when"010"=>kinside:
=24;when"011"=>kinside:
=20;when"100"=>kinside:
=16;when"101"=>kinside:
=12;when"110"=>kinside:
=8;when"111"=>kinside:
=4;
endcase;
ifreset='1'thens_state:
=s0;
elsifclk'eventandclk='1'thencases_stateis
whens0=>
cnt:
=0;
clkout<='0';
ifstart='1'then
s_state:
=s1;
else
s_state:
=s0;
endif;
whens1=>
clkout<='0';
ifstop='1'then
s_state:
=s0;elsifsp="000"then
s_state:
=s1;elsifcnt=kinsidethen
cnt:
=0;
clkout<='1';
s_state:
=s1;
else
cnt:
=cnt+1;
s_state:
=s1;
endif;
endcase;
endif;
endprocess;
endrtl;
4.1.2速度模块仿真结果
速度模块的仿真波形图如图4-2所示。
该模块根据出租车所处的运行状态和不同的形式速度,对相应数目的时钟周期进行计数,车每行驶100m时输出信号clkout输出高电平。
图4-2速度模块仿真图
4.2计程模块
此模块主要用于记录行进的距离,其模块框图如图3-4所示。
通过对clkout信号的计数,可以计算行驶的距离kmcount。
一个clkout脉冲相当于行进100m所以只要记录clkout的脉冲数目即可确定共行进的距离。
Kmcount1为十分位,kmcount2为个位,kmcount3为十位,分别为十进制数。
图4-3计程模块框图
4.2.1计程模块VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitykilometersis
port(
clkout,reset:
instd_logic;
kmcnt1:
outstd_logic_vector(3downto0);
kmcnt2:
outstd_logic_vector(3downto0);
kmcnt3:
outstd_logic_vector(3downto0)
);
endkilometers;
architecturertlofkilometersis
begin
process(clkout,reset)
variablekm_reg:
std_logic_vector(11downto0);
begin
ifreset='1'then
km_reg:
="000000000000";
elsifclkout'eventandclkout='1'then
ifkm_reg(11downto8)="1001"then
km_reg(11downto8):
="0000";
elsifkm_reg(7downto4)="1001"then
km_reg(11downto8):
=km_reg(11downto8)+"0001";km_reg(7downto4):
="0000";
elsifkm_reg(3downto0)="1001"then
km_reg(3downto0):
="0000";km_reg(7downto4):
=km_reg(7downto4)+"0001";
else
km_reg(3downto0):
=km_reg(3downto0)+"0001";
endif;
endif;
kmcnt1<=km_reg(3downto0);
kmcnt2<=km_reg(7downto4);
kmcnt3<=km_reg(11downto8);
endprocess;
endrtl;
4.2.2计程模块仿真结果
计程模块的仿真波形如图5-3所示。
图中,当reset信号有效时,系统复位清零;否则,对输入信号clkout进行十进制计数。
图4-4计程模块仿真波形图
4.3计费模块
计费模块如图4-5所示,可分为kmmoney1和kmmoney2两个进程。
Kmmoney1用于产生enable和price信号。
当记录距离达到3km后,enable信号为1,开始进行每公里收费。
当总费用大于20元后,单价price由原来的2元变成3元,用作计时收费。
通过对sp信号的判断,当sp=0,开始记录时间。
当时间达到足够长时,产生timecount脉冲,并重新计时。
Kmmoney2用于判断timecount和clkout的值,当其为1时,总费用加1。
最终输出为总费用。
图4-5计费模块框图
4.3.1计费模块VHDL的程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitykmmoneyis
port(
clk:
instd_logic;
reset:
instd_logic;
timecount:
instd_logic;
clkout:
instd_logic;
kmcnt2:
instd_logic_vector(3downto0);
kmcnt3:
instd_logic_vector(3downto0);
count1:
outstd_logic_vector(3downto0);
count2:
outstd_logic_vector(3downto0);
count3:
outstd_logic_vector(3downto0)
);
endkmmoney;
architecturertlofkmmoneyis
signalcash:
std_logic_vector(11downto0);
signalprice:
std_logic_vector(3downto0);
signalenable:
std_logic;
begin
kmmoney1:
PROCESS(cash,kmcnt2,kmcnt3)
begin
ifcash>="000000100000"then
price<="0011";
else
price<="0010";
endif;
ifkmcnt2>="0001"andkmcnt3>="0010"then
enable<='1';
else
enable<='0';
endif;
endprocess;
kmmoney2:
process(reset,clkout,clk,enable,price,kmcnt2)
variablereg2:
std_logic_vector(11downto0);
variableclkout_cnt:
integerrange0to10;
begin
ifreset='1'then
cash<="000000000110";elsifclk'eventandclk='1'then
iftimecount='1'then
reg2:
=cash;
ifreg2(3downto0)+"0001">"1001"then
reg2(7downto0):
=reg2(7downto0)+"00000111";
ifreg2(7downto4)>"1001"then
cash<=reg2+"000001100000";
else
cash<=reg2;
endif;
else
cash<=reg2+"0001";
endif;
elsifclkout='1'andenable='1'then
ifclkout_cnt=9then
clkout_cnt:
=0;reg2:
=cash;
if"0000"®2(3downto0)+price>"00001001"then
reg2(7downto0):
=reg2(7downto0)+"00000110"+price;
ifreg2(7downto4)>"1001"thencash<=reg2+"000001100000";
else
cash<=reg2;
endif;
else
cash<=reg2+price;
endif;
elseclkout_cnt:
=clkout_cnt+1;
endif;
endif;
endif;
endprocess;
count1<=cash(3downto0);count2<=cash(7downto4);count3<=cash(11downto8);
endrtl;
4.3.2计费模块仿真结果
计费模块的仿真波形图如图4-6所示。
当reset信号有效时,系统复位清零;否则,当计时计费信号timecount和计程计费信号clkout为高电平时,按照一定计费规则进行计费。
图4-6计费模块仿真功能图
4.4数码管显示模块
图4-7数码管显示模块图
4.4.1显示模块VHDL程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYDISPLAYIS
PORT(
DOUT1:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT2:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT3:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT11:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT22:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT33:
INSTD_LOGIC_VECTOR(3DOWNTO0);
CLKMS:
INSTD_LOGIC;
DUANMA:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
WEIMA:
OUTSTD_LOGIC_VECTOR(5DOWNTO0));
ENDDISPLAY;
ARCHITECTURERT1OFDISPLAYIS
SIGNALcount:
INTEGER:
=0;
BEGIN
COM1:
PROCESS(CLKMS)
BEGIN
IFCLKMS'EVENTANDCLKMS='1'THEN
IFcount=5then
count<=0;
ELSEcount<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
COM2:
PROCESS(count,DOUT1,DOUT2,DOUT3,DOUT11,DOUT22,DOUT33)
BEGIN
IFcount=0then
WEIMA<="000001";
CASEDOUT1IS
WHEN"0000"=>DUANMA<="00111111";
WHEN"0001"=>DUANMA<="00000110";
WHEN"0010"=>DUANMA<="01011011";
WHEN"0011"=>DUANMA<="01001111";
WHEN"0100"=>DUA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于CPLD的出租车计费器 嵌入式课程设计 精品版 基于 CPLD 出租车 计费 嵌入式 课程设计 精品