职场文秘网

首页 > 演讲范文 > 主持词 / 正文

eda课程设计vhdl语言的简易出租车计费器设计

2020-12-22 00:07:45

XX 学 院 《EDA技术》课 程 设 计 题 目 简易出租车计费器设计 系 (部) 信息工程系 班 级 电本班 姓 名 学 号 指导教师 20XX年 7 月 6 日至 7 月 12 日 共 1 周 20XX年 7 月 8 日 课程设计成绩评定表 出勤 情况 出勤天数 缺勤天数 成 绩 评 定 出勤情况及设计过程表现(20分) 课设答辩(20分) 设计成果(60分) 硬件调试 设计说明书 总成绩(100分) 提问 (答辩) 问题 情况 综 合 评 定 指导教师签名:
年 月 日 目录 1 引言 1 2 计费器的设计 2 2.1 设计内容 2 2.2设计要求 2 2.3 设计原理 2 2.4 各模块的设计 3 2.4.1 分频模块 3 2.4.2 计程模块 4 2.4.3 计费模块 4 2.4.4 顶层模块 5 3 仿真 6 4 引脚的锁定 7 5总结 8 参考文献 9 附录 10 1 引言 出租车计费器是出租车营运收费的智能化仪表,是使出租车市场规范化、标准化的重要设备。一种功能完备,简单易用,计量准确的出租车计价器是加强出租车行业管理,提高服务质量的必需品。在科技高度发展的今天,集成电路和计算机应用得到了高速发展。本设计就采用VHDL描述语言,设计出租车计价系统的软件结构,通过QuartusⅡ9.0软件下进行仿真,再在试验箱进行硬件仿真,实现了模拟的简易的出租车计费器。

编写程序所用的VHDL语言全名为Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE-1076(简称87版)之后,各EDA公司相继推出自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,简称93版。VHDL和Verilog作为IEEE的工业标准硬件描述语言,得到众多EDA公司支持,在电子工程领域,已成为事实上的通用硬件描述语言。

对程序进行编译及仿真用到的的QuartusⅡ9.0软件是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

QuartusⅡ9.0可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;
芯片平面布局连线编辑;
完备的电路功能仿真与时序逻辑仿真工具;
定时/时序分析与关键路径延时分析;
可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;
自动定位编译错误;
此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。

2 计费器的设计 2.1 设计内容 (1)设计一个简易的出租车计费系统,实现计价功能,计费标准为按行程里程收费,起步价为6.00元,当里程小于3公里时,按照起价计费,车行超过3公里后在按1.2元/公里收费。

(2)实现车辆行驶的模拟:能模拟汽车的启动,停止,暂停等状态。

(3)计费器显示部分设计:用LED数码管实时显示车费和汽车行驶里程,用两位数字显示汽车行驶里程,显示方式为“XX”,单位为km。计程范围为0—99km,计程分辨率为1km;
用四位数字显示总费用,显示方式为“XX.X”,单价为元。计价范围为0—99.9元,计价分辨率为0.1元。

(4)此计费器要设有一个由司机控制的整体复位控制,设定车轮转一圈输出一个脉冲,100个脉冲对应1公里。

2.2设计要求 (1)根据任务要求确定电路各功能模块 (2)写出设计程序 (3)给出时序仿真结果 (4)实现硬件调试 2.3 设计原理 设计系统的输入信号:时钟脉冲clk,开始计费信号start,复位信号rst,暂停信号stop。输出信号:显示总费用cost0 ~cost3,显示计程km0和km1。设计两个脉冲cost_clk和mile_clk,其中cost_clk通过分频模块分成8个clk上升沿的脉冲,用来计费,mile_clk是96个clk上升沿的脉冲,用来计程。两个控制输入开关start、stop;
控制过程为:start作为计费开始开关,当start为高电平时,stop为低电平时,系统开始根据输入的情况计费。当出租车开始行驶时,mile_clk脉冲到来,进行行驶计程;
如果行驶路程小于3公里,则费用显示为起步价6.00元,如果行程大于3公里,则cost_clk开始工作,每来一脉冲则加在起步价上加0.1元。如需停车等待,就把stop变为高电平,恢复行驶时,把stop变为低电平,继续计程与计费。当按下rst键,计程与计费显示都清零。

该设计有三个模块:分频模块、计程模块、计费模块。

系统结构框图如图2-1所示:
图2-1 2.4 各模块的设计 2.4.1 分频模块 为方便计费和计程,需要对clk脉冲进行分频。因为计费是1.2元每公里,所以0.1元约为83.3米,设计要求一个脉冲是10米,所以把cost_clk分频成每8个clk上升沿对应一个cost_clk上升沿;
mile_clk分频成每96个clk上升沿对应一个mile_clk上升沿。

系统模块图2-2如下:
图2-2 2.4.2 计程模块 计程模块的功能是计算并输出出租车行驶公里数,及输出使能信号en来表示是否大于三公里。

当计费信号start为高电平且复位信号rst为低电平时,mile_clk每来一个上升沿,计程器低位k0就加1,当k0满9时,进位,高位k1加1,k0清零,k1满9清零,因此计程器的计程范围是0~99km,满量程后自动归零。当行驶里程大于3km时,使能信号en变为高电平,小于3km时en为低电平。stop为暂停信号,当stop为高电平时,计量模块停止计数并显示当前里程数。

系统模块图2-3如下:
图2-3 2.4.3 计费模块 计费模块的功能是根据前两个模块的输出,根据公里数是否大于3公里,分别计费。

