eda课程设计交通灯带左拐.docx
《eda课程设计交通灯带左拐.docx》由会员分享,可在线阅读,更多相关《eda课程设计交通灯带左拐.docx(11页珍藏版)》请在冰豆网上搜索。
eda课程设计交通灯带左拐
eda课程设计交通灯带左拐
1设计任务和要求.........................................................2
1.1设计任务............................................................2
1.2交通灯控制器的基本要求..............................................2
2工作原理及方案设计.....................................................2
2.1交通灯控制器的设计原理..............................................2
2.2交通灯控制器的基本方案...............................................3
3系统设计...............................................................4
3.1计数器的设计........................................................4
3.2控制器的设计........................................................4
3.3分位器的设计........................................................5
3.4交通灯控制器的顶层原理..............................................5
4参考程序...............................................................6
4.1计数器的程序........................................................6
4.2控制器的程序.......................................................7
4.3分位电路程序.......................................................10
4.4.七段译码电路的程序................................................11
5系统调试与性能分析.....................................................13
5.1交通灯计数器波形图.................................................13
5.2控制器的波形图......................................................13
5.3分位的波形图.......................................................14
5.4七段译码电路的波形图...............................................14
1设计任务和要求
1.1设计任务
用FPGA实现一个智能交通灯系统,根据设计要求分析智能交通灯系统的基本原理,设计系统框图,设计完成后给出FPGA占用资源分析。
1.2交通灯控制器的基本要求
(1)道路足够宽,有双向六通道。
车辆直行不允许车辆左拐,允许右拐。
须另设左拐时间。
针对上述通行规则,车辆控制灯有直行(?
)、左拐(?
)和右拐(?
)三个绿色指示灯、黄灯以及一个红色指示灯。
红色指示灯亮,代表禁止车辆通行、一个方向灯亮的顺序为绿灯、黄灯、左拐灯、红灯,前三种灯亮时间等于另一侧的红灯亮时间。
(2)车辆正常通行时间为40秒,黄灯为5秒,左拐为10秒,由各方向设置的倒计时显示器显示时间,向司机提剩余时间。
当一个方向车流量加大时,自动调节。
(3)行人过马路需提出申请,且只在车辆直行时才能响应行人的请求,行人在申请得到响应后方可穿越,穿越时间为60秒。
(4)交通警察有权随时指定系统停在某个状态,确保某个方向的车辆流通。
2工作原理及方案设计
2.1交通灯控制器的设计原理
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。
另外,还需要输入CLK时钟信号。
最后,要驱动七段数码管,显然还需要一个译码电路。
2
图2.1交通灯控制器原理图
2.2交通灯控制器的基本方案
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。
另外,作者所用的实验仪配备的晶振为50MHZ,因此还需要一个分频电路。
最后,要驱动七段数码管,显然还需要一个译码电路。
3
七段数码管分位译码电路
倒计时数字及Clk1Hz
“闪烁控制信
号”红,黄,绿Reset控制器计数器发光二极管
Hold
图2.2交通灯控制器系统框图
3系统设计
3.1计数器的设计
这里需要的计数器的计数范围为0~59。
计到59后,下一个时钟沿恢复到0,开始下一轮计数。
此外,当检测到特殊情况(hold=1)发生时,计数器暂停计数,而系统恢复信号则使计数器异步清0。
3.2控制器的设计
控制器的作用是根据计数器控制发光二极管的亮、灭,以及输出倒计时数值给七段数译管的分位译码电路。
此外,当检测到特殊情况时,无条件点亮红色的发光二极管。
由于控制器要对于数值进行判断,很容易想到用IF语句来实现。
本设计采用利用时
4
钟沿的下降沿读取前级计数器的计数植,然后做出反应。
GYGRGYGRNANB
E11
1
数码控制器显
示
器
clkNnanb
]
.2控制器符号框图图3
3.3分位器的设计
因为控制器输出的倒计时数值可能是1位或2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数。
(如25分为2和5,7分为0和7)
与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。
控制器中,引入了寄存器。
为了让读者开拓眼界,分位电路就用组合逻辑电路实现。
3.4交通灯控制器的顶层原理
交通灯控制器的核心范围是一个计数范围为0~59共(60秒)的计数器和一个根据计数值做出规定反映的控制器。
另外,还需要输入CLK时钟信号。
最后,要驱动七段数码管,显然还需要一个译码电路来完成交通灯控制器的设计。
5
图3.4交通灯控制器的顶层原理图
4参考程序
4.1计数器的程序
libraryieee;
useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycnt120is
port(clk,rst,hold:
instd_logic;
cq:
outstd_logic_vector(6downto0));
endcnt120;
architecturebehavofcnt120isbegin
process(clk,rst,hold)
variablecqi:
std_logic_vector(6downto0);
begin
ifrst='1'thencqi:
=(others=>'0');
elsifclk'eventandclk='1'then
6
ifhold='1'then
cqi:
=cqi+0;——当出现紧急情况时,计数器暂停计数
else
ifcqi<119thencqi:
=cqi+1;
elsecqi:
=(others=>'0');
endif;
endif;
endif;
cq<=cqi;
endprocess;
endbehav;
4.2控制器的程序
libraryieee;
useieee.std_logic_1164.all;
entitycontrolleris
port
(clock:
instd_logic;
countnum:
inintegerrange0to119;
numa,numb:
outintegerrange0to59;
reda,greena,yellowa,lefta,reda1,greena1,yellowa1,lefta1:
outstd_logic;
redb,greenb,yellowb,leftb,redb1,greenb1,yellowb1,leftb1:
outstd_logic);
end;
architecturebehaviorofcontrolleris
begin
process(clock)
begin
iffalling_edge(clock)then
7
ifcountnum<=39then
numa<=40-countnum;
reda<='0';
greena<='1';
yellowa<='0';
lefta<='0';
reda1<='0';
greena1<='1';
yellowa1<='0';
lefta1<='0';
elsif(countnum<=44)then
numa<=45-countnum;
reda<='0';
greena<='0';
yellowa<='1';
lefta<='0';
reda1<='0';
greena1<='0';
yellowa1<='1';
lefta1<='0';
elsif(countnum<=59)then
numa<=59-countnum;
reda<='0';
greena<='0';
yellowa<='0';
lefta<='1';
reda1<='0';
greena1<='0';
yellowa1<='0';
lefta1<='1';
else
8
numa<=119-countnum;
reda<='1';
greena<='0';
yellowa<='0';
lefta<='0';
reda1<='1';
greena1<='0';
yellowa1<='0';
lefta1<='0';
endif;
ifcountnum<=59then
numb<=59-countnum;
redb<='1';
greenb<='0';
yellowb<='0';
leftb<='0';
redb1<='1';
greenb1<='0';
yellowb1<='0';
leftb1<='0';
elsifcountnum<=99then
numb<=100-countnum;
redb<='0';
greenb<='1';
yellowb<='0';
leftb<='0';
redb1<='0';
greenb1<='1';
yellowb1<='0';
leftb1<='0';
elsifcountnum<=104then
9
numb<=105-countnum;
redb<='0';
greenb<='0';
yellowb<='1';
leftb<='0';
redb1<='0';
greenb1<='0';
yellowb1<='1';
leftb1<='0';
else
numb<=119-countnum;
redb<='0';
greenb<='0';
yellowb<='0';
leftb<='1';
redb1<='0';
greenb1<='0';
yellowb1<='0';
leftb1<='1';
endif;
endif;
endprocess;
end;
4.3分位电路程序
libraryieee;
useieee.std_logic_1164.all;
entityfenweiis
port(numin:
inintegerrange0to60;
numa:
outintegerrange0to9;
10
numb:
outintegerrange0to9);
end;
architecturebehavioroffenweiis
begin
process(numin)
begin
ifnumin>=50then
numa<=5;
numb<=numin-50;
elsifnumin>=40then
numa<=4;
numb<=numin-40;
elsifnumin>=30then
numa<=3;
numb<=numin-30;
elsifnumin>=20then
numa<=2;
numb<=numin-20;
elsifnumin>=10then
numa<=1;
numb<=numin-10;
else
numa<=0;
numb<=numin;
endif;
endprocess;
end;
4.4七段译码电路的程序
libraryieee;
11
useieee.std_logic_1164.all;entityymqis
port(ain:
instd_logic_vector(3downto0);
yout:
outstd_logic_vector(6downto0));
end;
architectureoneofymqisbegin
process(ain)
begin
caseainis
when"0000"=>yout<="0111111";when"0001"=>yout<="0000110";when"0010"=>yout<="1011011";when"0011"=>yout<="1001111";when"0100"=>yout<="1101101";when"0101"=>yout<="1111101";when"0110"=>yout<="0000111";when"0111"=>yout<="1111111";when"1000"=>yout<="1101111";whenothers=>yout<="0000000";endcase;
endprocess;
end;
12
5系统调试与性能分析
5.1交通灯计数器波形图
Clk为输入频率,上升沿有效。
cq为输出的计数值,最大为120。
当hold为低电平时,cq数值保持不变,当rst为低电平时cq数值复位。
5.2控制器的波形图
Clock为输入频率,当下降沿来时有效。
Greena到leftb1为东西南北的控制灯亮暗情况。
Numa,numb分别为东西,南北的控制灯的倒计时。
13
5.3分位的波形图
Numin的输入数值拆成个位numa和百位numb
5.4七段译码电路的波形图
译码器顾名思义,把qin输入的数值变成7位数的二进制码,驱动数码管显示。
数码管为
静态显示
14