基于CPLD的出租车计费器剖析.docx
《基于CPLD的出租车计费器剖析.docx》由会员分享,可在线阅读,更多相关《基于CPLD的出租车计费器剖析.docx(14页珍藏版)》请在冰点文库上搜索。
![基于CPLD的出租车计费器剖析.docx](https://file1.bingdoc.com/fileroot1/2023-6/26/2d070645-306f-41d1-ba80-d6d885cd7470/2d070645-306f-41d1-ba80-d6d885cd74701.gif)
基于CPLD的出租车计费器剖析
等级:
课程设计
课程名称
嵌入式系统课程设计
课题名称
基于CPLD的出租车计费器
专业
电子信息工程
班级
1201
学号
19
姓名
许振跃
指导老师
林愿
2015年9月16日
目录
1、课程设计任务要求1
1.1EDA发展前景1
1.2任务要求1
2、设计步骤1
2.1信号输入1
2.2 数据转换1
2.3数据显示1
3、出租车计费系统的实现2
3.1顶层电路设计2
3.2子模块设计2
4、系统仿真5
4.1开始信号的仿真结果5
4.2加速信号仿真结果5
4.3显示的仿真结果5
4.4decoder的仿真结果6
5、下载调试及实验结果6
6、设计心得7
参考文献8
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、硬件测试过程规范、结果正确
综合评价
课程设计成绩评定为:
□优□良□中□及格□不及格
指导老师签名:
________________
日期:
________________