定义c2、c1、c0分别表示费用的十元、元、角的输出。当en为低电平即行程在3公里以内时,c2c1c0显示为0000 0110 0000,代表起步价6.0元;
当en为高电平即行程超过3公里时,超过的里程按1.2元每公里计费,每来一个cost_clk上升沿,c2c1c0在6.0元的基础上以0.1元为基数进行累加。当暂停信号stop为高电平时,c2c1c0停止计费,并显示当前费用。最后把c2c1c0信号给cost2~cost0,送至数码管译码显示。

系统模块图2-4如下:
图2-4 2.4.4 顶层模块 将以上三个模块按设计要求组合在一起,连接各个原件的输入和输出,得到顶层模块。

系统模块图2-5如下。

图2-5 3 仿真 程序编译成功后,进行仿真 仿真结果如图3-1 图3-1 当clk脉冲信号到来后,开始里程计数和行驶计费。当行驶里程小于3公里时,按起步价6.0元收费;
当行驶里程超过3公里,则超出里程按每千米1.2元计费。当stop为高电平时,里程计数和计费均停止,显示当前的里程数和最后的总费用。当rst为高电平时所有数值清零。

4 引脚的锁定 km1、km0和cost2、cost1、cost0为输出,分别表示行驶里程数和最后的总费用,用实验箱上的静态数码管显示。

clk为1Hz的脉冲信号,start、rst,stop分别表示开始计费,复位和暂停计费。

具体引脚锁定如图4-1:
图4-1 5总结 经过这次课设,我们学到的不仅是知识,更多的是团队和合作。它不仅仅让我们综合那些理论知识运用到设计和创新,还让我们知道了一个团队凝聚在一起时所能发挥的巨大潜能。

我们再次熟悉和增强了对VHDL语言的基本知识,熟悉利用VHDL语言对 常用的的组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来。VHDL硬件描述语言打破了硬件和软件设计人员之间互不干涉的界限,可以使用语言的形式来进行数字系统的硬件结构、行为的描述,直接设计数字电路硬件系统。通过编程、下载后,该芯片已经具备了原来需要使用复杂的数字电路实现的功能;
更加了解和加深了对编制和调试程序的技巧,进一步提高了上机动手能力,培养了使用设计综合电路的能力,养成了提供文档资料的习惯和规范编程的思想。在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在设计课程过程中遇到问题是很正常的,但应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

这次的课设,让我们把课本上所学到的知识,应用到实践中,使我们更加熟练的掌握了这些知识,对于以后的学习有很大的帮助。

参考文献 [1] 阎石,《数字电子技术基础》,高等教育出版社,2005 [2] Volei A. Pedroni ,《VHDL数字电路设计教程》,电子工业出版社,2010 [3] 潘松,黄继业,《EDA技术实用教程》,科学出版社,2010.6    [4] 刘江海,《EDA技术课程设计》,华中科技大学出版社,2009.5   [5] 毕满清,《电子技术实验与课程设计》,机械工业出版社,2009 [6] 焦素敏.《EDA应用技术》.清华大学出版社,2002.4  附录 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity che is port(clk:in std_logic; start:in std_logic; rst:in std_logic; stop:in std_logic; cost0,cost2:out std_logic_vector(3 downto 0); cost1:out std_logic_vector(7 downto 0); km0,km1:out std_logic_vector(3 downto 0)); end; architecture bhv of che is signal mile_clk,cost_clk:std_logic; signal c0,c1,c2:std_logic_vector(3 downto 0); signal k0,k1:std_logic_vector(3 downto 0); signal en0:std_logic; signal count1:integer range 0 to 8; begin U1:process( rst,clk,start) begin if rst='1' then mile_clk<='0'; elsif start='0'then mile_clk<='0'; elsif stop='1' then count1<=count1; elsif clk'event and clk='1' then count1<=count1+1; if count1=8 then count1<=0;mile_clk<='1'; else mile_clk<='0'; end if; end if; end process; U2:process(rst,start,mile_clk) variable k :integer range 0 to 12; begin if rst='1' then k0<=“0000“; k1<=“0000“; elsif start='0' then en0<='0'; elsif mile_clk'event and mile_clk='1' then k:=k+1; if k1 & k0>“00000011“ then en0<='1'; end if; if k=12 then k:=0; k0<=k0+'1'; if k0=“1001“ then k0<=“0000“; k1<=k1+'1'; if k1=“1001“ then k1<=“0000“; end if; end if; end if; end if; km0<=k0; km1<=k1; end process; cost_clk<= mile_clk when en0='1'else '0'; U3:process( rst,start,cost_clk,en0) begin if rst='1' then c0<=“0000“;c1<=“0000“; c2<=“0000“; elsif start='1'and en0='0'then c0<=“0000“;c1<=“0110“;c2<=“0000“; elsif start='1' and en0='1' then if cost_clk'event and cost_clk='1'then c0<=c0+'1'; if c0=“1001“then c0<=“0000“;c1<=c1+'1'; if c1=“1001“then c1<=“0000“;c2<=c2+'1'; if c2=“1001“then c2<=“0000“; end if; end if; end if; end if; end if; case c1 is when “0000“=>cost1<=“11111101“; when “0001“=>cost1<=“01100001“; when “0010“=>cost1<=“11011011“; when “0011“=>cost1<=“11110011“; when “0100“=>cost1<=“01100111“; when “0101“=>cost1<=“10110111“; when “0110“=>cost1<=“10111111“; when “0111“=>cost1<=“11100001“; when “1000“=>cost1<=“11111111“; when “1001“=>cost1<=“11110111“; when others=>null; end case; cost0<=c0; cost2<=c2; end process; end;

Tags: 出租车   简易   课程设计  

搜索
网站分类
标签列表