EDA出租车计价器实习报告.doc_第1页
EDA出租车计价器实习报告.doc_第2页
EDA出租车计价器实习报告.doc_第3页
EDA出租车计价器实习报告.doc_第4页
EDA出租车计价器实习报告.doc_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

EDA课程设计出租车计费器设计电子信息工程 电信0902班 李杰1 绪论1.1 课题任务随着我国社会经济的全面发展,各大中小城市的出租车营运事业发展迅速,出租车已经成为人们日常出行选择较为普通的交通工具。出租车计费器是出租车营运收费的专用智能化仪表室出租车市场规范化,标准化以及减少司机与乘客之间发生纠纷的重要设备。一种功能完备,简单易用,计量准确的出租车计费器是加强出租车行业管理,提高服务质量的必需品。本设计就是采用VHDL硬件描述语言作为设计手段,采用自己的设计思路,得到一种出租车计价系统的软件结构,通过Quartus II 8.1软件下进行仿真,证明所设计的电路系统完成了出租车计价的功能,各项指标符合设计要求,具有一定的实用性。1.2 Quartus II 简介Quartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。 功能Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括: 可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件; 芯片(电路)平面布局连线编辑; LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块; 功能强大的逻辑综合工具; 完备的电路功能仿真与时序逻辑仿真工具; 定时/时序分析与关键路径延时分析; 可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析; 支持软件源文件的添加和创建,并将它们链接起来生成编程文件; 使用组合编译方式可一次完成整体设计流程; 自动定位编译错误; 高效的期间编程与验证工具; 可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件; 能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。1.3 VHDL语言基础1.3.1 VHDL程序的总体结构一般而言,一个相对完整的VHDL语言程序(或称为设计实体)至少应三个基本组成部分:库(Library)、程序包(Package)使用说明;实体(Entity)说明;实体对应的结构体(Architecture)说明。其中,库、程序包使用说明用于打开(调用)本设计实体将要用到的库、程序包;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,允许含有一个或多个结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。图4-1显示出了VHDL程序设计中比较全面的组成结构。VHDL语言的总体结构一般是:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGN.ALL;ENTITY 实体名 IS 端口说明;END 实体名;ARCHITECTURE 构造体名 OF 实体名 IS定义语句内部信号、常数、数据类型、函数等的定义;BEGIN并行处理语句;END 构造体名;在程序开始的地方引用了IEEE库,3个USE语句使得调用该库的VHDL设计可以使用程序包STD_LOGIC_1164、STD_LOGIC_ARITH和STD_LOGIC_UNSIGNED中预定义的内容。STD_LOGIC_1164程序包,其中预定义的内容为STD_LOGIC,STD_LOGIC_VECTOR等数据类型,及一些数据类型的转换函数。STD_LOGIC_ARITH程序包,其中预定义的内容为有符号和无符号类型,以及基于这些类型的算术运算。STD_LOGIC_UNSIGNED程序包,其中预定义的内容为基于STD_LOGIC和STD_LOGIC_VECTOR的无符号的算术运算。由于在程序中最常用到的数据类型就是标准数据类型,所以一般都将以上的引用语句写在程序的最前面。这样在程序中就可以方便地对标准数据类型进行操作。1.3.2 实体设计概述实体(entity)是一个设计实体的表层设计单元,其功能是对这个设计实体与外部电路进行接口描述它规定了设计单元的输入输出接口信号和引脚,是设计实体与外界的一个通信界面。(1)实体语句结构实体说明单元的常用语句结构如下:entity 实体名 is generic(类属表); port(端口表);end entity 实体名;实体说明单元必须以语句“entity 实体名is”开始,以语句“end entity 实体名;”结束,其中的实体名是设计者自己给设计实体的命名,可供其他设计实体对其进行调用时使用(考虑到MAX+PLUSII要求源程序文件的名字与实体名必须一致,因此建议各个源程序文件的命名均与实体名一致)。中间在方括号内的语句描述,在特定的情况下并非时必须的。例如构建在VHDL仿真测试平台时就不需要方括号中的语句。(2)类属说明语句类属(generic)参量是一种端口界面常数,通常以一种说明的形式放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种静态信息通道,类属的值可以由设计实体外部提供。因此,设计者可以从外面通过类属参量的重新设定而方便地改变一个设计实体或一个元件的内部电路结构和规模,而不需要修改实体内部程序。类属说明的一般书写格式如下:generic(常数名;数据类型:设定值;常数名;数据类型:设定值);(3) 端口说明由port引导的端口说明语句是对于一个设计实体界面的说明。实体端口说明的一般书写格式如下:port(端口名:端口模式 数据类型;端口名:端口模式 数据类型);其中,端口名是设计者为实体的每一个对外通道所取得名字;端口模式是指这些通道上的数据流动方式,如输入或输出等;数据类型是指端口上流动的数据的表达格式。由于VHDL是一种强类型语言,它对语句中的所有操作数的数据类型都有严格的规定。一个实体通常有一个或多个端口,端口类似于原理图部件符号上的管脚。实体与外界交流的信息必须通过端口通道流入或流出。IEEE1076标准包中定义了4种常用的端口模式,各端口模式的功能及符号在实际的数字集成电路中,in相当于只允许输入的引脚,out相当于只允许输出的引脚,buffer相当于带输出缓冲器并可以回读的引脚(与三态引脚不同),而inout相当于双向引脚。1.3.3 结构体设计概述结构体(architecture)是用于描述设计实体的内部结构及实体端口间的逻辑关系。结构体内部构造的描述层次和描述内容可以用图4-3来说明。一般而言,一个完整的结构体由以下两个基层次组成:1、对数据类型、常数、信号、子程序和元件等元素的说明部分。2、以行为、数据流、结构描述方式表达实体逻辑行为或功能的描述语句结构体将具体实现一个实体。每个实体可以由多个机构体,每个结构体对应着实体的不同结构和算法的实现方案,其间的各个结构的地位是同等的,但同一结构体不能为不同的实体所拥有。结构体不能单独存在,它必须有一个界面说明,即对应着一个实体。对于具有多个结构体的实体,必须用配置(configuration)语句指明实际用于综合的结构体和用于仿真的结构体。在电路中,如果实体代表一个器件符号,则结构体描述了这个符号的内部行为。当把这个符号例化成一个实际的器件安装到电路上时,则需配置语句为这个例化的器件指定一个结构体(即指定一种实现方案),或由编译器自动选定一个默认的结构体。(1)结构体的一般语句格式结构体的语句格式如下:architecture 结构体名 of 实体名 is 说明语句begin 功能描述语句end architecture 结构体名;其中,实体名必须与设计实体名一致,而结构体名可以由设计者自己选择,但当一个实体具有多个结构体时,结构体的取名不可重复。(2)结构体说明语句结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(signal)、数据类型(type)、常数(constant)、元件(component)、函数()、和过程()等加以说明的语句。但在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要专门的程序包来处理。(3)功能描述语句结构结构体功能描述可以含有五种不同类型的,且是以并行方式工作的语句结构。而在每一语句结构内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。各语句结构的基本组成和功能分别是:块语句是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个模块从而使程序结构清晰易读。进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。子程序调用语句用于调用一个已设计好的子程序。元件例化语句对其他的设计实体进行元件的调用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。2出租车计费器的总体设计2.1 系统总体设计要求本文将利用VHDL语言设计一个出租车计费器的计费系统,具体要求如下:白天:行程1公里之内,起步价5元,以后每公里1元,超过3公里加收空车费6元。黑夜:行程1公里之内,起步价7元,以后每公里2元,超过4公里加收空车费8元。能显示行驶公里数,计费器费用;可以实现加速,停车,费用路程随之变化;可以实现白天黑夜由按键转换;可以任意时刻复位为路程为零,而计费为起始值。计价范围099.9元,计价分辨率为0.1元,行程范围为09.999公里,分辨率为0.001公里。2.2 出租车计费器系统工作流程图对出租车计费器系统的工作进行分析,即出租车计费器工作流程图如下图所示K=1,白天行程1公里之内,起步价5元,以后每公里1元超过3公里加收空车费6元K=0,黑夜行程1公里之内,起步价7元,以后每公里2元超过4公里加收空车费8元加速旋钮按键K复位出租车载客后,启动计费器,整个系统开始工作,进入初始化状态,即计程从0开始,若按键为1,则为白天。按键为0,则为黑夜。白天:行程1公里之内,起步价5元,以后每公里1元,超过3公里加收空车费6元。黑夜:行程1公里之内,起步价7元,以后每公里2元,超过4公里加收空车费8元。再根据加速旋钮判断行驶还是停止。出租车停止乘客下车后,按下复位信号,则所有计数器复位。3出租车计费器系统的VHDL程序模块设计根据出租车计费器工作流程图可划分为4大模块:计程模块、白天计费模块、黑夜计费模块、显示模块。(1)计程模块:process(Motor) begin if(Rst=0) then Meter1=0; Meter1K=0; Meter10=0; Meter100=0; elsif(Motorevent and Motor=1) then if(Meter1=9) then Meter1=0; if(Meter10=9) then Meter10=0; if(Meter100=9) then Meter100=0; if(Meter1K=9) then Meter1K=0; else Meter1K=Meter1K+1; end if; else Meter100=Meter100+1; end if; else Meter10=Meter10+1; end if; else Meter1=Meter1+1; end if; end if; end process;通过电机脉冲输入来控制车轮的运行。运行多少模拟多少路程。(2)白天计费模块:process(Clk) begin if(Rst=0) then Money1=0; Money10=0; Money100=0; elsif(Clkevent and Clk=1) then if daytime =0 then -bai tian if(Meter1K1) then Money100=0; Money10=5; Money1=0; Old_Money1=0; else Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; if (Meter1K=3) then Money100=1; Money10=3; Money1=0; Old_Money12 )then Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; end if ; end if; end if;通过时钟信号来控制白天费用,实现白天行程1公里之内,起步价5元,以后每公里1元,超过3公里加收空车费6元。(3)黑夜计费模块:if(Meter1K1) then Money100=0; Money10=7; Money1=0; Old_Money1=0; else Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=1; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+2; end if; end if; end if; - if (Meter1K=4) then Money100=2; Money10=1; Money1=0; Old_Money13) then Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=1; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10Disp_Temp=Meter1K;dpDisp_Temp=Meter100;dpDisp_Temp=Meter10;dpDisp_Temp=Meter1;dpDisp_Temp=10;dpDisp_Temp=Money100;dpDisp_Temp=Money10;dpDisp_Temp=Money1;dp=1; end case; end process; process(Clk) begin if(Clkevent and Clk=1) then SEG_SEL=SEG_SEL+1; if (SEG_SEL=9) then SEG_SEL=000; else DisplayDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_DecodeDisp_Decode=0000000; end case;end process; 可实现显示高四位为路程,第三位显示价格,同时可显示小数点。可以直观的读出出租车所行驶的公里数和乘客所需付的费用。4出租车计费器的系统仿真结果及分析4.1 管脚分配图输入输出信号解释说明: 输入信号:CLK, 系统时钟信号,频率1kHZ; daytime,启动信号,当为1时,是黑夜,当为0时,是白天 Rst,复位信号, Motor,电机脉冲输入 输出信号:SEG_SEL0 ,SEG_SEL1, SEG_SEL2片选信号的输出,用于连接实验向上的74LS138芯片的管脚,在实验锁管脚步骤中确定。起到控制数码管显示的作用。Display0,Display1,Display2,Display3,Display4,Displa-y5,Display6,用于数码管显示。 dp,用于控制小数点,与实验箱上数码管的小数点端H相连。4.2 仿真波形图分析5.结论及个人心得体会通过这次紧张而又充实的EDA课程设计,我感受到了VHDL语言和普通软件语言之间的区别,也能够更加熟练地运用VHDL语言进行逻辑电路的设计了,受益匪浅。我们所做的课题是出租车计费器的设计。老师给了我们任务书和简单的程序模块,在这十多天的实验操作中,我和我的组员马翔不断的完善自己的设计要求,将自己的想法融入到实验的程序中去。最终通过仿真达到了自己预想的效果。有种先苦后甜的成就感。 同时在本次试验中,我们熟练的掌握了Quartus II软件的使用。学会了如何把自己所设计的程序,通过软件用波形仿真出来,再通过试验箱仿真出来。在这次课程设计过程中,得到了很多人的帮助。首先要感谢我的指导老师,包括肖鸿老师,贺科学老师,谢文彪老师以及吴一帆老师等。在课程设计上给予我的帮助,提供给我的支持与建议,特别是帮助我解决了我半个多月来一直没有循环出来的计费循环程序,这是我能顺利完成这次报告的主要原因,让我能把系统做得更加完善。在此期间,我不仅学到了许多新知识,而且也开阔了视野,提高了自己的设计能力。其次,我要感谢帮助过我的同学们,他们也为我解决了不少难题,同时也感谢学院为我提供了良好的做课程设计的环境。这些东西是无法再平时上课的过程中学到的,实践出真知,只有在实验中我们才能更好的学到东西,不用纸上谈兵,做无用功。参考文献1 汪金爱,刘达. EDA技术与CPLD应用. 今日电子,2004,2 朱彩莲,杨洋. EDA技术的发展与应用. 萍乡高等专科学校学报,2004,43 孙鹏,陈景. 数字电子技术基础与设计. 大连:大连理工大学出版社,2004.4.4 王长宏,陈朝阳,邹雪城,应建华. VHDL设计实例及其仿真与综合. 电子工程师,2001,11:5 赵立民,于海雁,胡庆,庞杰. 可编程逻辑器件与数字系统设计. 北京:机械工业出版社,2003.5. 46潘松,黄继业,EDA技术实用教程,科学出版社,20027刘昌华,数字逻辑EDA设计与实践,国防工业出版社,20068谭会生,EDA技术综合应用实力与分析,西安电子科技大学出版社,20049王振红,张常年,综合电子设计与实践,清华大学出版社,200510李宗伯,VHDL设计表示与综合,机械工业出版社,200211边计年,薛宏熙,VHDL设计电子线路,清华大学出版社,2002附录A 出租车计费器仿真结果白天起始价五元白天超过一公里,每公里1元白天超过三公里,加6元空车返回费黑夜起始价七元黑夜超过一公里,每公里2元黑夜超过三公里,加8元空车返回费附录B 出租车计费器的完整程序Title:出租车计费器 Author:lijie and maxiang Data: 2012-6-6 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;-entity taxi is port( Clk : in std_logic; -时钟输入 daytime : in std_logic; -baitian yu hei ye control Rst : in std_logic; -复位输入 Motor : in std_logic; -电机脉冲输入 Display : out std_logic_vector(6 downto 0); -七段码管显示输出 dp : out std_logic; -xiaoshudianshuchu SEG_SEL : buffer std_logic_vector(2 downto 0) -七段码管扫描驱动 ); end taxi;-architecture one of taxi is signal Disp_Temp : integer range 0 to 15; signal Disp_Decode: std_logic_vector(6 downto 0); signal Meter1,Meter10,Meter100,Meter1K : integer range 0 to 9; signal Money1,Money10,Money100 : integer range 0 to 9; signal Old_Money1 : integer range 0 to 9; begin process(Motor) begin if(Rst=0) then Meter1=0; Meter1K=0; Meter10=0; Meter100=0; elsif(Motorevent and Motor=1) then if(Meter1=9) then Meter1=0; if(Meter10=9) then Meter10=0; if(Meter100=9) then Meter100=0; if(Meter1K=9) then Meter1K=0; else Meter1K=Meter1K+1; end if; else Meter100=Meter100+1; end if; else Meter10=Meter10+1; end if; else Meter1=Meter1+1; end if; end if; end process; process(Clk) begin if(Rst=0) then Money1=0; Money10=0; Money100=0; elsif(Clkevent and Clk=1) then if daytime =0 then -bai tian if(Meter1K1) then -里程小于1Km是显示基价 Money100=0; Money10=5; -起步价5元 Money1=0; Old_Money1=0; else Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100=0; else Money100=Money100+1; end if; else Money10=Money10+1; end if; end if; if (Meter1K=3) then Money100=1; Money10=3; -duo shou 6 yuan Money1=0; Old_Money12 )then Money1=Meter100; Old_Money1=Money1; if(Old_Money1=9 and Money1=0) then if(Money10=9) then Money10=0; if(Money100=9) then Money100

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论