数字电路课程设计报告出租车计费器.doc

上传人:文库蛋蛋多 文档编号:4137485 上传时间:2023-04-07 格式:DOC 页数:33 大小:9.05MB
返回 下载 相关 举报
数字电路课程设计报告出租车计费器.doc_第1页
第1页 / 共33页
数字电路课程设计报告出租车计费器.doc_第2页
第2页 / 共33页
数字电路课程设计报告出租车计费器.doc_第3页
第3页 / 共33页
数字电路课程设计报告出租车计费器.doc_第4页
第4页 / 共33页
数字电路课程设计报告出租车计费器.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《数字电路课程设计报告出租车计费器.doc》由会员分享,可在线阅读,更多相关《数字电路课程设计报告出租车计费器.doc(33页珍藏版)》请在三一办公上搜索。

1、 JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 数字电路课程设计报告出租车计费器 学院名称: 电气信息工程学院 专 业: 通信工程 班 级: 08测控2班 姓 名: 胡钟艺 学 号: 08314229 指导教师姓名: 宋伟 翟丽芳 2010 年 12 月出租车计费器序 言随着当代电子信息技术的发展,自动计费器被广泛的用于各个系统,例如上网自动计费系统、电话计费器、出租车计费器等等。可见自动计费系统在我们的生活中是越来越重要,本次课程设计是围绕出租车计费器来深入了解计费器是怎样实现计费的。本课题是利用VHDL语言来实现计费功能的,VHDL具有与具体硬件电路无

2、关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力,因此选用VHDL语言进行编程。本次课程设计巩固和运用了所学课程,通过理论联系实际,提高了分析、解决计算机技术实际问题的独立工作能力,通过对一个出租车计费器的设计,进一步加深了对计算机原理以及数字电路应用技术方面的了解与认识,进一步熟悉了数字电路系统设计、制作与调试的方法和步骤。进一步了解了计算机组成原理与系统结构,使自己对EDA技术的学习更深入,学会用VHDL语言去控制将会使我们对本专业知识可以更好地掌握。出租车计费器就是对车轮传感器送来的脉冲进行计数(每

3、转一圈送一个脉冲),本课程设计利用555触发电路产生的脉冲代替车轮传感器送来的脉冲。当计费系统接收到一个脉冲信号, 它将会实现计数的功能,并且通过外围的电路把所实现的功能实现出来。本论文共分5章和2个附录,第1章介绍了EDA与QuartusII开发系统。第2章介绍出租车计费系统的原理和方案设计第3章介绍了软件设计。第4章介绍了硬件设计。第5章介绍了总的设计以及其结果。本课题的主要设计工作内容是能够显示出租车的车费和里程并完成安装与调试。第一章 EDA与QuartusII开发系统简介1.1 EDA发展概况电子设计技术的核心就是EDA技术,EDA是指以计算机为工作台,融合应用电子技术、计算机技术、

4、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。EDA技术已有30年的发展历程,大致可分为三个阶段。70年代为计算机辅助设计(CAD)阶段,人们开始用计算机辅助进行IC版图编辑、PCB布局布线,取代了手工操作。80年代为计算机辅助工程(CAE)阶段。与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。90年代为电子系统设计自动化(EDA)阶段。 中国EDA市场已

5、渐趋成熟,不过大部分设计工程师面向的是PC主板和小型ASIC领域,仅有小部分(约11%)的设计人员开发复杂的片上系统器件。为了与台湾和美国的设计工程师形成更有力的竞争,中国的设计队伍有必要购入一些最新的EDA技术。 在EDA软件开发方面,目前主要集中在美国。但各国也正在努力开发相应的工具。日本、韩国都有ASIC设计工具,但不对外开放 。中国华大集成电路设计中心,也提供IC设计软件,但性能不是很强。相信在不久的将来会有更多更好的设计工具有各地开花并结果。据最新统计显示,中国和印度正在成为电子设计自动化领域发展最快的两个市场,年复合增长率分别达到了50%和30%。 EDA技术发展迅猛,完全可以用日

6、新月异来描述。EDA技术的应用广泛,现在已涉及到各行各业。EDA水平不断提高,设计工具趋于完美的地步。EDA市场日趋成熟,但我国的研发水平还很有限,需迎头赶上。1.2 硬件描述语言VHDL1.2.1 VHDL简介是一种全方位的硬件描述语言,包括系统行为级。寄存器传输级和逻辑门多个设计层次,支持结构、数据流和行为三种描述形式的混合描述,因此几乎覆盖了以往各种硬件俄语言的功能,整个自顶向下或由下向上的电路设计过程都可以用来完成。还具有以下优点:()的宽范围描述能力使它成为高层进设计的核心,将设计人员的工作重心提高到了系统功能的实现与调试,而花较少的精力于物理实现。可以用简洁明确的代码描述来进行复杂

