您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页EDA实验

EDA实验

来源:意榕旅游网
河南农业大学

课程设计报告

设计题目: 交通灯控制器的设计 学 院: 理 学 院 专 业: 电子信息科学与技术 班 级: 08级电科(2)班 学 号: 0808101035 姓 名: 石 利 芳 电子邮件: Shiliminanyang@126.com 日 期: 2011年12 月 成 绩: 指导教师: 贾 树 恒

河 南 农 业 大 学

理 学 院

课 程 设 计 任 务 书

学生姓名 石利芳 指导教师 贾树恒 学生学号 0808101035 专业 电子信息科学与技术 题目 交通灯控制器的设计 任务与要求 主要内容:

设计主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义为不同的状态,路口状况定义为触发条件,组成有限状态机。 要求:

(1)采用VHDL语言编写程序,并在QUARTUSII工具平台中进行仿真,下载到EDA实验箱进行验证。

(2)熟练操作设计所用的软硬件系统:Max+plusⅡ软件。

(3)按要求编写课程设计报告,正确绘制程序流程图、实验接线图等,正确阐述设计原理、方法和实验结果。

(4)通过课程设计培养学生严谨的科学态度,认真地工作作风。 (5)在老师的指导下,要求每个学生独立完成课程设计报告的全部内容。

开始日期 2011 年 12 月 6 日 完成日期 2011 年 12 月 15 日 课程设计所在单位 理 学 院 电 子 科 学 系

1引 言

当前,大量的信号灯电路正向着数字化、小功率、多样化、方便人、车、路三者关系的协调, 多值化方向发展随着社会经济的发展,城市交通问题越来越引起人们的关注。,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。

1.1 设计的目的

本次课程设计的目的是通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的计算机组成原理知识,提高分析、解决计算机技术实际问题的独立工作能力。

1.2 设计的基本内容

这次课程设计的题目是交通灯控制器的设计。设计了主干道的交叉路口交通信号灯无人自动管理的控制系统.将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机.基于此模型的交通信号灯控制系统可充分利用现有交通资源,缓解城市交通压力。

2 EDA、VHDL、有限状态机简介

2.1 EDA简介

EDA是电子设计自动化(Electronic Design Automation)缩写,是90年代初从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而来的。EDA技术是以计算机为工具,根据硬件描述语言HDL( Hardware Descriptionlanguage)完成的设计文件,自动地完成逻辑编译、化简、分割、综合及优化、布局布线、仿真以及对于特定目标芯片的适配编译和编程下载等工作。

典型的EDA工具中必须包含两个特殊的软件包,即综合器和适配器。综合器的功能就是将设计者在EDA平台上完成的针对某个系统项目的HDL、原理图或状态图形描述,针对给定的硬件系统组件,进行编译、优化、转换和综合,最终获得我们欲实现功能的描述文件。综合器在工作前,必须给定所要实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用一定的方式联系起来。也就是说,综合器是软件描述与硬件实现的一座桥梁。综合过程就是将电路的高级语言描述转换低级的、可与目标器件FPGA/CPLD相映射的网表文件。

适配器的功能是将由综合器产生的王表文件配置与指定的目标器件中,产生最终的下载文件,如JED文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于在综合器中已指定的目标器件系列。

硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。设计者可利用HDL程序

来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。目前,就FPGA/CPLD开发来说,比较常用和流行的 HDL主要有ABEL-HDL、AHDL和VHDL。

2.2 VHDL简介

VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。但是,由于它在一定程度上满足了当时的设计需求,于是他在1987年成为ANSI/IEEE的标准(IEEE STD 1076-1987)。1993年更进一步修订,变得更加完备,成为ANSI/IEEE的ANSI/IEEE STD 1076-1993标准。目前,大多数的CAD厂商出品的EDA软件都兼容了这种标准。

VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。

关于用VHDL和原理图输入进行CPLD/FPGA设计的粗略比较:在设计中,如果采用原理图输入的设计方式是比较直观的。你要设计的是什么,你就直接从库中调出来用就行了。这样比较符合人们的习惯。但是这样做需要设计人员要在两方面有较高的素质:

1.对电路的知识要比较丰富。 2.对CPLD/FPGA的结构比较熟悉。

有了这两个条件才能在设计的过程中选用适当的器件从而提高设计的可靠性、提高器件的利用率及缩短设计的周期。但是有一个重大的问题是在于,如果你的产品有所改动,需要采用另外的CPLD/FPGA时,你将需要重新输入原理图。但是当你采用VHDL等高级语言来设计时这些问题都会得到较好的解决。由于在使用VHDL等高级语言时,有专用的工具来实现将语言描述的电路功能转换为实际的电路所以你就用不着对底层的电路很熟悉,也用不着对CPLD/FPGA的结构很熟悉(因为有专用的工具针对你的描述采用相应的器件)。当你要换器件时,你只需要将原来设计好的VDHL文件在新器件的设计工具中再次实现就行了。

2.3 有限状态机简介

有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路。一般来说,除了输入部分和输出部分外,有限状态机还含有一组具有“记忆”功能的寄存器,这些寄存器的功能是记忆有限状态机的内部状态,它们常被称为状态寄存器。在有限状态机中,状态寄存器的的下一个状态不仅与输入信号有关,而且还与该寄存器的当前状态有关,因此有限状态机又可以认为是组合逻辑和寄存器逻辑的一种组合。其中,寄存器逻辑的功能是存储有限状态机的内部状态;而组合逻辑有可以分为次态逻辑和输出逻辑两部分,次态逻辑的功能是确定有限状态机的下一个状态,输出逻辑的功能是确定有限状态机的输出。

