EDA技术 课程设计报告
课程设计题目: 出租车自动计费器
专 业:电子信息工程 班 级: 063141 学 号: 06314114 姓 名: sgz 指导教师: 黄 河
2009年11月11日
目录
课程设计内容及要求·······························2
系统原理图及说明·································3
软件流程图·······································4
基于VHDL和原理图的混合设计完成对各模块的编写·····5
课程设计小结·····································8
参考资料·········································8
2
一.设计内容与要求 出租车自动计费器
1、 设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四
位数码管显示总金额,最大值为99.99元;
2、 行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)均能通
过人工输入。
3、 行车里程的计费电路将汽车行驶的里程数转换成与之成正比的脉冲数,然后由计数译码
电路转换成收费金额,实验中以一个脉冲模拟汽车前进十米,则每100个脉冲表示1公里,然后用BCD码比例乘法器将里程脉冲乘以每公里单价的比例系数,比例系数可由开关预置。例如单价是1.0元/公里,则脉冲当量为0.01元/脉冲。 4、 用LED显示行驶公里数,两个数码管显示收费金额。
二.系统原理图及说明
2.1外围电路:
可以使用汽车的里程计数脉冲,也可以在车轮上加装电磁继电器,在每行驶一定里程发出一次脉冲。在本实验中假设每10米发出一次脉冲。时间信号可以通过电容电感振荡电路或晶体振荡电路产生分频取得。本实验中使通过实验箱的固定脉冲产生模块取得。 2.2计数器原理:
通过分别设计计程计费计时模块完成各自功能。 2.2.1计程模块原理
使用4位十进制计数器封装成为8位一百进制计数器。对于外部每10米的里程脉冲,经计数可以每km输出进位脉冲一次。再用一百进制计数器对其进行计数。通过对计数输出信号的译码可以得到里程显示。 2.2.2计时模块原理
使用1Hz的外部脉冲信号,使用5位60进制计数器。可以得到每分钟一次的脉冲输出。再使用一百进制计数器对其进行计数。通过对计数输出信号的译码可以得到时间显示。 2.2.3计费模块原理
计费模块是设计中的关键模块,也是最难的模块。逻辑复杂,要求多。
使用前两模块中的分钟信号作为时间输入,千米信号作为路程输入。使用2个特殊编写的
3
10进制计数器对时间和里程计数。并且在里程计数设置ENT输出,在计费小于5元是钳制角金额输出为零。但是角计费照常只是不显示。在金额超过5元时显示。再使用一十进制计数器进行十元计数。 2.2.4显示模块原理
通过使用74ls138和七段数码管进行显示和显示位选择。这要求输出使用3位输出为位选,对其译码得到数码管地址,7位数据在相应数码管上显示相应的数据。 2.3综合
通过VHDL和原理图的混合设计完成对各模块的编写,连接。
三.程序流程:
3.1数据流示意图 电写入程序,后由RST(清零)信号置低电平开始。分别控制计时和计程EN开始或停止计费。计程和计费中每km或分钟发一次脉冲给计费模块。这三个模块的数据处理信息通过总线输送到显示模块。进行译码。译码输出位选和七段数码管显示信息。由外围电路:74ls138和八位七段数码管显示。前3位金额后四位为里程和计时。中间一位为F,实际可以使用特殊的数码管显示元。
3.2设计图
1)计时模块是cnt60和其后的cnt100。在1Hz的时间脉冲来后先进行60进制计数,获得分
4
钟脉冲。分钟脉冲由100进制计数输出为2个4位2进制BCD码。接显示模块,得到计时(0-99分钟)。
2)计程模块是2个100进制计数器,输入的每10米一次脉冲经一次100进制计数获得每km一次的脉冲,由100进制计数输出为2个4位2进制BCD码。接显示模块,得到计程(0-99km)。
3)计费模块是经过封装的模块,输入由以上2模块获得的每分钟一次的脉冲和每千米一次的脉冲。经过内部特殊设计的计数器处理,在3km以内不对每千米脉冲计数,直接输出5的4位二进制BCD码,对于分钟脉冲在计费小于5元的时候由钳制信号,使之不显示计数,从而实现计费功能。计费模块输出为3个4位二进制BCD码。接显示模块得到计费(0-99.9元)。
4)显示模块输入计费、计时,计程数据总线通过扫描脉冲选择一个BCD码进行译码,每扫描一次进行一位显示。所以扫描脉冲适当取高一点。考虑视觉暂留25帧乘8得200Hz以上为好。实际实验中使用了5859Hz。
四.基于VHDL语言和原理图的混合设计完成对各模块的编写
4.1十进制计数器cnta.vhd
LIBRARY ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY cntA IS --clk 计数脉冲 --rst 高电平清零 --en 高电平使能 --dout4位输出 --cy 进位脉冲 PORT( clk,rst,en : IN STD_LOGIC; Dout : out STD_LOGIC_VECTOR(3 downto 0); cy : OUT STD_LOGIC); END cntA;
ARCHITECTURE a OF cntA IS BEGIN process(clk,rst,en) Variable Cqi :std_logic_vector(3 downto 0); --计数变量 begin
if rst='1'then Cqi:=(others=>'0'); elsif clk'event and clk='1' then if en='1' then if Cqi<\"1010\" then Cqi:=Cqi+1; else Cqi:=\"0001\"; end if; end if;
5
end if; if Cqi=\"1010\" then Cy<='1'; Dout<=\"0000\"; --十输出进位否则正常计数输出 else Cy<='0'; Dout<=Cqi; end if; end process; END a;
4.2特殊十进制计数器cntat.vhd
LIBRARY ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY cntAt IS --clk 计数脉冲 --rst 高电平清零 --en 高电平使能 --dout4位输出 --cy 进位脉冲 PORT( ent,clk,rst,en : IN STD_LOGIC; Dout : out STD_LOGIC_VECTOR(3 downto 0); cy : OUT STD_LOGIC); END cntAt;
ARCHITECTURE a OF cntAt IS BEGIN process(clk,rst,en,ent) Variable Cqi :std_logic_vector(3 downto 0); begin
if rst='1'then Cqi:=(others=>'0'); elsif clk'event and clk='1' then if en='1' then if Cqi<\"1010\" then Cqi:=Cqi+1; else Cqi:=\"0001\"; end if; end if; end if; if Cqi=\"1010\" then Cy<='1'; Dout<=\"0000\"; else Cy<='0'; Dout<=Cqi; end if;
6
if ent='0' then Dout<=\"0000\"; --ent是牵制输出在小于5元不显示但计数的信号引入 end if; end process; END a;
4.3 六十进制计数器cnt60.vhd
LIBRARY ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY cnt60 IS --clk 计数脉冲 --rst 高电平清零 --en 高电平使能 --dout 6位输出 --cy 进位脉冲 PORT( clk,rst,en : IN STD_LOGIC; Dout : out STD_LOGIC_VECTOR(5 downto 0); cy : OUT STD_LOGIC); END cnt60;
ARCHITECTURE a OF cnt60 IS BEGIN process(clk,rst,en) Variable Cqi :std_logic_vector(5 downto 0); --计数变量6位 begin
if rst='1'then Cqi:=(others=>'0'); elsif clk'event and clk='1' then if en='1' then if Cqi<\"111011\" then Cqi:=Cqi+1; else Cqi:=\"000001\"; end if; end if; end if; if Cqi=\"111011\" then Cy<='1'; --记50输出0和进位 Dout <=\"000000\"; else Cy<='0'; Dout<=Cqi; end if; end process; END a; ent<=en;
END PROCESS ; END a;
7
五.小结
在此次的计价器设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法.,此次课程设计设计一种基于CPLD的出租车计价系统。该系统硬件主要由CPLD芯片、车速传感器、外围芯片74LSI64和数码管组成;软件包括显示子程序、时钟子程序、计量子程序等几个子程序模块。该计价器通过四位数码管和三个按键,可以显示时间、单价、起步价、里程数,可以手动切换返程价、郊区价,可以自由修改时间、单价、起步价,可以实现夜间价、低速价的自动转换等功能。
可编程逻辑设计是近年来在电子设计领域中出现的新技术,它把复杂的数字系统转化为用一两个可编程逻辑器件即可实现的 “片上”系统,把系统的更新换代转化为简单的系统编程设计,把后期进行的系统调试转移到设计实现之前在计算机上进行的功能仿真和时序仿真。
复杂可编程逻辑器件CPLD是当今应用最广泛的可编程逻辑器件之一。CPLD的静态可重复编程和动态再系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改,这样就大大地提高了数字系统设计的灵活性和通用性。 通过查阅资料掌握和熟练了EDA技术 设计的方式,并通过VHDL语言与硬件连接设计而出。
六.参考资料
《EDA技术实用教程》(第二版) 潘松 黄继业 编著 ISBN 7-03-014790-1
http://www.mcudata.com/Webmaster/danpianjiyuanli/2009/0823/3552.html
8
东华理工大学长江学院 课程设计评分表
学生姓名: sgz 班级:063141 学号: 06314114 课程设计题目:出租车自动计费器 项目内容 满分 5 10 10 10 10 15 15 15 10 5 100 实 评 能结合所学课程知识、有一定的能力训练。符合选题要求 选 (3人一题) 题 工作量适中,难易度合理 能熟练应用所学知识,有一定查阅文献及运用文献资料能力 能 理论依据充分,数据准确,公式推导正确 力 水 能应用计算机软件进行编程、资料搜集录入、加工、排版、制平 图等 能体现创造性思维,或有独特见解 模型正确、合理,各项技术指标符合要求。 摘要叙述简练完整,假设合理、问题分析正确、数学用语准确、结论严谨合理;问题处理科学、条理分明、语言流畅、结构严谨、版面清晰 论文主要部分齐全、合理,符号统一、编号齐全。 格式、绘图、表格、插图等规范准确,符合论文要求 字数不少于2000字,不超过15000字 总 分 成 果 质 量 9
指导教师评语: 指导教师签名: 年 月 日
10
因篇幅问题不能全部显示,请点此查看更多更全内容