基于CPLD的出租车计费器_课程设计论文.doc

上传人:来看看 文档编号:3920078 上传时间:2019-10-10 格式:DOC 页数:26 大小:348.52KB
返回 下载 相关 举报
基于CPLD的出租车计费器_课程设计论文.doc_第1页
第1页 / 共26页
基于CPLD的出租车计费器_课程设计论文.doc_第2页
第2页 / 共26页
基于CPLD的出租车计费器_课程设计论文.doc_第3页
第3页 / 共26页
基于CPLD的出租车计费器_课程设计论文.doc_第4页
第4页 / 共26页
基于CPLD的出租车计费器_课程设计论文.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《基于CPLD的出租车计费器_课程设计论文.doc》由会员分享,可在线阅读,更多相关《基于CPLD的出租车计费器_课程设计论文.doc(26页珍藏版)》请在三一文库上搜索。

1、课 程 设 计课程名称 嵌入式系统 课题名称 基于CPLD的出租车计费器专 业 电子信息工程 班 级 电子信息 学 号 姓 名 指导教师 2013年12月20日 课 程 设 计 任 务 书课程名称: 嵌入式系统 题 目:基于CPLD的出租车计费器专业班级: 电子信息 学生姓名: 指导老师: 审 批: 设计内容与设计要求CPLD为复杂可编程逻辑器件,通过EDA技术对其进行编程,可将一个较复杂的数字系统集成于一个芯片中,制成专用集成电路芯片,并可随时在系统修改其逻辑功能。有关知识可参见相关教材或参考书。一设计内容(1) 实现计费功能,计费标准为:按行驶里程计费,起步价为7.00元,并在车行3Km后

2、按2.20元/Km计费,当计费器达到或超过20元时,每公里加收50的车费,车停止不计费。(2) 现场模拟功能:能模拟汽车起动、停止、暂停以及加速等状态。(3) 按计动态扫描电路,将车费和路程显示出来,各有两位小数。二、设计要求:1、 设计思路清晰,给出整体设计框图;2、 设计各单元电路,完成其功能仿真和编译并生成低层模块;3、 完成顶层设计并编译通过;4、 完成设计下载并调试电路;5、 写出设计报告;主要设计条件1. 提供EDA实验室;2. 提供EL实验箱和CPLD芯片;3. 提供设计软件说明书格式1. 课程设计封面;2. 任务书;3. 说明书目录;4. 设计总体思路,基本原理和框图(顶层电路

3、图);5. 单元电路设计(各次级模块电路图);6. 设计仿真;7. 编程下载;8. 总结与体会;9. 附录;10. 参考文献。 进度安排星期一、二:下达设计任务书,介绍课题内容与要求;查找资料,确定总体设计方案和单元电路设计;星期三第二周星期一:单元电路设计与仿真,硬件下载;第二周星期二、三:硬件下载;第二星期四、五:书写设计报告,打印相关图纸;答辩参考文献1. 康华光主编.电子技术基础(数字部分),高等教育出版社。2. 阎石主编. 电子技术基础(数字部分),清华大学出版社。3. 陈大钦主编,电子技术基础实验,高等教育出版社。4. 彭介华主编,电子技术课程设计指导,高等教育出版社。5. 张 原

4、编著,可编程逻辑器件设计及应用,机械工业出版社。6.荀殿栋,徐志军编著,数字电路设计实用手册,电子工业出版社。7. 刘洪喜,陆颖编著. VHDL电路设计实用教程 清华大学出版社 摘要介绍了出租车计费器系统的组成及工作原理,简述了在EDA平台上用FPGA器件构成该数字系统的设计思想和实现过程。论述了计程模块,计费模块,计时模块,译码动态扫描模块等的设计方法与技巧。 1引言随着EDA技术的高速发展,电子系统的设计技术发生了深刻的变化,大规模可编程逻辑器件CPLDFPGA的出现,给设计人员带来了诸多方便。利用它进行产品开发,不仅成本低、周期短、可靠性高,而且具有完全的知识产权。随着社会的不断进步,人

5、们生活水平的不断提高,出租车逐渐成为人们日常生活不可缺少的交通工具。而计价器作为出租车的一个重要组成部分,关系着出租车司机和乘客双方利益,起着重要的作用,因而出租车计价器的发展非常迅猛。2出租车计费系统的实验任务及要求2.1技术要求(1)掌握较复杂逻辑的设计、调试。(2)进一步掌握用Quartus II7.0。(3)掌握用Max+pulsII软件的原理图输入的设计方法。2.2功能要求基本功能:(1)按行驶里程计费,起步价为7.00元,并在车行3公里后按2.20元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.30元/km计费。(2)实现模拟功能:能模拟汽车启动、停止。(

6、3)设计动态扫描电路:将车费、里程、等待时间动态的显示出来。(4)用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。(5)各计数器的计数状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。3.方案设计及原理框图3.1硬件方案设计及原理框图硬件系统组成框图开关电路FPGA模块动态显示电路 各模块的作用和组成:(1)开关模块该模块的作用是用于电路的输入的信号。主要有三个开关以及三个限流电阻,电源构成。(3)动态显示模块:此模块由六个数码管和三个二极管所构成,17个200电阻起到限制电流的作用,使得流到数码管的电流适当,防止数码管中的电流过大,而使得数码管损坏