7、控制逻辑设计,灵活且方便,而且也便于设计结果的交流、保存和重用。()的设计不依赖于特定的器件,方便了工艺的转换。()是一个标准语言,为众多的厂商支持,因此移植性好。1.2.2 VHDL的设计流程从系统总体要求出发,自上而下地逐步将设计的内容细化,最后完成系统硬件的整体设计。在设计的过程中,对系统自上而下分成三个层次进行设计:第一层次是行为描述。所谓行为描述,实质上就是对整个系统的数学模型的描述。一般来说,对系统进行行为描述的目的是试图在系统设计的初始阶段,通过对系统行为描述的仿真来发现设计中存在的问题。在行为描述阶段,并不真正考虑其实际的操作和算法用何种方法来实现,而是考虑系统的结构及其工作的

8、过程是否能到达系统设计的要求。第二层次是RTL方式描述。这一层次称为寄存器传输描述(又称数据流描述)。如前所述,用行为方式描述的系统结构的程序,其抽象程度高,是很难直接映射到具体逻辑元件结构的。要想得到硬件的具体实现,必须将行为方式描述的VHDL语言程序改写为RTL方式描述的VHDL语言程序。也就是说,系统采用RTL方式描述,才能导出系统的逻辑表达式,才能进行逻辑综合。第三层次是逻辑综合。即利用逻辑综合工具,将RTL方式描述的程序转换成用基本逻辑元件表示的文件(门级网络表)。此时,如果需要,可将逻辑综合的结果以逻辑原理图的方式输出。此后可对综合的结果在门电路级上进行仿真,并检查其时序关系。应用

9、逻辑综合工具产生的门网络表,将其转换成PLD的编程码,即可利用PLD实现硬件电路的设计。由自上而下的设计过程可知,从总体行为设计开始到最终的逻辑综合,每一步都要进行仿真检查,这样有利于尽早发现设计中存在的问题,从而可以大大缩短系统的设计周期。 1.3 Quartus 的软件操作流程双击桌面上,打开Quartus软件。(1) 新建VHDL文件 ,开始编写VHDL程序。(2) 保存VHDL文件,文件取名要与程序实体名要一致。(3) 创建新工程按下“保存”按纽后会出现如下提示。提示是否为此文件建立一个工程,这很重要。然后点击“是”,出现以下窗口,点“Next ”。(4) 器件的选择继续点“Next

10、”。然后选择FPGA或CPLD的有关参数,这些参数都是根据目标芯片来选择的。一直到“Finish”完成器件选择(5) 编译编译:选择processing菜单中的start compilation命令。编译完成的提示如下,点击确定即可。(6) 仿真这时可以进行仿真,首先要建立波形文件,点“File-New-”,出现如下窗口:选择“Other Files”最下面的“Vector waveform File”点“OK”。出现以下窗口。双击左边的空白处,设定输入输出信号。设定好波形后,保存波形。之后点进行仿真。(7) 锁定引脚引脚锁定,如下图操作:引脚的锁定是根据不同的电路和不同功能来确定的,不是一层

11、不变的。选择Assignments菜单下的Pins命令,出现以下窗口,如果是下载到实验箱上则需连续按“模式选择”按钮选择模式5,再按“系统复位”按钮。进行引脚锁定,查阅附表,分别点“location”选择引脚号。引脚锁定后再编译。如同此前进行过的。编译成功后点确定。(8) 下载选择Tools菜单下的Programmer命令,然后在Program/Configure下打上钩选中,点“start”按钮开始下载,“Progress”进度条显示下载进度。成功下载后如图所示:下载完后就可以在实验箱查看结果。 通过上面的步骤分别下载到实验箱中和FPGA中,验证了在仿真中的结果是正确的。第二章 课题概述2.

12、1 出租车计费系统的实验任务及要求1. 能实现计费功能,计费标准为:按行驶里程收费,分为白天和黑夜。白天收费标准:起步费为12.00元,超过3公里按4元/公里,车暂停超过三分钟按2元/分钟计算。黑夜收费标准:起步费为15.00元,超过3公里按5元/公里,车暂停超过三分钟按1元/分钟计算。2. 实现预置功能:能预置起步费、每公里收费、车行加费里程、等待加费时间。3. 实现模拟功能:能模拟汽车启动、停止/白天、黑夜/等待、行驶状态。4. 设计动态扫描电路:将车费、里程、等待时间动态的显示出来。5. 用VHDL语言设计符合上述功能要求的出租车计费器,并用层次化设计方法设计该电路。6. 各计数器的计数

