交通灯控制器的设计EDA课程设计Word文档格式.docx
- 文档编号:21053084
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:20
- 大小:230.48KB
交通灯控制器的设计EDA课程设计Word文档格式.docx
《交通灯控制器的设计EDA课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制器的设计EDA课程设计Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
按下清零键后,系统实现总体清零,计数器由初始状态计数,对应状态的指示灯亮。
(6)用VHDL语言设计符合上述要求的交通灯控制器,并用层次化设计方法设计该电路。
指导教师签名:
年月日
二、指导教师评语:
年月日
三、成绩
验收盖章
年月日
交通灯控制器的设计
1设计目的
通过设计交通灯控制器,了解EDA技术,了解并掌握VHDL硬件描述语言的设计方法和思想,巩固和综合运用所学过的EDA原理知识,提高分析、解决实际问题的独立工作能力。
2设计的主要内容和要求
交通灯控制器的设计,设计了主干道的交叉路口交通信号灯无人自动管理的控制系统。
将路口红绿灯的各种亮灯情况定义不同的状态,路口状况定义为触发条件,组成有限状态机。
交通控制器能完成以下功能:
1.能显示十字路口东西、南北两个方向的红、黄、绿灯的指示状态,用两组红、黄、绿三色LED灯作为两个方向的红、黄、绿灯;
2.南北向为主干道,每次通行时间为45S,东西向为支干道,每次通行时间为25S;
3.能实现正常的倒计时功能,用两组数码管作为东西、南北向的倒计时显示。
其中,黄灯:
5S。
4.能实现特殊状态的功能。
按下SP键后,能实现以下特殊功能:
(1)显示倒计时的两组数码管闪烁;
(2)计数器停止计数并保持在原来的状态;
(3)东西、南北路口均显示红灯状态;
(4)特殊状态解除后能继续计数;
5.能实现全清零功能。
按下reset键后,系统实现全清零,计数器由初状态计数,对应状态的指示灯亮;
6.用VHDL语言设计上述功能的交通灯控制器,并用层次化方法设计该电路;
7.仿真、验证设计的正确性。
3整体设计方案
3.1方案分析
通过分析课程设计的要求可以知道,所要设计的交通信号灯控制电路要能够适用于由一条主干道和一条支干道的汇合点形成的十字交叉路口,其主要功能是:
主干道处于常允许通行的状态,支干道有车来时才允许通行;
当支干道没有车通行时,主干道亮绿灯,而支干道亮红灯,主、支干道的倒计时数码管不显示数字;
当支干道有车通行时,进入了主干道和支干道交替通行的情况。
当进入到交替通行时,主干道每次放行45秒,支干道每次放行25秒。
首先主干道通行45秒,并且主干道显示45秒的倒计时,此45秒内主干道亮绿灯,当45秒计时结束,主干道亮黄灯5秒,而且显示5秒倒计时,用于绿灯转为红灯作为过渡,使行驶中的车辆有时间停到禁行线外,在主干道亮绿灯和黄灯的50秒内,支干道亮红灯50秒,而且支干道显示50秒的倒计时。
然后,当支干道亮红灯50秒结束时,主干道由黄灯转为红灯,并且主干道的红灯亮30秒,显示30秒的倒计时,在此过程中,支干道先亮绿灯25秒,显示25秒的倒计时,25秒过后绿灯转为黄灯,而且黄灯亮5秒,显示5秒倒计时,用于绿灯转为红灯作为过渡,使行驶中的车辆有时间停到禁行线外。
支干道通行结束后,主干道通行,以此交替。
3.2方案状态机控制设计
将十字路口分成东西走向和南北走向的主干道和支干道。
交通灯的工作明显可以分成5个状态,如下表3.1所示:
表3.1工作状态表
支干道是否有车
状态
实现功能
支干道没车
St0
支干道亮红灯,主干道亮绿灯,数码管不显示。
支干道有车
St1
主干道亮绿灯45秒,数码管显示45秒倒计时;
支干道亮红灯,数码管显示从49秒倒计时到05秒。
St2
主干道亮黄灯5秒,数码管显示5秒倒计时;
支干道亮红灯,数码管显示从04秒倒计时到00秒。
St3
支干道亮绿灯25秒,数码管显示25秒倒计时;
主干道亮红灯,数码管显示从29秒倒计时到05秒。
St4
支干道亮黄灯5秒,数码管显示5秒倒计时;
主干道亮红灯,数码管显示从04秒倒计时到00秒。
3.3整体设计方案
根据交通灯控制器的功能与要求,可以把整体设计分为三个模块:
分频模块,把2kHz的频率分成1Hz,1Hz用于倒计时计数的时钟信号,而2kHz则可以用于数码管扫描显示的片选时钟信号;
交通灯控制及倒计时(五个状态的控制)模块;
数码管译码扫描显示模块。
整体的系统框图如图3.1所示:
图3.1系统框架图
分频模块就是把输入的2kHz时钟频率2000分频得到1Hz的频率用于数码管倒计时的时钟信号,其原理就是设计一个0到999循环计数的的计数器,当计数溢出,即计数到999时使输出量取反,则输出为0.5秒的高电平和0.5秒的低电平交替出现,就得到了1Hz的方波,作为秒倒计时的时钟信号。
交通灯控制及倒计时模块就是五个状态的转换模块,是整个系统的核心模块,其五个状态分别st0、st1、st2、st3、st4。
其中st0是当支干道没有车通行的状态,st1是主干道绿灯亮45秒的状态,st2是主干道亮黄灯5秒的状态,st3是支干道亮绿灯25秒的状态,st4是支干道亮黄灯5秒的状态。
当主干道亮绿灯和黄灯时,支干道都是亮红灯,当支干道亮绿灯和黄灯时,主干道都是亮红灯,并且主、支干道都会显示亮灯的倒计时时间,主、支干道的红黄绿灯用六个LED发光二极管代替。
五个状态图如下图3.2所示:
图3.2状态图
数码管倒计时显示,是用四个一体的数码管,分别表示主干道和支干道的秒倒计时,所以是动态扫描显示,扫描的频率直接用2KHz的输入时钟频率。
4软硬件电路的设计
4.1各模块的原理及其程序
4.1.1时钟模块设计
时钟分频模块就是把输入的2kHz时钟频率2000分频得到1Hz的频率用于数码管倒计时的时钟信号,其原理就是设计一个0到999循环计数的的计数器,当计数溢出,即计数到999时使输出量取反,则输出为0.5秒的高电平和0.5秒的低电平交替出现,就得到了1Hz的方波,作为秒倒计时的时钟信号。
时钟分频模块生成的元件符号如下图4.1所示:
图4.1时钟分频模块
clk2khz是频率为为2khz的输入时钟信号,clk1hz是经过2000分频后得到的频率为1hz方波的输出信号。
4.1.2交通灯控制及计时模块
此模块是整个系统的核心部分,主要功能是完成五个状态的转换,并且在每个状态里完成相应的控制作用,即控制主干道和支干道的红黄绿灯的点亮和各自数码管倒计时显示。
编程时主要是用一个进程语句,其敏感信号是时钟分频模块产生的1Hz时钟信号,进程里主要用case语句完成五个状态的控制,在每个状态里要控制主干道和支干道的红黄绿灯的点亮,而且要控制各自数码管倒计时的显示,并为扫描显示译码模块提供倒计时时间,同时要使每个状态结束时能顺利进入下一个状态。
五个状态及相应的功能是:
St0,支干道亮红灯,主干道亮绿灯,数码管不显示;
St1,主干道亮绿灯45秒,数码管显示45秒倒计时;
支干道亮红灯,数码管显示从49秒倒计时到05秒;
St2,主干道亮黄灯5秒,数码管显示5秒倒计时;
支干道亮红灯,数码管显示从04秒倒计时到00秒;
St3,支干道亮绿灯25秒,数码管显示25秒倒计时;
主干道亮红灯,数码管显示从29秒倒计时到05秒;
St4,支干道亮黄灯5秒,数码管显示5秒倒计时;
状态转换条件参照图3.2。
此模块生成的元件符号如下图4.2所示:
图4.2交通灯控制及计时模块
clk1hz是分频模块输出的1Hz的时钟信号,car是支干道是否有车的判断信号,one1、ten1、one2、ten2分别是主干道倒计时的个位和十位,支干道倒计时的个位和十位。
r_a、g_a、y_a、r_b、g_b、y_b分别是主干道和支干道的红、绿、黄灯控制信号。
4.1.3扫描显示译码模块
此模块中含有七段数码管译码和扫描显示两个部分。
七段译码可以使用case语句,将数码管要显示的数译成对应的七位二进制数,用来控制数码管的a、b、c、d、e、f、g的导通。
主干道和支干道倒计时要用到4个数码管,且是四位一体的,则要使用扫描显示的方法:
设计一个00到11循环计数的计数器,而且计数的时钟要比较大,选用输入的2KHz的时钟信号;
当计数器计数为00时,选通第一个数码管,给它主干道倒计时个位的七段译码,当计数器计数为01时,选通第二个数码管,给它主干道倒计时十位的七段译码,当计数器计数为10时,选通第三个数码管,给它支干道倒计时个位的七段译码,当计数器计数为11时,选通第四个数码管,给它支干道倒计时十位的七段译码,并以此循环扫描显示,达到人眼看上去四个数码管全显示的效果。
此模块生成的元件符号如下图4.3所示:
图4.3扫描显示译码模块元件符号
其中clk2khz是输入的扫描时钟信号。
one1、ten1分别是主干道倒计时的个位和十位,one2、ten2分别是支干道倒计时的个位和十位,这四个信号都是有交通灯控制及倒计时模块输出的。
Scan是四个数码管的片选信号,seg_7是七段译码输出信号。
4.1.4顶层文件的编写
顶层文件就是将上述的三个模块进行例化,把它们连接起来组成一个整体。
元件例化语句由两部分组成,第一部分是将一个现成的设计实体定义为一个元件,它的最简单表达式如下:
component元件名is
port(端口名表);
endcomponent文件名;
元件例化语句的第二部分是此元件与当前设计实体中元件间及端口的连接说明,语句的表达式如下:
例化名:
元件名portmap([端口名=>
]连接端口名,...);
由顶层文件生成的元件符号如下图4.4所示:
图4.4顶层文件生成元件符号
clk_2k是外部输入的频率为2khz的时钟信号,car是判断支干道是否有车的输入信号。
scan[1..0]是四位一体数码管的片选输出信号,seg_7[6..0]是数码管的七段译码输出信号,ra、ga、ya、rb、gb、yb分别是主干道和支干道红、绿、黄灯的输出控制信号。
4.2顶层原理图
系统原理图如下图4.5所示:
图4.5顶层原理图
系统工作原理:
把car置为低电平,系统处于st0状态,即表示支干道没有车来时,主干道亮绿灯,支干道亮红灯,四个倒计时数码管都是灭的。
当把car置为高电平并不变后,主干道和支干道分别进入状态st1,st2,st3,st4,并分别正常显示四个状态的内容,实现主干道每次放行45秒,支干道每次放行25秒,从而正确实现交叉路口交通灯的控制。
5系统仿真
5.1时钟分频模块仿真
仿真波形图如下图5.1所示:
设置的endtime是3s,输入clk2kHz是频率为2kHz的方波。
图5.1分频模块仿真波形图
波形分析:
开始时clk1hz为低电平,当计数器第一次计满时,clk1hz由低电平转为高电平,当计数器第二次计满时,clk1hz转为低电平。
在这一过程中,clk1hz先后经历了500ms的低电平和高电平,恰好为一个周期1s,之后依次高低交替,得到频率为1Hz的方波。
5.2交通灯控制及计时模块仿真
仿真波形如下图5.2所示:
设置的endtime为100ms,clk1hz为周期是1ms的方波(把周期缩小为的是可以缩小仿真的时间,方便波形的仿真)。
放大之后
图5.2交通灯控制及倒计时模块仿真波形图
当car为0时,状态为st0,此状态中主干道亮绿灯,支干道亮红灯,当car为1不变时,变为状态st1,之后进入st1-st2-st3-st4-st1的循环状态,在相应的状态里面也能正确地控制红黄绿灯点亮。
将上图中下面太密的地方放大一段后,可以清楚地看到,在状态st1中,主干道进行着45秒的倒计时,而支干道进行着50秒的倒计时,两个倒计时在st0的状态中始终相差5秒。
5.3扫描显示译码模块仿真
仿真波形如下图5.3所示:
方便仿真设设置的endtime为6ms,clk2khz周期为500us。
当one和ten为10时对应的七段译码是0000000,使数码管不显示,用于支干道没有车的情况!
图5.3扫描显示译码模块的波形仿真图
波形仿真说明:
为方便观察one1、ten1、one2、ten2及scan用的是无符号十进制数,当scan=0时显示one1,当scan=1时显示ten1,当scan=2时显示one2,当scan=3时显示ten2。
Seg_7的从高到低七位分别对应数码管gfedcba七段。
5.4顶层文件的仿真
顶层文件的波形仿真图如下图5.4所示:
为了方便波形仿真,设置endtime为1.2s,clk_2k是周期为5us的方波。
图5.4顶层文件波形仿真图
仿真波形分析:
当car为0时,为状态st0,ga、rb为高电平,即主干道亮绿灯,支干道亮红灯;
当car由0变为1且不变时,状态转为st1,ga、rb为高电平,即主干道亮绿灯,支干道亮红灯;
当st1倒计时结束,则转为st2,ya、rb为高电平,即主干道亮黄灯,支干道亮红灯;
当st2倒计时结束,则转为st3,ra、gb为高电平,即主干道亮红灯,支干道亮绿灯;
当st3倒计时结束,则转为st4,ra、yb为高电平,即主干道亮红灯,支干道亮黄灯;
当st4倒计时结束,则转为st1。
当在状态st1,大约在1s处car由高电平变为低电平时,状态则会转为st0。
鉴于图5.4中的scan和seg7太密而看不出其中的变化,所以要把其中几段放大才能便于观察。
1、st=st0时放大的波形如下图5.5所示:
图5.5st=st0时放大的一段波形
图5.5波形分析:
通过图5.5可以清晰地观察到当st=st0时,主干道和支干道的数码管都是灭的,即seg7=”0000000”。
2、st=st1时放大的一段波形如下图5.6所示:
图5.6st=st1时放大的一段波形
图5.6波形分析:
由于要经过clk_2k两千分频后才能得到1hz的倒计时时钟信号,则要经过clk_2k两千个周期后主干道和支干道的数码管秒倒计时才减一秒,所以在顶层文件波形仿真时不好看到倒计时的变化。
在图5-6中可以看到在st为st1时主干道的数码管显示为44,支干道的数码管显示为49,即scan为0时,seg7是“1100110”,scan为1时,seg7是“1100110”,scan为2时,seg7是“1101111”,scan为3时,seg7是“1100110”。
而st2、st3、st4放大后的波形和图5.6相似。
实验结果
开始时把car置为低电平,即表示支干道没有车来时,主干道亮绿灯,支干道亮红灯,四个倒计时数码管都是灭的。
当把car置为高电平并不变后,主干道和支干道分别继续亮绿灯和红灯,同时主干道的数码管从44开始一秒一秒地倒计时显示直至倒计时到00,而支干道的数码管从49开始一秒一秒地倒计时显示,并且主、支干道的数码管显示值始终相差5。
当主干道的倒计时到00(支干道倒计时到05)后的下一秒,主干道的绿灯灭,亮起了黄灯,而且主干道的数码管从04开始秒倒计时直至00,支干道的红灯在这一过程中始终是亮的,而且数码管正常倒计时,和主干道的数码管显示。
当主、支干道数码管倒计时到00后的下一秒,主干道的黄灯灭,红灯亮,数码管从29开始一秒一秒地倒计时,而支干道的红灯灭,绿灯亮,数码管开始从24一秒一秒地倒计时,始终和主干道的数码管少5,直至倒计时到00。
当支干道数码管倒计时到00(主干道为05)的下一秒后,支干道的绿灯灭,黄灯亮,数码管开始从04一秒一秒地倒计时直至00,而主干道在这一过程中继续亮红灯,数码管继续正常地倒计时,而和支干道数码管显示相同。
当主、支干道倒计时到00的下一秒,则进入到主干道亮绿灯,支干道亮红灯的状态,只要car依然维持在高电平,就会不断循环支干道有车通信的四个状态。
当car从高电平变为低电平后,不管之前处于st1、st2、st3、st4中的任何一个状态都会进入到st0状态,即主干道亮绿灯,支干道亮红灯,四个数码管都不会显示。
6使用说明
当把car置为高电平并不变后,主干道和支干道分别进入状态st1,st2,st3,st4,并分别正常显示四个状态的内容。
实现主干道每次放行45秒,支干道每次放行25秒。
从而正确实现交叉路口交通灯的控制。
7设计总结
通过的紧张工作,完成了我的设计任务——交通灯控制器设计。
通过本次课程设计的学习,我深深的体会到设计课的重要性和目的性。
本次设计课不仅仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,独立自主的进行设计的能力。
它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
希望学校以后多安排一些类似的实践环节,让同学们学以致用。
在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。
在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。
用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法必将在未来的数字系统设计中发挥越来越重要的作用。
参考文献
[1]潘松,黄继业.EDA技术使用教程[M].北京:
科学出版社,2006:
320-332.
[2]黄任.VHDL入门.解惑.经典实例.经验总结[M].北京:
北京航空航天大学出版社,2005:
64-88.
[3]徐志军,徐光辉.CPLD/FPGA的开发与应用[M].北京:
电子工业出版社,2002:
208-218.
[4]褚振勇.FPGA设计与应用[M].西安:
西安电子科技大学出版社,2003:
218-230.
[5]夏宇闻.Verilog数字系统设计教程[M].北京:
北京航空航天大学出版社,2008:
302-325.
[6]夏宇闻.复杂数字电路与系统的VerilogHDL设计技术[D].北京清华大学出版社,1998:
28-56.
附录
1、时钟分频模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydivis
port(clk2khz:
instd_logic;
--2khz的输入时钟
clk1hz:
outstd_logic);
--经2000分频后的1hz时钟输出信号
end;
architectureoneofdivis
begin
process(clk2khz)-----2KHzto1Hz
variablecount:
integerrange0to999;
--0到999计数器
variableclk1:
std_logic;
ifclk2khz'
eventandclk2khz='
1'
then
ifcount=999thenclk1:
=notclk1;
count:
=0;
elsecount:
=count+1;
endif;
endif;
clk1hz<
=clk1;
endprocess;
2、扫描显示译码模块
entitydisplayis
--扫描时钟信号
one1,ten1,one2,ten2:
inintegerrange0to10;
scan:
outstd_logic_vector(1downto0);
--片选输出信号
seg_7:
outstd_logic_vector(6downto0));
--七段译码输出
endentitydisplay;
architecturethreeofdisplayis
signaldata:
integerrange0to10;
signalseg77:
std_logic_vector(6downto0);
signalcnt:
std_logic_vector(1downto0);
process(data)-------七段译码
casedatais
when0=>
seg77<
="
0111111"
;
when1=>
0000110"
when2=>
1011011"
when3=>
1001111"
when4=>
1100110"
when5=>
1101101"
when6=>
1111101"
when7=>
0000111"
when8=>
1111111"
when9=>
1101111"
when10=>
0000000"
endcase;
seg_7<
=seg77;
process(clk2khz,one1,ten1,one2,ten2)----------数码管动态扫描计数
ifclk2khz'
then--00到11循环计数器
ifcnt="
11"
thencnt<
00"
elsecnt<
=cnt+1;
process(cnt,one1,ten1,one2,ten2)----数码管动态扫描显示
casecntis
when"
=>
data<
=one1;
scan<
01"
=ten1;
10"
=one2;
=ten2;
whenothers=>
null;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制器 设计 EDA 课程设计