基于FPGA的交通灯控制课程设计Word文档格式.docx
- 文档编号:18202337
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:18
- 大小:183.64KB
基于FPGA的交通灯控制课程设计Word文档格式.docx
《基于FPGA的交通灯控制课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制课程设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
当今社会是数字化的社会,是数字集成电路广泛应用的社会。
数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。
随着电子技术的发展,特别是大规模集成电路和计算机技术的研制和发展,让电子产品设计有了更好的应用市场,实现方法也有了更多的选择,而电子电路的设计却变得越来越复杂,使用“语言”进行电子设计已成为一种趋势。
现代电子系统设计方法是设计师自己设计芯片来实现电子系统的功能,将传统的固件选用及电路板设计工作放在芯片设计中进行。
在这些专业化软件中,EDA(ElectronicDesignAutomation)具有一定的代表性,EDA技术是一种基于芯片的现代电子系统设计方法。
基于EDA技术的现场可编程门阵列(FPGA),在数字系统设计和控制电路中越来越受到重视。
VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。
基于EDA技术的现场可编程门阵列(FPGA)电路,提出现场可编程门阵列(FPGA)是近年来迅速发展的大规模可编程专用集成电路(ASIC),在数字系统设计和控制电路中越来越受到重视。
VHDL语言是电子设计的主流硬件描述语言,它更适合进行行为描述,这种方式使得设计者专注于电路功能的设计,而不必过多地考虑具体的硬件结构。
目前以硬件描述语言所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
1.FPGA的应用
FPGA的应用可分为三个层面:
电路设计,产品设计,系统设计。
a.电路设计
连接逻辑,控制逻辑是FPGA早期发挥作用比较大的领域也是FPGA应用的基石。
事实上在电路设计中应用FPGA要求开发者要具备相应的硬件知识(电路知识)和软件应用能力(开发工具)。
b.产品设计
把相对成熟的技术应用到某些特定领域开发出满足行业需要并能被行业客户接受的产品。
这方面主要是FPGA技术和专业技术的结合问题,重点在性能,FPGA技术在这个领域是一个实现手段,FPGA因为具备接口,控制,功能IP,内嵌CPU等特点有条件实现一个构造简单,固化程度高,功能全面的系统产品设计。
c.系统级的应用
系统级的应用是FPGA与传统的计算机技术结合,实现一种FPGA版的计算机系统如用XilinxV-4,V-5系列的FPGA,实现内嵌POWERPCCPU,然后再配合各种外围功能,这个平台上跑LINIX等系统这个系统也就支持各种标准外设和功能接口了,这对于快速构成FPGA大型系统来讲是很有帮助的。
三.系统总体设计
1.设计任务
设计一个十字路口交通控制器,方向分为东南西北四个方向。
东西方向的红绿灯状态一样,南北方向的红绿灯状态一样。
每个方向上,有四盏灯,分别是左转灯、红灯、绿灯和黄灯。
左拐灯亮表示左转车辆可以通行;
红灯亮表示左转和直行车辆禁行;
绿灯亮表示直行车辆和右转的车辆可以通行;
黄灯亮表示左转和直行的车辆即将禁行;
倒计时显示器用来显示允许通行或禁止通行的时间倒计时。
2.系统设计流程
系统分析通过分析可以知道,所要设计的十字路口交通灯控制电路要能够使南北、东西各四个灯(红、黄、绿、左转),四个灯能够按顺序依次亮灭。
而且要求绿灯亮转红灯亮或者转左转灯亮之前要先转黄灯亮5秒,左转灯亮转红灯亮之前也要先转黄灯亮5秒,红灯亮可以直接转绿灯或左转灯亮(四种灯的循环顺序如图2-1所示)。
还要求四种灯的点亮时间能够以倒计时的形式显示出来。
可以用VHDL语言合理设计系统功能,使红黄绿左转灯的转换有一个准确的时间间隔和转换顺序。
经分析,系统的总体结构可以描述下述的方框图:
在FPGA设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:
输入信号:
复位开关信号reset;
外部时钟信号clk。
LED七段显示数码管的输出信号count1(6
downto
0),count2(6
0),count3(6
0),count4(6
0);
在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。
根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。
通过上面的分析,不难得知可以把交通灯控制系统划分为4个模块:
时钟分频模块,计数模块,控制模块,分位译码模块。
时钟分频模块:
把555多谐振荡器发出的较高频率脉冲用分频电路的到较第频率的时钟信号,本电路通过三次10分平分别得到10Hz、1Hz的时钟信号。
控制器电路:
根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。
当检测到手动控制信号(Con=’1’)时,执行手动控制;
计数器电路:
这里需要的计数器的计数范围为0~89。
计到89后,下一个时钟沿升为1时,开始下一轮计数,此外当系统复位信号(Reset=’1’)使计数器异步清‘0’。
手动信号(Con=’1’)使系统清‘0’。
分位译码电路:
因为控制器输出的倒计时数值可能是1位或者2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如20分为2和0,7分为0和7)。
七段数码管的译码电路根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管,我们用的是共阳极数码管,因此译码电路输出逻辑数值‘0’点亮二极管,译码电路输出逻辑数值‘1’熄灭二极管。
四.硬件设计
1.控制模块
控制模块的作用是根据计数器的数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
此外,当检测到特殊情况(EMI=‘1’)发生时,无条件点亮红灯的二极管(急救灯按下EMI='
1'
,则东西南北都亮红灯,在这种状态下原来的状态必须保持,即东西南北方向定时时间保持不变。
急救灯未按下或者按下后恢复,则继续计时(计时通过计数器ct),同时恢复东西南北原来灯的状态)。
2.时钟分频模块
分频器实现的是将高频时钟信号转换成低频时钟信号,用于触发控制器、计数器和扫描显示电路。
将频率变为1Hz的脉冲波,从而得到周期为1s的脉冲波。
3.分位译码模块
(1)因为控制输出的倒计时数值可能是1位或2位十进制数,所以七段数码管的译码电路前要加上分位电路(即将其分为两个1位的十进制数,如25分为2和5)。
(2)分位模块输出的计数值将十位数和个位数分别存到数组里,这样就可以得到两个路口倒计时时间显示的十位和个位信号。
4.计数模块
实现计数为0-80计数,计数到80后,下一个时钟沿回复到0,开始下一计数。
此外当检测到特殊情况(hold=“1”)发生时,计数器暂停计数,无条件点亮红色的发光二极管。
而系统复位信号Reset则使计数器异步清零。
五.实验程序设计
1.顶层模块
library
ieee;
use
ieee.std_logic_1164.all;
ieee.std_logic_unsigned.all;
entity
dingceng
is
port(clkd,resetd,cond,con1d:
in
std_logic;
count1:
out
std_logic_vector(6
—七段数码管显示
count2:
count3:
count4:
reda,yellowa,greena,lifta:
outstd_logic;
—a发光二极管输出
redb,yellowb,greenb,liftb:
outstd_logic);
—b发光二极管输出
end
dingceng;
architecture
one
of
2.实体定义
componentclk_10—脉冲输入
port(clk:
)--时钟频率为250KHz.
clk_div10
:
std_logic);
--十分频后脉冲输出
component;
component
counter
3.计数模块
port
(clk0:
)--脉冲信号输入
con:
--手动控制信号
reset:
--复位信号
countnum:
bufferinteger
range
0to89);
--0-89计数输出。
a4.控制模块
controller
(
clk1
)--脉冲信号输入
con1
--手动控制信号
con2:
--状态控制信号
countnum
integer
0
to
89–0-89计数输入;
numa,numb
25;
--东西、南北两个方向的倒计时数值输出
ra,ga,ya,la:
--ra,ga,ya,la发光二极管输出
rb,gb,yb,lb:
--rb,gb,yb,lb发光二极管输出
a5.分位模块
fenwei
port
numin:
--倒计时数值输入
numa,numb:
9
);
--将数值分为2个1位的十进制输出
yima
port(clk2:
bb:
9;
ya:
--BCD码输出
yb:
yc:
yd:
ye:
yf:
yg:
signal
a,b,c,d:
ww:
89;
yy1,yy2:
tt1,tt2,tt3,tt4:
begin
u0:
clk_10
map(clk=>
clkd,clk_div10=>
a);
u1:
b);
u2:
b,clk_div10=>
c);
u3:
counter
map(clk0=>
c,con=>
cond,reset=>
resetd,countnum=>
ww);
u4:
controller
map
(clk1=>
c,con1=>
cond,con2=>
con1d,countnum=>
ww,numa=>
yy1,numb=>
yy2,ra=>
reda,ga=>
greena,ya=>
yellowa,ga1=>
greena1,rb=>
redb,gb=>
greenb,yb=>
yellowb,gb1=>
greenb1);
u5:
fenwei
map(numin=>
yy1,numa=>
tt1,numb=>
tt2);
u6:
map
(numin=>
yy2,numa=>
tt3,numb=>
tt4);
u7:
map(clk2=>
b,bb=>
tt1,ya=>
count1(0),yb=>
count1
(1),yc=>
count1
(2),yd=>
count1(3),ye=>
count1(4),yf=>
count1(5),yg=>
count1(6));
u8:
),yf=>
count2(5),yg=>
count2(6));
u9:
3(4),yf=>
count3(5),yg=>
count3(6));
u10:
4(4),yf=>
count4(5),yg=>
count4(6));
one;
b1.实体定义
ieee.std_logic_arith.all;
is--脉冲输入
port(
clk
--时钟频率为250KHz
clk_10;
--脉冲输出
clk_temp
process(clk)
variable
std_logic_vector(2
constant
md
0)
=
"
101"
;
if(clk'
event
and
clk='
)
then
if(counter
md)then
(others
=>
'
0'
<
not
clk_temp;
if;
+
1
process;
tt4,ya=>
count4(0),yb=>
count4
(1),yc=>
count4
(2),yd=>
count4(3),ye=>
countport
tt3,ya=>
count3(0),yb=>
count3
(1),yc=>
count3
(2),yd=>
count3(3),ye=>
(clk2=>
tt2,ya=>
count2(0),yb=>
count2
(1),yc=>
count2
(2),yd=>
count2(3),ye=>
count2(4)
b2.计数模块
clk0:
buffer
89);
--复位信号
counter;
process
(reset,clk0)
if
reset='
0;
elsif
rising_edge(
clk0
con='
else
countnum=89
1;
b3.控制模块
controller;
m
7;
clk1,con1,con2,countnum
)
aa:
std_logic_vector(7
(clk1'
)then
='
>
65then
numb<
=90-countnum;
numa
70
aa
00011000"
else
00101000"
numa<
70-countnum;
45
numb
65-countnum;
=65-countnum;
50
10000100"
10000010"
50-countnum;
elseif
20
45-countnum;
=45-countnum;
25
01001000"
25-countnum;
then
20-countnum;
5
5-countnum;
con1=
the
con2
7
m=
00
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 交通灯 控制 课程设计