7、。数码管将计费、等待时间和里程动态的显示出来。3.2软件方案设计及原理框图3.2.1系统的顶层框图及方案设计:动态显示模块控制芯片信号输入 信号输入:各种控制信号经输入端给控制芯片。控制芯片:采用的有CPLD或者FPGA等。动态显示电路:采用的是数码管来实现功能的输出。3.2.2 FPGA内部具体框图及方案设计:出租车的一般计费过程为:出租车载客后,启动计费器,整个系统开始运行,里程计数器从0开始计数,费用计数器从9开始计算;出租车载客中途等待,等待时间计数器从0开始计数。最后根据行驶里程或停止等待的时间的计费标准计费。出租车到达目的地停止后,停止计费器,显示总费用。根据出租车计费器的工作过程

8、,本系统采用分层次、分模块的方式设计,其FPGA内部具体框图如下所示。输入信号分频器车费计数模块车行驶状态译码模块输出控制模块里程计数模块 图2.1FPGA内部具体图各模块的功能:(1)由FPGA晶振电路产生50MHz时钟信号并输入。(2)分频器:将时钟信号进行分频。(3)标志模块:将按钮产生的脉冲转化为一种标志信号。(4)计程模块:在等待信号未作用时,来一个时钟脉冲信号,里程值加1。该模块还包含一个路程计费标志的小模块,输出一个路程计费的信号。(5)等待状态模块:等待信号作用时,该模块可以记录等待的时间,并产生等待计费的信号。(6)按行驶里程计费,起步价为7.00元,并在车行3公里后按2.2

9、0元/km计费,当计数器达到或超过20元时,每公里加收50%的车费,即按3.30元/km计费。(7)输出控制模块:分时输出里程、等待时间、费用三个信号,实现动态显示功能。(8)译码模块:实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。4.各单元模块设计,仿真结果及分析本系统采用层次化、模块化的设计方法,设计顺序为自下向上。首先实现系统框图中的各子模块,然后由顶层模块调用各子模块来完成整个系统。4.1分频模块:4.1.1分频模块的框图图3.1.1分频器的实体图此模块的功能是对总的时钟进行分频,总的时钟是50M。计数分频器使用五个这样基本的分频器(35分频)组合而成,

10、控制模块分频器使用三个这样基本的分频器(35分频)组合而成。4.1.2分频模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY PULSE IS PORT(CLK0:IN STD_LOGIC; FOUT:OUT STD_LOGIC);END PULSE;ARCHITECTURE ONE OF PULSE ISBEGIN PROCESS(CLK0) VARIABLE CNT:STD_LOGIC_VECTOR(2 DOWNTO 0); VARIABLE FULL :STD_L

11、OGIC; BEGIN IF CLK0EVENT AND CLK0=1 THEN IF CNT=100 THEN CNT:=000 ; FULL:=1; ELSE CNT:=CNT+1; FULL:=0; END IF; END IF;FOUT=FULL;END PROCESS;END ONE;4.1.3仿真的结果 图3.1.2仿真图从该波形图可以看出输入脉冲的频率是输出脉冲的频率的35倍。4.2计程模块:4.2.1计程模块的框图: 图3.1.3集程模块图此模块的功能是计算出租车行驶的路程。在出租车启动并行驶的过程中(开始/结束信号SS为1,行驶/等待信号WR为1),当时钟clks是上升沿的时