13、状态用功能仿真的方法验证,并通过有关波形确认电路设计是否正确。2.2、出租车计费系统的原理和方案设计系统的顶层框图:动态显示模块控制芯片信号输入 信号输入:各种控制脉冲信号经输入端给控制芯片。控制芯片:采用的是FPGA。动态显示电路:采用的是数码管来实现功能的输出。2.3、具体的方案设计2.3.1、硬件电路方案设计以下为硬件电路的结构简图:开关电路FPGA模块动态显示电路PC机下载电路各模块的组成和原理:(1)下载电路模块此模块主要由下载线组成。作用:使PC机中编写的VHDL语言的程序下载到FPGA芯片中,使电路实现所需的功能。(2)开关模块:该模块的作用是用于电路的输入的信号。主要有三个开关

14、以及三个限流电阻,电源构成。(3)动态显示模块: 此模块由六个数码管和三个二极管所构成,17个200电阻起到限制电流的作用,使得流到数码管的电流适当,防止数码管中的电流过大,而使得数码管损坏。数码管将计费、等待时间和里程动态的显示出来。2.3.2 软件方案设计以下为软件结构简图:输入信号分频器里程计数模块车费计数模块车行驶状态译码模块输出控制模块各模块的功能:1)由FPGA晶振电路产生50MHz时钟信号并输入。2)分频器:将时钟信号进行分频。3)标志模块:将按钮产生的脉冲转化为一种标志信号。4)计程模块:在等待信号未作用时,来一个时钟脉冲信号,里程值加1。该模块还包含一个路程计费标志的小模块,

15、输出一个路程计费的信号。5)等待状态模块:等待信号作用时,该模块可以记录等待的时间,并产生等待计费的信号。6)车费计数模块:按行驶里程收费,分为白天和黑夜。白天收费标准:起步费为12.00元,超过3公里按4元/公里,车暂停超过三分钟按2元/分钟计算。黑夜收费标准:起步费为15.00元,超过3公里按5元/公里,车暂停超过三分钟按1元/分钟计算。7)输出控制模块:分时输出里程、等待时间、费用三个信号,实现动态显示功能。8)译码模块:实现将车费计数模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。第三章 硬件电路根据前面第一章所提到的硬件电路的方案设计,这章介绍各模块的具体设计。下载电

16、路通过编程器(programmer)将布局布线后的配置文件下载至FPGA中,对其硬件进行编程。配置文件一般为.pof或.sof文件格式。图3-2 电缆3.3按钮电路它的作用是提供输入信号。拨码开关的3个引脚FPGA芯片的引脚上。根据拨码开关的高低电平来实现模拟汽车的相应的转态,如开始、计时、白天/黑夜。SS:开始、停止开关。当按下SS按钮时,计费器开始工作,再次按下后清零等待时间、路程和费用。DN:白天、黑夜开关。初始状态为白天的计费规则,当按下DN后变为黑夜的计费规则,再次按下重复以上规则。 WR:等待、行驶开关。当按下WR按钮后,进入等待状态,再次按下,计费器又恢复行驶状态,重复按此按钮,

17、重复以上功能。3.4动态显示电路 该电路用六个数码管所组成,其中两个数码管实现将车费动态的显示出来。其动态的显示范围为0到99元;还有两个数码管实现将汽车行驶的里程动态的显示出来,其动态的显示范围为0到99公里;最后两个数码管讲汽车的等待时间显示出来,其动态显示范围为0到99分钟。第四章 计费系统的VHDL设计在本设计中采用的是自顶向下的设计方法,首先从系统功能设计开始,对系统高层模块进行行为描述和功能仿真.系统的功能验证完成后,将抽象的高层设计自顶向下逐级细化,直到与所用可编程逻辑器件相对应的逻辑描述。在本设计中,具有5个模块:1)分频器:将时钟信号进行分频。2)标志模块:将按钮产生的脉冲转

18、化为一种标志信号。3)计程模块:在等待信号未作用时,来一个时钟脉冲信号,里程值加1。该模块还包含一个路程计费标志的小模块,输出一个路程计费的信号。4)等待状态模块:等待信号作用时,该模块可以记录等待的时间,并产生等待计费的信号。5)车费计数模块:按行驶里程收费,分为白天和黑夜。白天收费标准:起步费为12.00元,超过3公里按4元/公里,车暂停超过三分钟按2元/分钟计算。黑夜收费标准:起步费为15.00元,超过3公里按5元/公里,车暂停超过三分钟按1元/分钟计算。6)控制输出模块:实现将里程信号、等待时间信号、费用信号分时选择输出,同时输出控制信号使电路实现动态显示。7)译码模块:实现将车费计数

