FPGA课程设计基于VHDL的交通灯控制器设计12页doc.docx
- 文档编号:550045
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:11
- 大小:514.08KB
FPGA课程设计基于VHDL的交通灯控制器设计12页doc.docx
《FPGA课程设计基于VHDL的交通灯控制器设计12页doc.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计基于VHDL的交通灯控制器设计12页doc.docx(11页珍藏版)》请在冰豆网上搜索。
FPGA课程设计基于VHDL的交通灯控制器设计12页doc
CPLD/FPGA开发技术大作业
题目:
基于VHDL的交通灯控制器设计
院系:
信息与电气工程学院
班级:
08级电子信息工程
学号:
1288401912884021
学生姓名:
××××××
指导教师:
成绩:
2011年7月
基于VHDL的交通灯控制器设计
一、系统功能与要求
1系统功能:
实现十字路口的交通灯显示。
2系统要求:
(1)用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯;
(2)用两组数码管作为东西和南北方向的倒计时显示,显示时间为红灯45秒、绿灯50秒、黄灯5秒;
(3)按照实际红绿灯规则,使红、黄、绿灯与其显示时间。
2、设计思路及实现方法
1基本思路
要完成本实验,首先必须了解交通路灯的亮灭规律。
本实验需要用到实验箱上交通灯模块中的发光二极管,即红、黄、绿各三个。
依人们的交通常规,“红灯停,绿灯行,黄灯提醒”。
其交通灯的亮灭规律为:
初始态是两个路口的红灯全亮,之后东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。
闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。
闪烁若干次后,再切换到东西路口方向,重复上述过程。
2实现方法
(1)交通灯控制器用一个有限自动机来实现上述功能,它定义了5种状态,见下表:
南北灯
东西灯
状态0
绿
红
状态1
黄
红
状态2
红
绿
状态3
红
黄
状态4
红
红
其中状态4为初始状态,其状态转换图如下:
值状态
0000
1001
0102
1103
1114
在结构体中包含一个进程,此进程带一个显示敏感信号表,其敏感信号包括TimeL,Times和Cars。
所谓敏感信号表,如以下语句:
Process(cars,timeoutL,timeoutS)
带显示敏感信号表的进程,当敏感信号表中的任何一个信号上发生事件时,此进程将被激活。
进程说明部分定义的几个变量的意义如下:
newstate:
下一个状态值。
current_state:
当前状态值。
newHL:
南北方向灯的状态,三位位长的二进制位串,每一位分别表示绿、黄红灯的亮灭状态。
如“100”表示路灯为红灯,“010”表示路灯为黄灯“001”表示路灯为绿灯
newFL:
东西方向灯的状态,三位位长的二进制位串,每一位分别表示绿、黄红灯的亮灭状态。
newST:
用于启动外部计时器的输出位。
在进程中使用一条case语句完成状态的转换关系。
Casecurrent_stateis
When"000"=>newHL:
=“100”newFL:
=“001”;
if(Cars="1")and(timeoutL="1")then
newstate:
="100";newST:
="1";
newHL:
="010";newFL:
="001";
else
newstate:
="000";newST:
="0";
endif;
When"100"=>newHL:
=“010”newFL:
=“001”;
if(timeoutS="1")then
newstate:
="010";newST:
="1";
newHL:
="001";newFL:
="100";
else
newstate:
="100";newST:
="0";
endif;
When"010"=>newHL:
=“001”newFL:
=“100”;
if(Cars="1")or(timeoutL="1")then
newstate:
="100";newST:
="1";
newHL:
="001";newFL:
="010";
else
newstate:
="010";newST:
="0";
endif;
When"110"=>newHL:
=“001”newFL:
=“010”;
if(timeoutS="1")then
newstate:
="000";newST:
="1";
newHL:
="100";newFL:
="001";
else
newstate:
="110";newST:
="0";
endif;
When"111"=>newstate:
="000";
newHL:
="100";
newFL:
="001";
newST:
="0";
Whenothers=>
endcase;
在case语句的不同分支中又使用if语句完成状态的判断和转换。
需要注意的是信号在赋值之后,其值并不立即有效(这是由于delta延迟的存在所造成的),只有变量的值在赋值之后会立即有效。
因此在本例中用于表示状态的current_stat被定义为变量。
3、模拟结果分析
模拟结果部分波形如图所示:
初始时,东西路为红灯,其值为001,南北路上为绿灯,其值为100.当东西路上来车时,则南北路上的灯开始转为黄色,但此时东西路上的灯仍为红灯,同时有限状态机的状态开始发生变化。
经过一段时间后,南北路转为红灯,同时东西路转为绿灯,同时有限状态机的状态变为010,再经过一段较短的时间后,不管东西路上是否有车,灯转为黄色,此时南北路上仍为红灯,其后,东西路上变为红灯,南北路上变为绿灯。
周而复始,不断循环。
三、设计与仿真结果分析
1程序:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYtrafficis
GENERIC(green1:
integer:
=100;--定义主道绿灯亮50S
yellow1:
integer:
=50;--定义主道黄灯亮25S
green2:
integer:
=150;--定义支道绿灯亮40S
yellow2:
integer:
=50);--定义支道黄灯亮25S
PORT(
CLK,RST:
INSTD_LOGIC;
lgt1_r,lgt1_y,lgt1_g,lgt2_r,lgt2_y,lgt2_g:
outSTD_LOGIC);
Endtraffic;
ARCHITECTURErtloftrafficis
Typestatesis(st0,st1,st2,st3);--定义控制器各种状态
Signalstate:
states:
=st0;--初始化状态
Signalcnt:
integerrange0to200:
=1;--定义计数器
Signalcnt_enb:
std_logic:
='0';---初始化计数器使能信号
signalclkcnt:
std_logic_vector(18downto0);
constantdivcnt:
std_logic_vector(18downto0):
="11110000";
signalclkdiv:
std_logic;
signaltc_clkcnt:
std_logic;
signalclk_int:
std_logic;
begin
process(clk,rst)
begin
if(rst='0')then
clkcnt<="00000000";
elsif(clk'eventandclk='1')then
if(clkcnt=divcnt)then----//t=498752*25ns=12.5ms
clkcnt<="00000000";
else
clkcnt<=clkcnt+1;
endif;
endif;
endprocess;
tc_clkcnt<='1'whenclkcnt=divcntelse--//12.5ms产生计数溢出脉冲'0';
process(tc_clkcnt,rst)
begin
if(rst='0')then
clkdiv<='0';
elsif(tc_clkcnt'eventandtc_clkcnt='1')then
clkdiv<=notclkdiv;--//翻转时钟t=25msf=40hz
endif;
endprocess;
process(clkdiv,rst)
begin
if(rst='0')then
clk_int<='0';
elsif(clkdiv'eventandclkdiv='1')then
clk_int<=notclk_int;--//分频t=50msf=20hz
endif;
endprocess;
Process(clk_int,rst)
Begin
if(rst='0')then
state<=st0;
cnt<=1;
Elsif(clk_int'eventandclk_int='1')then
if(cnt_enb='1')then
cnt<=cnt+1;--计数器计数
else
cnt<=1;
endif;
Casestateis
whenst0=>
if(cnt=green1)then
state<=st1;
Else
state<=st0;Endif;
whenst1=>
if(cnt=yellow1)then
state<=st2;
Else
state<=st1;Endif;
whenst2=>
if(cnt=green2)then
state<=st3;
Else
state<=st2;Endif;
whenst3=>
if(cnt=yellow2)then
state<=st0;
Else
state<=st3;Endif;
Endcase;
Endif;
Endprocess;
Process(state)
Begin
Casestateis
whenst0=>
lgt1_r<='0';
lgt1_y<='1';
lgt1_g<='1';
lgt2_r<='0';
lgt2_y<='1';
lgt2_g<='1';
Cnt_enb<='1';
if(cnt=green1)then
cnt_enb<='0';
endif;
whenst1=>
lgt1_r<='1';
lgt1_y<='1';
lgt1_g<='0';
lgt2_r<='1';
lgt2_y<='0';
lgt2_g<='1';
Cnt_enb<='1';
if(cnt=yellow1)then
cnt_enb<='0';
endif;
whenst2=>
lgt1_r<='0';
lgt1_y<='0';
lgt1_g<='1';
lgt2_r<='1';
lgt2_y<='1';
lgt2_g<='1';
Cnt_enb<='1';
if(cnt=green2)then
cnt_enb<='0';
endif;
whenst3=>
lgt1_r<='1';
lgt1_y<='0';
lg
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课程设计 基于 VHDL 交通灯 控制器 设计 12 doc