在实际的应用中,根据有限状态机是否使用输入信号,设计人员经常将其分为Moore型有限状态机和Mealy型有限状态机两种类型。1 Moore型有限状态机 其输出信号仅与当前状态有关,即可以把Moore型有限状态的输出看成是当前状态的函数。2 Mealy型有限状态机 其输出信号不仅与当前状态有关,而且还与所有的输入信号有关,即可以把Mealy型有限状态机的输出看成是当前状态和所有输入信号的函数。

3 设计过程

3.1 设计规划

根据交通灯控制器的功能与要求,将其总体电路分为controller、分频器、时钟模块。controller实现逻辑和时序控制,外部脉冲振荡器的频率选为32 768 kHz,经分频器分频得1 Hz的信号,1 Hz信号用做时钟模块的计数脉冲。总体框图如图3-1:

aR 时钟模块 aR aY 信 aY 分频器 号控制器 aG bR bR aG clk bY bG bG bY 图3-1 交通灯控制器总体框图 3.2 各模块的原理及其程序 3.2.1时钟模块设计

分成时、分、秒三块,秒计时对分频器的输入计数,到达60个时清零并输出一个分钟进位,同样,分钟计时计到60个时清零并输出一个小时进位,小时计时计满24个时则清零。校准时,set位为高电平,时钟停止走动,时、分、秒各位分别用8位开光设置,其中高四位对应高一位,低四位对应低一位。VHDL代码见附录。

时钟模块由VHDL程序实现后,其仿真图如图3-2所示。

图3-2 时钟模块仿真图

3.2.2分频器模块设计

使用32MHz的晶体振荡器,稳定度高,但需要分频以得到1Hz的秒脉冲,分频器以计数方式实现,当计到16000000个脉冲上升沿输出发生跳变,因此输出端每秒有一个上升沿,即得到1Hz的脉冲。VHDL代码见附录.

分频器模块由VHDL程序实现后,其仿真图如图3-3所示。

图3-3 分频器模块仿真图

3.2.3信号控制器模块设计

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。VHDL代码见附录.

对其用VHDL程序实现后,其仿真图如图3-4所示。

图3-4 信号控制器模块仿真图

其中,Sa,Sb分别是a,b路口传感器的信号,aR,aY,aG,aLR,aLY,aLG分别代表控制主干道a的直行红灯、黄灯、绿灯,左转弯红灯、黄灯、绿灯的信号;bR,bY,bG,bLR,bLY,bLG分别代表控制主干道b的直行红灯、黄灯、绿灯,左转弯红灯、黄灯、绿灯的信号;aPR,aPG,bPR,bPG是人行道信号,hold是使能信号。hold=0时a,b两路口红灯同时亮,便于处理特殊情况。

结束语

通过紧张工作,完成了我的设计任务——用VHDL设计交通灯控制器。通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性所在。对传统软件工程设计流程有了更深刻的理解,掌握了EDA软件的使用以及如何熟练的、合理的选用集成电路器件。将书本上的理论知识和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。

参考文献:

[1]孙津平.数子电子技术.西安:西安电子科技大学出版社,2002 [2]陈振源.电子技术基础.北京:高等教育出版社,2001

[3]陈梓城、孙丽霞.电子技术基础.北京:机械工业出版社,2001 [4]李中发.数字电子技术.北京:中过水利水电出版社,2001

附 录

1. 时钟模块程序: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity frequency is

port

(clk10hz:in std_logic; clk1hz:out std_logic);

end frequency;

architecture count of frequency is signal tout:integer range 0 to 4; signal clk:std_logic; begin

process(clk10hz) begin

If rising_edge(clk10hz) then if tout=4 then tout<=0; clk<=not clk; else tout<=tout+1; end if;

end if; end process; clk1hz<=clk; end count;

2.分频器模块程序: Library ieee;

Use ieee.std_logic_1164.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity pulse is

Port(clock,en:in std_logic; Clk:out std_logic ); End pulse;

Architecture behavioral of pulse is Begin

Counter:process(clock,en)

Variable count2:integer;

Variable clk0:std_logic; Begin

If en='0' then Count2:=0; Clk0:='0';

Else if clock' event and clock ='1'then

Count2:=count2+1; If count2=16000000 then Clk0:='1'; Else if count2=32000000 then Count2:=0; Clk0:='0';

End if; End if; end if;

Clk<=clk0;

End if;

end process counter; End Behavioral; 3. 信号控制器模块程序: libraRy ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity controller is

port( clock,reset,hold:in std_logic; flash:out std_logic;

numa,numb:out integer range 0 to 25; aR,aG,aY:out std_logic; bR,bG,bY:out std_logic); end controller;

aRchitecture rtl of controller is

signal countnum:integer range 0 to 50; begin

process(clock) begin

if reset='1' then countnum<=0;

elsif rising_edge(clock) then if hold='1' then flash<='1'; else

flash<='0';

if countnum=49 then countnum<=0; else

countnum<=countnum+1; end if; end if; end if; end process; process(clock)

begin

if rising_edge(clock) then if hold='1' then aR<='1'; bR<='1'; aG<='0'; bG<='0'; aY<='0'; bY<='0'; else

if countnum<=19 then numa<=20-countnum; aR<='0'; aG<='1'; aY<='0';

elsif countnum<=24 then numa<=25-countnum; aR<='0'; aG<='0'; aY<='1'; else

numa<=50-countnum; aR<='1'; aG<='0'; aY<='0'; end if;

if countnum<=24 then

numb<=25-countnum; bR<='1'; bG<='0'; bY<='0';

elsif countnum<=44 then numb<=45-countnum; bR<='0'; bG<='1'; bY<='0'; else

numb<=50-countnum; bR<='0'; bG<='0'; bY<='1'; end if; end if; end if; end process; end;

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务