19、模块、等待状态模块和里程计数模块输出的BCD码转换成七段码输出。下面具体介绍各个部分的设计。一、分频器(1)实物图图4.1分频器的实体图CLK0:输入FPGA晶振脉冲信号FOUT:输出脉冲(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) VA

20、RIABLE CNT:STD_LOGIC_VECTOR(5 DOWNTO 0); VARIABLE FULL :STD_LOGIC; BEGIN IF CLK0EVENT AND CLK0=1 THEN IF CNT=100010 THEN CNT:=000000 ; FULL:=1; ELSE CNT:=CNT+1; FULL:=0; END IF; END IF;FOUT=FULL;END PROCESS;END ONE;(3)波形仿真从该波形图可以看出输入脉冲的频率是输出脉冲的频率的五倍。4.2标志模块(1)实物图图4.2标志模块的实体图AJ:输入的按键信号BZ:输出的标志信号(2)标志

21、模块的VHDL设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY BZ IS PORT(AJ:IN STD_LOGIC; BZ:OUT STD_LOGIC);END BZ;ARCHITECTURE TWO OF BZ IS BEGIN PROCESS(AJ) VARIABLE CNT:STD_LOGIC_VECTOR(9 DOWNTO 0); BEGIN IF AJ=0 AND AJEVENT THEN IF CNT=1111111111 THEN CNT:=0000000000;

22、ELSE CNT:=CNT+1; END IF; END IF; BZ=CNT(0); END PROCESS;END TWO;(3)波形仿真从该波形图可以看出在输入的按键信号下降沿来临时输出的标志信号取反,且刚开始为低电平。4.3等待状态模块(1)实物图图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:OU

23、T STD_LOGIC; DDSJ:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY DDZT;ARCHITECTURE ONE OF DDZT ISBEGIN PROCESS(CLK,SS,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)=Q0;E

24、ND PROCESS;END ONE;(3)波形仿真等待标志有效时,等待时间开始计数。等待时间超过3时等待计费标志置高电平。由于设计时只用两个数码管显示,所以只能显示到99,在程序中设置了让等待时间到达99后变为0。从上面的说明可以看出程序达到了所设计的功能。4.4计程模块(1)实物图图4.4.1计程模块的实体图图4.4.2路程计费标志的实物图(2)计程模块的VHDL设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity JC is port(clks,SS,WR:in std_logi

25、c; LC:BUFFER std_logic_vector(7 downto 0); end entity JC;architecture one of JC is SIGNAL Q1,Q0:std_logic_vector(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 AN

26、D 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 IF; END IF;END PROCESS;LC(7 DOWNTO 4)=Q1;LC(3 DOWNTO 0)=Q0;END one;路程计费标志模块的VHDL设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity LCJFBZ is port(SS:in std_log

27、ic; 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 (LC(7 DOWNTO 4)=0000 AND LC(3 DOWNTO 0)4) THEN LCJFBZ=0; ELSE LCJFBZ0); SOUT:=(others=0); for i in 0 to 1 loop -0-1的循环 SA(i) := (0 & AIN(i*4+3 downto i

28、*4)+(0 & BIN(i*4+3 downto i*4)+(0000 & 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_LO

29、GIC_UNSIGNED.ALL;USE WORK.PACKEXP1.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

30、 STD_LOGIC_VECTOR(7 DOWNTO 0); -总费用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 5):=(OTHERS=0); -12 F

31、Y1(4 DOWNTO 0):=10010; ELSE -加收路程费 FY1:=bcd_add8(LC,LC); FY1:=bcd_add8(FY1,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):=10101; -15 ELSE FY1:=bcd_add8(LC,LC); FY1:=bcd_add8(FY1,LC); FY1:=bcd_add8(FY1,LC); FY1:=bcd_add8(F

32、Y1,LC); -每一个脉冲加收4,则变成LC*4 END IF; IF DN=0 THEN -白天时 IF DDJFBZ=0 THEN -未到等待收费时间 FY1:=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); - 一超过等待收费时间,就立即加收等待时的每个脉冲加

33、1 END IF; FYqqqq=ZZZ;end case;end process;end bbb_arc;(3)波形仿真七、动态显示控制模块(1)实体图(2)译码模块的VHDL设计library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sel is port(clk:in std_logic; q:out std_logic_vector(1 downto 0);end sel;architecture sel_arc of sel isbegin process(clk) variable cnt:std_logic_vector(1 downto 0);begin if clkevent and clk=1 then IF cnt=10 then cnt:=00; else cnt:=cnt+1; end if; end if;qdout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout1dout0dout0dout0dout0dout0=0110011; when 0101

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号