12、候,系统即对路程计数器JC的里程计数器进行加计数,当路程超过三公里时,系统将输出标志正脉冲LCJFBZ。4.2.2计程模块的VHDL程序(1) 计程程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity JC is port(clks,SS,WR:in std_logic; LC:BUFFER std_logic_vector(7 downto 0); end entity JC;architecture one of JC is SIGNAL Q1,Q0:std_logic_vecto

13、r(3 downto 0);beginprocess(clks,SS,WR,LC) VARIABLE SW:STD_LOGIC_VECTOR(1 DOWNTO 0); begin SW:=SS≀ IF SW=00 OR SW=01 THEN Q1=0000;Q0=0000; ELSIF SW=11 THEN Q1=Q1;Q0=Q0; ELSIF CLKSEVENT AND CLKS=1 THEN IF Q1=9 AND Q0=9 THEN Q1=0000;Q0=0000; ELSIF Q0=9 THEN Q1=Q1+1;Q0=0000; ELSE Q1=Q1;Q0=Q0+1; END I

14、F; END IF;END PROCESS;(2) 计程标志程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity LCJFBZ is port(SS:in std_logic; -SS开始/复位信号, LC:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LCJFBZ:OUT std_logic); end entity LCJFBZ;architecture TWO of LCJFBZ is BEGIN PROCESS(SS,LC) BEGIN IF SS=0 OR

15、 (LC(7 DOWNTO 4)=0000 AND LC(3 DOWNTO 0)4) THEN LCJFBZ=0; ELSE LCJFBZ=1; END IF; END PROCESS;END TWO;4.2.3计程模块仿真结果:图3.1.4计程模块仿真图从波形图可以看出在时钟的控制下当SS为低电平的时候LC为零,当SS为高电平且WR为高电平的时候LC开始计数,当计到大于三的时候输出了LCJFBZ为高电平。4.3计时模块:4.3.1计时模块的框图: 图3.1.5计时模块图此模块用于计算停车等待的时间。在出租车行进中,如果车辆停止等待,计数器则在信号clk的上升沿进行加计数,当累计等待时间超过2

16、(不包括2分钟)分钟时,输出标志DDJFBZ正脉冲信号。4.3.2计时模块的VHDL程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DDZT IS PORT(CLK,SS:IN STD_LOGIC; DDBZ:IN STD_LOGIC; DDJFBZ:OUT STD_LOGIC; DDSJ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY DDZT;ARCHITECTURE ONE OF DDZT ISBEGIN PROCESS(CLK,S

17、S,DDBZ) VARIABLE Q1,Q0: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF SS=0 THEN Q1:=0000;Q0:=0000;DDJFBZ0 OR Q03) THEN DDJFBZ=1; END IF; END IF; END IF; DDSJ(7 DOWNTO 4)=Q1;DDSJ(3 DOWNTO 0)0); SOUT:=(others=0); for i in 0 to 1 loop -0-1的循环 SA(i) := (0 & AIN(i*4+3 downto i*4)+(0 & BIN(i*4+3 downto i*4)+(000

18、0 & CI(i); if (SA(i)(4)=1) or (SA(i)(3 downto 0)9) then SB(i) := SA(i) + 00110; else SB(i) := SA(i); end if; CI(i+1) := SB(i)(4); SOUT(i*4+4 downto i*4):=SB(i); end loop; RETURN SOUT;END FUNCTION bcd_add8;END;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;USE WORK.PACKEXP1.

19、ALL;ENTITY JF is PORT( SS:IN STD_LOGIC; -开始/停止信号,低电平停止,高电平开始 DN:IN STD_LOGIC; -白天黑夜控制,高电平夜间,低电平白天 LC:IN std_logic_vector(7 downto 0); - 路程 DDSJ:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -等待时间 LCJFBZ:IN STD_LOGIC; -路程计费标志 DDJFBZ:IN STD_LOGIC; -等待计费标志,高电平时等待开始计费,低电平不计费 FY:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -总费用

20、END ENTITY JF;architecture ONE of JF is BEGIN - 讨论白天/黑夜?路程计费?等待计费? PROCESS(SS,DN,LC,DDSJ,DDJFBZ,LCJFBZ) VARIABLE FY1 :STD_LOGIC_VECTOR(11 DOWNTO 0); BEGIN IF SS=0 THEN FY1:=000000000000; ELSIF DN=0 THEN -白天时 IF LCJFBZ=0 THEN -起始价 FY1(11 DOWNTO 4):=(OTHERS=0); -9 FY1(3 DOWNTO 0):=1001; ELSE -加收路程费 FY

21、1:=bcd_add8(LC,LC); FY1:=bcd_add8(FY1,LC); -多一个脉冲加收3,则变成LC*3 END IF; ELSIF LCJFBZ=0 THEN -起始价 FY1(11 DOWNTO 5):=(OTHERS=0); FY1(4 DOWNTO 0):=10010; -12 ELSE FY1:=bcd_add8(LC,LC); FY1:=bcd_add8(FY1,LC); FY1:=bcd_add8(FY1,LC); -每一个脉冲加收4,则变成LC*4 END IF; IF DN=0 THEN -白天时 IF DDJFBZ=0 THEN -未到等待收费时间 FY1:

22、=FY1; -不加收 ELSE -加收路程费 FY1:=bcd_add8(FY1,DDSJ); FY1:=bcd_add8(FY1,DDSJ); -一超过等待收费时间,就立即加收等待时的每个脉冲加2 END IF; ELSIF DDJFBZ=0 THEN -未到等待收费时间 FY1:=FY1; -不加收 ELSE -加收路程费 FY1:=bcd_add8(FY1,DDSJ); -一超过等待收费时间,就立即加收等待时的每个脉冲加1 END IF; FYdout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout0dout0dout0dou

23、t0dout0dout0dout0dout0dout0dout0dout0=0000000;end case;end process;end one;4.5.3数码管显示模块的仿真结果:3.2.1数码管显示模块仿真图4.6控制模块:4.6.1控制模块的框图: 图3.2.2控制模块图控制模块用于对数码管里程、时间、费用显示的选择,起到位选的作用,实现了数码管动态显示,节省了芯片的资源。4.6.2控制模块的VHDL程序:(1)sel1模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity s

24、el1 is port(clk1:in std_logic; s1:out std_logic_vector(1 downto 0);end sel1;architecture sel_arc of sel1 isbegin process(clk1) variable cnt:std_logic_vector(1 downto 0);begin if clk1event and clk1=1 then IF cnt=10 then cnt:=00; else cnt:=cnt+1; end if; end if;s1s2s2s2s2=ZZZ;end case;end process;end

25、bbb_arc;4.6.3控制模块的仿真结果:(1)sel1模块(2)sel2模块从波形图可以看出当片选信号是00时,输出选择记程输出。当片选信号是01时,输出选择记费输出。当片选信号是10时,输出选择等到时间输出。5.顶层模块设计,仿真结果各模块设计仿真实现后,可分别创建成元件符号。顶层就是将各分模块用VHDL语言或者是图形方法连接起来,便可实现系统电路。5.1顶层模块的VHDL程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;ent

26、ity czc isport(clk,wr,ss,dn:in std_logic; dnpd:out std_logic; shuc1,shuc0:out std_logic_vector(6 downto 0); weix:out std_logic_vector(2 downto 0);end entity czc;architecture one of czc iscomponent bzPORT(AJ:IN STD_LOGIC; BZ:OUT STD_LOGIC);end component;component pulse PORT(CLK0:IN STD_LOGIC; FOUT:OU

27、T STD_LOGIC);end component;component ddzt PORT(CLK,SS:IN STD_LOGIC; DDBZ:IN STD_LOGIC; DDJFBZ:OUT STD_LOGIC; DDSJ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);end component;component jcport(clks,SS,WR:in std_logic; LC:BUFFER std_logic_vector(7 downto 0);end component;component lcjfbzport(SS:in std_logic; LC:IN

28、STD_LOGIC_VECTOR(7 DOWNTO 0); LCJFBZ:OUT std_logic); end component;component jf PORT( SS:IN STD_LOGIC; DN:IN STD_LOGIC; LC:IN std_logic_vector(7 downto 0); DDSJ:IN STD_LOGIC_VECTOR(7 DOWNTO 0); LCJFBZ:IN STD_LOGIC; DDJFBZ:IN STD_LOGIC; FY:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); end component;component ymq

29、port(din:in std_logic_vector(7 downto 0); dout1:out std_logic_vector(6 downto 0); dout0:out std_logic_vector(6 downto 0);end component;component xzscport(jc,jf,wt:in std_logic_vector(7 downto 0);sel:in std_logic_vector(1 downto 0);q:out std_logic_vector(7 downto 0);end component;component sel1port(c

30、lk1:in std_logic;s1:out std_logic_vector(1 downto 0);end component;component sel2port(sel2:in std_logic_vector(1 downto 0);s2:out std_logic_vector(2 downto 0);end component;signal a,b,c,d,e,f,i,j,m,n:std_logic;signal x,y,z,W:std_logic_vector(7 downto 0);signal k:std_logic_vector(1 downto 0); begindn

31、pddn,bz=a);u2:bz port map(aj=ss,bz=b);u3:bz port map(aj=wr,bz=c);u4:pulse port map(clk0=clk,fout=d);u5:pulse port map(clk0=d,fout=i);u6:pulse port map(clk0=i,fout=j);u7:pulse port map(clk0=j,fout=m);u8:pulse port map(clk0=m,fout=n);u9:jc port map(clks=n,ss=b,wr=c,lc=z);u10:ddzt port map(clk=n,ss=b,ddbz=c,ddjfbz=f,ddsj=y);u11:lcjfbz port map(ss=b,lc=z,lcjfbz=e);u12:jf port map(ss=b,dn=a,lc=z,ddsj=y,lcjfbz=e,ddjfbz=f,fy=x);u13:xzsc port map(jf=x,jc=z,wt=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1