EDA交通灯设计Word文档格式.docx
《EDA交通灯设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《EDA交通灯设计Word文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
本系统的控制原理框图可由图1表示,它主要由传感器、模糊控制器(包括计算控制变量、模糊量处理、模糊控制规则、模糊推理和清晰化处理五个模块,如图中虚线内所示)、执行机构、被控对象以及数模和模数转换器组成。
本系统以单向上有三个车道的道路为实验模型,共使用了24个传感器设计的交通灯模糊控制系统比传统的交通灯控制系统平均节约7.8秒的等待时间。
而本人所要设计的交通灯控制器仅仅需要红绿两种颜色,控制两个干道的车辆,并且有5秒的闪烁时间以便提示车辆或者行人做好禁止通行准备.而此种设计已经可以用各种语言不同方式实现.我所使用的是较为简单的VerilogHDL语言编译程序,最终通过MAX+PLUS2这个全英文工具加以实现.
1.3EDA技术
(1)EDA技术的概念
EDA技术(ElectronicDesignAutomation,电子设计自动化的缩写),是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等方面开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
(2)EDA技术在信息领域的研究
在信息通信领域,要优先发展高速宽带信息网、深亚微米集成电路、新型元器件、计算机及软件技术、第三代移动通信技术、信息管理、信息安全技术,积极开拓以数字技术、网络技术为基础的新一代信息产品,发展新兴产业,培育新的经济增长点。
要大力推进制造业信息化,积极开展计算机辅助设(CAD)、计算机辅助工程(CAE)、计算机辅助工艺(CAPP)、计算机机辅助制造(CAM)、产品数据管理(PDM)、制造资源计划(MRPII)及企业资源管理(ERP)等。
有条件的企业可开展“网络制造”,便于合作设计、合作制造,参与国内和国际竞争。
开展“数控化”工程和“数字化”工程。
自动化仪表的技术发展趋势的测试技术、控制技术与计算机技术、通信技术进一步融合,形成测量、控制、通信与计算机(M3C)结构。
在ASIC和PLD设计方面,向超高速、高密度、低功耗、低电压方面发展。
第二章方案论证
2.1设计任务要求
(1)设计一个十字路口的交通信号灯的控制电路,如图2-1。
要求红、绿灯按一定的规律亮、灭以及闪烁,且在亮灯期间进行倒计时,并将倒计时数用数码管显示出来。
(2)绿灯亮时,为该车道允许通行信号,红灯亮时,为该车道禁止通行信号。
要求主干道每次通行时间为99秒,支干道每次通行时间为30秒。
每次变换运行车道前绿灯闪烁,持续时间为5秒。
即车道要由主干道转换为支干道时,主干道在通行时间只剩下5秒钟时,绿灯闪烁显示,支干道仍为红灯,以便主干道上已过停车线的车继续通行,未过停车线的车停止通行。
同理,当车道由支干道转换为主干道时,支干道绿灯闪烁显示5秒钟,主干道仍为红灯。
(3)可以对主干道,支干道上红、绿灯的运行时间进行重新设置。
图2-1交通灯十字交叉路口
2.2设计难点
本课题的设计难点在于计数器的计数值与交通灯的亮灭关系,如图2-2。
关键是设计一个计数范围为0~129(130s)的计数器和一个根据计数值作出规定反映的控制器。
如图2-2所示,不妨设支干道的绿灯先亮。
在一个周期内,当支干道的的绿灯持续亮了25s后,它会接着闪烁5s,而在这30s的时间内主干道持续红灯亮;
然后主干道绿灯持续亮94s后,闪烁5s,而在这长达99s的时间内,支干道的红灯亮。
于是交通信号灯就这样周而复始的亮灭。
但当出现特殊情况,需要对运行时间进行重置的时候,相应的各个时间段的时间长短也会发生改变。
图2-2计数器的计数值与交通灯的亮灭关系
2.3硬件系统分析
1.器件
(1)两组红绿灯,即两个红色的发光二极管,两个绿色的发光二极管。
chief_green,chief_red,用于配合十字路口主干道的交通指挥控制;
sub_green,sub_red,用于配合十字路口支干道的交通指挥控制。
(2)三组七段LED数码显示管。
数码管1,用于显示主干道置数的高位;
数码管2,用于显示主干道置数的低位;
数码管3,用于显示支干道置数的高位;
数码管4,用于显示支干道置数的低位;
数码管7,数码管8,用于交通信号灯的二位十进制倒计时数的显示。
(3)一组手动控制开关。
k5,k4,k3,k2,用于对主干道,支干道上红、绿灯的运行时间进行设置。
K5用于对主干道通行时间的高位进行设置;
K4用于对主干道通行时间的低位进行设置;
K3用于对支干道通行时间的高位进行设置;
K2用于对支干道通行时间的低位进行设置;
k1使能控制置数,当k1按下时,k5,k4,k3,k2所置的高电平会传给chief_h,chief_l,sub_h,sub_l,传给定时器,开始计时。
2.系统框图2-3
3.系统框图各端口功能说明
(1)enable,使能作用,控制交通灯的计数。
当enable为低电平时,即k1按键没按下时,定时器置数;
当enable为高电平时,即k1按下,交通灯开始循环运行。
图2-3系统框图
(2)chief_h_button,chief_l_button,sub_h_button,sub_l_button,置数作用,分别设置主干道通行时间的高位,主干道通行时间间的低位,支干道通行时间的高位,支干道通行时间的低位,分别通过按键按键k5,k4,k3,k2来实现。
(3)chief_h,chief_l,sub_h,sub_l,时间显示作用,由按键k5,k4,k3,
k2所得到的值,代表主干道通行时间的高位,主干道通行时间的低位,支干道通行时间的高位,支干道通行时间的低位,传递给数码管4,3,2,1显示。
(4)clk,外部时钟源。
(5)flash,控制绿灯的闪烁。
(6)select,用于计数干道的选择。
(7)chief_green,chief_red,sub_green,sub_red,用于显示主干道绿灯,主干道红灯,支干道绿灯,支干道红灯的亮灭。
(8)counter_play,倒计时。
从主干道的99开始,99,98,97……2,1,0,30,29,28……3,2,1,0,99,98……一直周而复始的循环。
2.4软件系统分析
2.4.1运用VerilogHDL语言进行设计
HDL是硬件描述语言(Hardware
Description
Language)的缩写。
HDL巳有多种,但最流行和通用的只有Verilog
HDL和VHDL两种。
Verilog
HDL起源于1983年的GDA(Gateway
Design
Automation)。
Verilog
HDL是在应用最为广泛的C语言基础上发展起来的一种硬件描述语言,它是由GDA公司的Phil
Moorby于1983年创建的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。
1985年Moorby推出了它的第三个商用仿真器Verilog-XL,获得了巨大成功,从而使verilog
HDL得到迅速的推广和应用。
1989年CADENCE公司收购了GDA公司,使Verilog
HDL成为该公司的独家专利。
1990年CADENCE公司公开发表了Verilog
HDL,并成立OVI(0pen
International)组织以促进Verilog
HDL语言的发展。
1995年Verilog
HDL成为IEEE标准,即IEEE
Standard
1364—1995。
HDL语言简单而优美,易学易用,对于有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握。
再者其描述硬件单元的结构简单且易读。
在设计仿真中可以实现所需要的功能模块,层级结构、测试向量以及人机交换等。
而且VerilogHDL语言本身是专门面向硬件与系统设计的,与VHDL相比,VHDL语法相对较自由些,容易犯错误,因而我选择VerilogHDL语言进行编程设计。
2.4.2基于MAX+plusⅡ平台的设计
又由于本课题是基于MAX+plusⅡ平台设计的,所以介绍下MAX+plusⅡ集成开发环境。
MAX+plusⅡ是一种与结构无关的全集成化设计环境,使设计者能对Altera的各种CPLD系列方便地进行设计输入、快速处理和器件编程。
MAX+plusⅡ开发系统具有强大的处理能力和高度的灵活性。
使用MAX+plusⅡ软件的设计者无需精通器件内部的复杂结构,只需运用自己熟悉的输入工具进行设计,如原理图输入方法,文本输入方法(AHDL,VerilogHDL,VHDL等)和波形输入方法。
而且MAX+plusⅡ的设计结果还能够生成编程下载文件,对设计文件进行逻辑综合和器件适配等。
那么,MAX+plusⅡ设计流程是这样的:
(1)设计输入。
MAX+plusⅡ软件的设计文件可以是本软件自己的设计工具或者是各种工业标准的EDA设计输入工具。
支持多种设计输入方式,如硬件描述语言输入、原理图输入、波形输入、文本输入、底层编辑、网表输入和层次设计输入。
(2)设计处理。
设计输入完后,用MAX+plusⅡ的编译器编译、查错、修改直到设计输入正确,同时将对输入文件进行逻辑简化、优化,最后生成一个编程文件。
这是设计的核心环节。
(3)设计检查。
MAX+plusⅡ为设计者提供完善的检查方法设计仿真和定时分析。
其目的是检验电路的逻辑功能是否正确,同时测试目标器件在最差情况下的时延。
这一查错过程对于检验组合逻辑电路的竞争冒险和时序逻辑电路的时序、时延等至关重要。
(4)器件编程。
当电路设计、校验之后,MAX+plusⅡ的Programmer将编译器所生成的编译文件下载到具体的CPLD器件中,即实现目标器件的物理编程。
综上,MAX+plus2的软件设计流程应包含以下几个部分,每部分的关系如图2-4所示。
图2-4MAX+plus2的设计流程图
第三章过程论述
由于是同组两人做一个课题,所以需要将交通灯控制系统划分为两大部分,若干个小模块。
然后分别用VerilogHDL写出程序代码来,进行波形仿真,生成一个个小模块,再将各个模块所定义的输入/输出端口的引脚进行连线,形成一个总的层次图,然后再进行总体程序上的波形仿真。
这样做,既可以增加程序的调试速度,提高编程速度。
因此经过分析,此交通灯控制系统被划分成4个模块,分别是:
置数模块,显示模块,定时控制模块,顶层模块。
而我则负责置数模块和显示模块,我的同组人员,则做定时控制模块和顶层模块。
定时器模块:
Enable键控制定时器的运行和关闭。
Enable按下后,将置数值赋给计数变量chief_h_temp,chief_l_temp,sub_h_temp,sub_l_temp。
初始状态,计数选择寄存器select=0,对主干道的计数变量进行减计数。
每到来一个时钟上升沿,对变量减1。
顶层模块其作用:
将置数模块,显示模块,定时控制模块所生成模块图连接起来,添上输出输入端口,重新编译仿真。
3.1模块设计理念
3.1.1置数模块
由于系统设计要求可以对主干道,支干道上红、绿灯运行的时间进行重新设置调整,所以要对系统进行参数化设计。
首先引入一组参数,chief_h,chief_l,sub_h,sub_l,先赋上主干道,支干道上红、绿灯运行的时间初始值,一旦需要重置,就用一个enable信号控制外部按键,控制定时器的启动(可参考图2-3)chief_h_button,chief_l_button,sub_h_button,sub_l_button通过k5,k4,k3,k2键对参数进行赋值。
而在程序设计上,可以运用always语句进行设计,来判断置数键的变化。
因为在VerilogHDL语言中always块中beginend在概念上顺序执行,实质上是并行的,因为每条语句的执行不占用具体时间,所有语句都是在一瞬间执行的,没有时间的先后,但有先后执行之分。
仿真时是逐条执行的。
但要弄清楚阻塞赋值和非阻塞赋值的区别。
如果全部都是非阻塞的赋值的话,才相当于并行的。
而此程序设计刚好要求,主干道计时的高位置数,主干道计时的低位置数,支干道计时的高位置数,支干道计时的低位置数并行进行,所以选用always语句很合适。
以主干道的高位为例,当chief_h_button产生一个高电平,即k5键按下,对应的置数位加1,当k5再按下一次时,对应的置数再位加1,当置数位加到9后,下一次则归0,置数值始终放在chief_h里。
对于主干道的低位,支干道的高、低位亦是同理。
所以程序需要四个并行的Always同时对四个置数按键进行监控。
所以,
四个输入信号:
chief_h_button,chief_l_button,sub_h_button,sub_l_button
四个输出信号:
chief_h,chief_l,sub_h,sub_l。
3.1.2显示模块
其作用:
主要用于控制主干道和支干道的红绿灯的亮灭,以及交通信号灯的倒计时显示。
由于交通信号灯的倒计时数值可能是一位或者两位的十进制数,所以需要在七段数码管的译码器的译码电路上增加一个分位电路,即将其分为两个一位的十进制数,如99分为9和9,30分为3和0。
由输入信号select、flash,分别取00,01,10,11,所得到的chief_green,chief_red,sub_green,sub_red的不同值,来控制主干道,支干道红绿灯的亮灭。
1表示亮,0表示灭。
如表3-1所示。
其方法就是用卡诺图算出chief_green,chief_red,sub_green,sub_red关于select,flash的数学表达式。
闪烁的效果用flsh&
clk实现。
输入信号
输出信号
select
flash
Chief_green
Chief_red
Sub_green
Sub_red
0
1
闪烁
闪烁
表3-1
I.
Chief_green=~select&
~flash+~select&
(flash&
clk)
=~select&
(~flash+flash&
(~(flash&
clk))
II.
Chief_red=select
III.
Sub_green=select&
IV.
Sub_red=~select
七个输入信号:
clk,flash,select,chief_htemp,chief_ltemp,sub_htemp,sub_ltemp
五个输出信号:
chief_green,chief_red,sub_green,sub_red,counter_play
3.2程序代码
3.2.1置数模块程序代码
Moduleset(chief_h_button,chief_l_button,sub_h_button,sub_l_button,
chief_h,chief_l,sub_h,sub_l)
inputchief_l_button;
inputchief_h_button;
inputsub_l_button;
inputsub_h_button;
output[3:
0]chief_h,chief_l,sub_h,sub_l;
reg[3:
always@(posedgechief_l_button)
begin
if(chief_l==9)chief_l<
=0;
elsechief_l<
=chief_l+1;
end
always@(posedgechief_h_button)
if(chief_h==9)chief_h<
elsechief_h<
=chief_h+1;
always@(posedgesub_l_button)
if(sub_l==9)sub_l<
elsesub_l<
=sub_l+1;
always@(posedgesub_h_button)
if(sub_h==9)sub_h<
elsesub_h<
=sub_h+1;
endmodule
3.2.2显示模块程序代码
Moduleview(clk,flash,select,chief_green,chief_red,sub_green,sub_red,
counter_play,chief_htemp,chief_ltemp,sub_htemp,sub_ltemp);
inputclk;
inputflash;
inputselect;
input[3:
0]chief_htemp,chief_ltemp,sub_htemp,sub_ltemp;
outputchief_green,chief_red,sub_green,sub_red;
output[7:
0]counter_play;
assigncounter_play=(~select)?
{chief_htemp,chief_ltemp}:
{sub_htemp,sub_ltemp};
assignchief_green=~select&
clk));
assignchief_red=select;
assignsub_green=select&
assignsub_red=~select;
3.3模块图
3.3.1置数模块图
Input:
output:
chief_h,chief_l,sub_h,sub_l
图3-1置数模块图
注:
模块图中,细实线表示单线连接,粗实线表示总线连接。
chief_h_button,chief_l_button,sub_h_button,sub_l_button都是简单的0或者1二进制数,所以用细实线;
而chief_h,chief_l,sub_h,sub_l都是四位二进制数,所以连接用的是粗实线。
3.3.2显示模块图
Input:
clk,flash,select,chief_htemp,chief_ltemp,sub_htemp,sub_ltemp
图3-2显示模块图
clk,flash,select是一位二进制数;
chief_htemp,chief_ltemp,sub_htemp,sub_ltemp,是四位二进制数;
counter_play是八位二进制数。
第四章时序仿真结果分析
4.1置数模块仿真结果分析
图4-1置数模块单模块仿真结果
首先进行初始值设定,令chief_h_button产生1个高电平,chief_l_button产生3个高电平,sub_h_button产生1个高电平,sub_l_button产生1个高电平,即,可以发现chief_h置数为1,chief_l置数为3,sub_h置数为1,sub_l置数为1。
观察图4-1,