基于CPLD的出租车计费器.docx
- 文档编号:8988361
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:13
- 大小:594.87KB
基于CPLD的出租车计费器.docx
《基于CPLD的出租车计费器.docx》由会员分享,可在线阅读,更多相关《基于CPLD的出租车计费器.docx(13页珍藏版)》请在冰豆网上搜索。
基于CPLD的出租车计费器
基于CPLD的出租车计费器
等级:
课程设计
课程名称
嵌入式系统课程设计
课题名称
基于CPLD的出租车计费器
专业
电子信息工程
班级
1201
学号
19
姓名
许振跃
指导老师
林愿
2015年9月16日
1、课程设计任务要求
1.1EDA发展前景
EDA技术(即ElectronicDesignAutomation技术)就是依赖强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDdscriptionLangurage)为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。
1.2任务要求
CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。
并最终完成电路的编程调试。
具体要求如下:
(1)实现计费功能,计费标准为:
按行驶里程计费,起步价为5.00元,并在车行3Km后按1.40元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
(2)现场模拟功能:
能模拟汽车起动、停止、暂停以及加速等状态。
(3)按计动态扫描电路,将车费和路程显示出来,各有两位小数。
2、设计步骤
2.1信号输入
该模块主要实现计费功能和现场模拟功能。
计费标准为:
按行驶里程计费,起步价为5.00元,并在车行3 km后按1.4元/km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
并以高低脉冲模拟出租汽车启动、停止、暂停、加速按钮,具有输入信号的作用。
2.2 数据转换
数据转换模块是一个模为10的加法计数器,可将计费模块输出的车费和路程转换成4位的十进制数。
2.3数据显示
显示模块是由七段LED数码管译码和动态扫描显示两部分组成。
采用的是共阴极七段数码管,根据十六进制数和七段显示段码表的对应关系,其中要求路程和车费都要用2位小数点来表示,所以须设置一个控制小数点的变量,即程序中的dp。
这段程序所示的是在数码管的第二、第六个后面显示小数点,实现了路程和车费都用2位小数点表示的功能。
数码管控制及译码显示模块将十进制的输入信号用七段数码管显示,由七段发光二极管组成数码显示器,利用字段的不同组合。
可分别显示0~9十个数字。
3、出租车计费系统的实现
3.1顶层电路设计
图1系统总体框图
3.2子模块设计
3.2.1taxi的实现
模块taxi见下图。
输入端口speedup,start,pause,stop分别为出租车计费器的加速、起动、暂停、停止按键。
实现计费功能,计费标准为:
按行驶里程计费,起步价为5.0元,并在车行3Km后按1.40元/Km计费,当计费器达到或超过20元时,每公里加收50%的车费,车停止不计费。
图2taix模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydecoderis
port(clk20mhz:
instd_logic;
money_in:
inintegerrange0to8000;
distance_in:
inintegerrange0to8000;
scan:
outstd_logic_vector(7downto0);
seq7:
outstd_logic_vector(6downto0);
dp:
outstd_logic);
end;
architectureoneofdecoderis
signalclk1khz:
std_logic;
signaldata:
std_logic_vector(3downto0);
signalm_one,m_ten,m_hun,m_tho:
std_logic_vector(3downto0);
signald_one,d_ten,d_hun,d_tho:
std_logic_vector(3downto0);
variablenum:
integerrange0to9;
variabledis:
integerrange0to100;
variabled:
std_logic;
begin
ifstop='1'then
money_reg:
=0;
distance_reg:
=0;
dis:
=0;
num:
=0;
3.2.2decoder的实现
模块decoder见下图。
该模块把车费和路程转化为数码管可以显示的信号。
图3模块x
elsifstart='0'andspeedup="10"andpause='0'andstop='0'then
ifnum=9then
num:
=0;
distance_reg:
=distance_reg+5;
dis:
=dis+5;
elsenum:
=num+1;
endif;
elsifstart='0'andspeedup="11"andpause='0'andstop='0'then
distance_reg:
=distance_reg+1;
dis:
=dis+1;
endif;
ifdis>=100then
d:
='1';
dis:
=0;
elsed:
='0';
endif;
ifdistance_reg>=300then
ifmoney_reg<2000andd='1'then
money_reg:
=money_reg+140;
elsifmoney_reg>=2000andd='1'then
money_reg:
=money_reg+210;
endif;
endif;
endif;
money<=money_reg;
distance<=distance_reg;
endprocess;
end;
3.2.3display的实现
模块display见下图。
经过该八选一模块把车费和路程显示出来。
每来一个选通地址,模块就把选到的那一位十进制输入值向后输出,同时在路程的百位和费用的十位显示小数点。
实现译码功能。
译码管片的选通信号,对输入脉冲进行计数。
图4模块display
process(clk1khz,m_one,m_ten,m_hun,m_tho,d_one,d_ten,d_hun,d_tho)
variablecnt:
std_logic_vector(2downto0);
begin
ifclk1khz'eventandclk1khz='1'then
cnt:
=cnt+1;
endif;
casecntis
when"000"=>data<=m_one;dp<='0';scan<="00000001";
when"001"=>data<=m_ten;dp<='0';scan<="00000010";
when"010"=>data<=m_hun;dp<='1';scan<="00000100";
when"011"=>data<=m_tho;dp<='0';scan<="00001000";
when"100"=>data<=d_one;dp<='0';scan<="00010000";
when"101"=>data<=d_ten;dp<='0';scan<="00100000";
when"110"=>data<=d_hun;dp<='1';scan<="01000000";
when"111"=>data<=d_tho;dp<='0';scan<="10000000";
endcase;
endprocess;
process(data)
begin
casedatais
when"0000"=>seq7<="1111110";
when"0001"=>seq7<="0110000";
when"0010"=>seq7<="1101101";
when"0011"=>seq7<="1111001";
when"0100"=>seq7<="0110011";
when"0101"=>seq7<="1011011";
when"0110"=>seq7<="1011111";
when"0111"=>seq7<="1110000";
when"1000"=>seq7<="1111111";
when"1001"=>seq7<="1111011";
whenothers=>seq7<="0000000";
endcase;
endprocess;
end;
4、系统仿真
4.1开始信号的仿真结果
输入端口speedup,start,pause,stop分别为出租车计费器的加速、起动、暂停、停止按键。
输入:
clk,start,stop,pause,speedup;
输出:
money,distance;
图5开始仿真结果
4.2加速信号仿真结果
对控制模块taxi进行仿真,观察波形可知,当启动键(start)为一个脉冲时,表示汽车已启动,车费money显示起步价为5.00元,同时路程distance随着计费脉冲开始计数,当停止键(stop)为1时,表示汽车熄火,车费money和路程distance均为0;当暂停键(pause)为1时,车费和路程停止计数;当档位键分别取0、1、2时路程的计数逐步加快,表示车速逐步加快。
输入:
clk,start,stop,pause,speedup;
输出:
money,distance;
图6系统仿真结果
5、下载调试及实验结果
程序下载完后,按下启动键,车费显示起步价为5元。
图9加速仿真结果
当路程超过3公里后每公里多加1.4元,显示为6.4元。
图10加速仿真结果
6、设计心得
我们这次课程设计的题目是出租车计费器,拿到题目我就有点小激动,因为终于可以利用自己的所学做点与实际生活相关的东西了。
首先,我复习的一下VHDL程序设计的基本语法,然后开始熟悉QuartusⅡ的相关操作。
包括模块化的编译器。
编译器包括的功能模块有分析/综合器,适配器、装配器、时序分析器、设计辅助模块、EDA网表文件生成器、编辑数据接口等。
可以通过选择StartCompilation来运行所有的编译器模块,也可以通过选择Start单独运行各个模块。
还可以通过选择CompilerTool,在CompilerTool窗口中运行该模块来启动编译器模块。
然后,我开始去图书馆找相关的图书,因为当我看了课程设计任务书之后,对于整个程序还是没有把握。
所以我希望能够找到相关的程序进行验证,然后修改以符合自己的课程设计的要求。
功夫不负有心人,我在图书馆借的几本书中就有和我们课题类似的程序模块。
所以,我就将书中的程序在QuartusII中运行了一遍。
可是,过程并没有我们想象的那么顺利。
我们发现加速功能无法实现,一旦开启加速,数码管就会出现乱码。
经过对源代码的一番修改,我们的乱码现象有了一些好转。
但是,也并没有完全达到要求。
经过在实验箱中的调试,我们终于找到了解决方案,即改变输入的时钟频率。
寻找到最合适的频率,就可以让系统达到显示要求。
通过这次课程设计,我分析问题,解决问题的能力有了一定的提高。
同时,对之前所学的知识也进行了巩固。
更重要的是,我发现之前学的很多基础知识是有用的。
一旦开始进行工程实践,这些知识将会发挥巨大的作用。
所以,我决定在今后的学习过程中重视基础知识的学习,在增强理论基础的同时,再动手进行工程实践。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次设计的每个细节和每个数据,都离不开老师您的细心指导。
谢谢您!
!
参考文献
1.陈大钦主编,电子技术基础实验,高等教育出版社。
2.彭介华主编,电子技术课程设计指导,高等教育出版社。
3.张原编著,可编程逻辑器件设计及应用,机械工业出版社。
4.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。
5.QUARTUSII入门
6.刘洪喜,陆颖编著.VHDL电路设计实用教程清华大学出版社。
电气信息学院课程设计评分标准
环节
项目
评价
优
良
中
及格
不及格
实践环节(70%)
1、设计方案合理性与创造性
2、编程完成情况
3、电路模块仿真调试结果*
4、硬件测试过程及结果*
5、解决问题能力及答辩情况
6、纪律和出勤情况
设计报告(30%)
1、设计报告内容完整、规范
2、设计步骤规范、正确
3、仿真调试结果正确、波形清晰
4、硬件测试过程规范、结果正确
综合评价
课程设计成绩评定为:
□优□良□中□及格□不及格
指导老师签名:
________________
日期:
________________
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 CPLD 出租车 计费