基于FPGA的交通灯控制课程设计Word文档格式.docx

上传人:b****5 文档编号:18202337 上传时间:2022-12-14 格式:DOCX 页数:18 大小:183.64KB
下载 相关 举报
基于FPGA的交通灯控制课程设计Word文档格式.docx_第1页
第1页 / 共18页
基于FPGA的交通灯控制课程设计Word文档格式.docx_第2页
第2页 / 共18页
基于FPGA的交通灯控制课程设计Word文档格式.docx_第3页
第3页 / 共18页
基于FPGA的交通灯控制课程设计Word文档格式.docx_第4页
第4页 / 共18页
基于FPGA的交通灯控制课程设计Word文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

基于FPGA的交通灯控制课程设计Word文档格式.docx

《基于FPGA的交通灯控制课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的交通灯控制课程设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

基于FPGA的交通灯控制课程设计Word文档格式.docx

它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

当今社会是数字化的社会,是数字集成电路广泛应用的社会。

数字集成电路本身在不断进行更新换代,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。

随着电子技术的发展,特别是大规模集成电路和计算机技术的研制和发展,让电子产品设计有了更好的应用市场,实现方法也有了更多的选择,而电子电路的设计却变得越来越复杂,使用“语言”进行电子设计已成为一种趋势。

现代电子系统设计方法是设计师自己设计芯片来实现电子系统的功能,将传统的固件选用及电路板设计工作放在芯片设计中进行。

在这些专业化软件中,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 

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:

);

--将数值分为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;

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;

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-countnum;

con1= 

the

con2 

m= 

00

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1