《基于CPLD的出租车计费器嵌入式课程设计》由会员分享,可在线阅读,更多相关《基于CPLD的出租车计费器嵌入式课程设计(27页珍藏版)》请在金锄头文库上搜索。
1、 设计内容与设计要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。有关知识可参见相关教材或参考书。一设计内容(1) 实现计费功能,计费标准为:按行驶里程计费,起步价为6.00元,并在车行3Km后按2.00元/Km计费,当计费器达到或超过20元时,每公里加收50的车费,车停止不计费。(2) 现场模拟功能:能模拟汽车起动、停止、暂停以及加速等状态。(3) 按计动态扫描电路,将车费和路程显示出来,各有两位小数。二、设计要求:1、 设计思路清晰,给出整体设计框图;2、 设计各单元电路,完成其功能仿
2、真和编译并生成低层模块;3、 完成顶层设计并编译通过;4、 完成设计下载并调试电路;5、 写出设计报告; 主要设计条件1. 提供EDA实验室;2. 提供EL实验箱和CPLD芯片;3. 提供设计软件说明书格式1. 课程设计封面;2. 任务书;3. 说明书目录;4. 设计总体思路,基本原理和框图(顶层电路图);5. 单元电路设计(各次级模块电路图);6. 设计仿真;7. 编程下载;8. 总结与体会;9. 附录;10. 参考文献。 进度安排星期一、二:下达设计任务书,介绍课题内容与要求;查找资料,确定总体设计方案和单元电路设计;星期三第二周星期一:单元电路设计与仿真,硬件下载;第二周星期二、三:硬件
3、下载;第二星期四、五:书写设计报告,打印相关图纸;答辩参考文献1. 康华光主编.电子技术基础(数字部分),高等教育出版社。2. 阎石主编. 电子技术基础(数字部分),清华大学出版社。3. 陈大钦主编,电子技术基础实验,高等教育出版社。4. 彭介华主编,电子技术课程设计指导,高等教育出版社。5. 张 原编著,可编程逻辑器件设计及应用,机械工业出版社。6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。7. 刘洪喜,陆颖编著. VHDL电路设计实用教程 清华大学出版社 目录第一章 引言11.1 课题背景11.2 本文的主要工作1第二章 出租车计费器的设计32.1 技术要求32.2 功能要
4、求3第三章 方案设计及原理框图43.1 总体框架设计43.2出租车计费器主要模块设计5第四章 各单元模块设计与仿真64.1 速度模块64.1.1 速度模块VHDL程序64.1.2 速度模块仿真结果84.2 计程模块84.2.1 计程模块VHDL程序94.2.2 计程模块仿真结果104.3 计费模块104.3.1 计费模块VHDL的程序114.3.2 计费模块仿真结果134.4 数码管显示模块134.4.1 显示模块VHDL程序134.4.2 显示模块仿真结果17第五章 硬件调试185.1 设计测试185.2 硬件调试图18心得体会20参考文献21附录 整体电路图22 第一章 引言1.1 课题背
5、景几年来,出租车行业发展迅速,全国大大小小的出租车公司已有数千家,基于出租车的附属品市场前景也是十分广阔。传统的出租车计费器大多是由单片机实现的,发展使用也是十几年了,在稳定性、成本、制造工艺、使用习惯等方面都具有一些优势,但在运营过程中系统不是很稳定,容易造成死机的现象。传统计费器的不足点:1. 产品更新周期长:传统的计费器利用微控器,大部分功能依靠单片机实现。但单片机的程序不通用,不同芯片指令集不相同,因此设计研发比较困难,周期很长。2. 计价方式不灵活:每次计价标准修改都需要重新烧录芯片,使得每次价格调整都成为很费力的事情,很难适应社会发展的需要。传统出租车计费器多数由单片机实现,升级繁
6、琐,成本高。随着EDA技术的高速发展,电子系统的设计技术和工具发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅可以解决电子系统小型化、低功耗、高可靠性等问题,还具有成本低、开发周期短、开发软件投入少的优点,也能满足对小批量、多品种的产品需求。使用EDA设计出租车计费器,其部分功能还能由软件实现,减少了硬件的压力,使得系统结构简单、调试方便且成本低廉。所以基于CPLD的出租车计费器已成首选。1.2 本文的主要工作面对出租车行业日益迅猛的发展趋势及对计费器更高的灵活性的要求,本设计希望尝试一些新的方法来予以解决。(1).利用CPLD取
7、代传统微控器 随着CPLD等数字可编程器件的出现解决了传统电子设计不能完成的任务,利用FPGA来实现出租车计费器,可行性很高,而且电路简单,大大减少外围器件,可以用软件完全仿真,灵活度高,可以设计一些复杂的系统,而且编好的系统可以在不同的FPGA或CPLD芯片上通用。CPLD能完成任何数字器件的功能,使用CPLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。同时由于CPLD的功能完全取决于VHDL语言编写的程序,不拘泥于某种芯片的特殊指令,更加提高了产品的更新换代能力。 (2).完成基于CPLD的出租车计费器的设计 出租车计费器系统是VHDL语言的实际应用,利用VHD
8、L语言设计出来的出租车计费器系统将实现计程模块、计时模块以及动态扫描模块等设计方法与技巧。计程模块将用计数器来完成,计数器对脉冲数计数,然后提供给程序数据。通过不同的信号,然后用比较器可以让我们确定出租车是在车行计程还是车停计时。再将数据传输到计费模块,通过多种条件判定,最后确定输出值,然后相加确定最后的费用,并显示出来。第二章 出租车计费器的设计2.1 技术要求(1)掌握较复杂逻辑的设计、调试。(2)进一步掌握用Quartus II7.0。(3)掌握用Max+pulsII软件的原理图输入的设计方法。2.2 功能要求 基本功能:(1)按行驶里程计费,起步价为6.00元,并在车行3公里后按2.0
9、0元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.00元/km计费。(2)实现模拟功能:能模拟汽车启动、停止。(3)设计动态扫描电路:将车费、里程、等待时间动态的显示出来。(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。第三章 方案设计及原理框图3.1 总体框架设计系统流程介绍:分析系统设计要求不难得知,整个出租车计费系统按功能主要分为速度模块、计程模块、计时模块和计费模块,其系统结构图如图3-1所示。图3-1出租车计费器系统结构图各模块的功能:(1
10、)速度模块:通过对速度信号sp的判断,决定变量kinside的值。Kinside即是行进100m所需要的时钟周期数,然后每行进100m,则产生一个脉冲clkout。(2)计程模块:由于一个clkout信号代表行进100m,故通过对clkout计数,可以获得共行进的距离kmcount。(3)计费模块:由两个进程组成,其中一个进程根据条件对enable和price赋值:当记录的距离达到3公里后enable变为1,开始进行每公里收费,当总费用大于20元后,则单价price由原来的2元每公里变成3元每公里;第二个进程在每个时钟周期判断timeout和clkout的值。当其为1时,则在总费用上加上相应的
11、费用费。 (4)译码模块:实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。3.2出租车计费器主要模块设计从上述设计方案中我们可以大致得到出租车计费器的系统框图,如图3-2所示。其中clk为输入时钟脉冲,时钟上升沿有效;reset为复位信号,start为开始计费信号,stop为停止计费信号,均高电平有效;SP2.0表示出租车状态(停止或不同形式速度);kmcnt和count信号则分别输出出租车行驶的里程和花费。 图3-2 出租车计费器系统框图第四章 各单元模块设计与仿真本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模
12、块调用各子模块来完成整个系统。4.1 速度模块速度模块首先根据start信号判断是否开始计费,然后根据输入的速度档位sp2.0的判断,确定行驶100m所需要的时钟数,每前进100m,输出一个clkout信号。同时由cnt对clk进行计数,当cnt等于kinside时,把clkout信号置1,cnt清0。其模块框图如图3-3。图4-1 速度模块框图4.1.1 速度模块VHDL程序library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity speed isport( clk :in std_log
13、ic;reset:in std_logic;start:in std_logic;stop :in std_logic;sp :in std_logic_vector(2 downto 0);clkout:out std_logic);end speed;architecture rtl of speed isbeginprocess(clk,reset,start,stop,sp) type state_type is(s0,s1); variable s_state:state_type; variable cnt:integer range 0 to 28;variable kinside:integer range 0 to 30;begincase sp is when000=kinside:=0; when001=kinside:=28; when010=kinside:=24; when011=kinside:=20;when100=kinside:=16;when101=kinside:=12;when110=kinside:=8;when111=kinside