实验八 交通灯控制电路的设计.docx

上传人:b****0 文档编号:12723312 上传时间:2023-04-21 格式:DOCX 页数:15 大小:45.12KB
下载 相关 举报
实验八 交通灯控制电路的设计.docx_第1页
第1页 / 共15页
实验八 交通灯控制电路的设计.docx_第2页
第2页 / 共15页
实验八 交通灯控制电路的设计.docx_第3页
第3页 / 共15页
实验八 交通灯控制电路的设计.docx_第4页
第4页 / 共15页
实验八 交通灯控制电路的设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验八 交通灯控制电路的设计.docx

《实验八 交通灯控制电路的设计.docx》由会员分享,可在线阅读,更多相关《实验八 交通灯控制电路的设计.docx(15页珍藏版)》请在冰豆网上搜索。

实验八 交通灯控制电路的设计.docx

实验八交通灯控制电路的设计

可编程逻辑设计

——实验八报告

 

学院:

物理与信息工程学院

专业:

通信工程

年级:

2007级

班级:

二班

学号:

110700221

姓名:

林明明

指导老师:

杨秀芝

 

实验八交通灯控制电路的设计

一、实验目的:

进一步学习复杂数字电路的设计方法,提高利用硬件描述语言进行电路设计的技巧和熟练程度。

二、实验要求及原理:

1、满足图1顺序工作流程。

图中设南北方向的红、黄、绿灯分别为NSR、NSY、NSG,东西方向的红、黄、绿灯分别为EWR、EWY、EWG。

它们的工作方式有些必须是并行进行的,即南北方向绿灯亮,东西方向红灯亮;南北方向黄灯亮,东西方向红灯亮;南北方向红灯亮,东西方向绿灯亮;南北方向红灯亮,东西方向黄红灯亮。

 

图1交通灯顺序工作流程图

2、应满足两个方向的工作时序:

即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,南北方向亮红灯时间应等于东西方向亮黄、绿灯时间之和。

时序流程图2所示。

图2中,假设每个单位时间为3秒,则南北、东西方向绿、黄、红灯亮时间分别15秒、3秒、18秒,一次循环为36秒。

其中红灯亮的时间为绿灯、黄灯亮的时间之和。

123456789

101112123456

NSG

NSY

NSR

EWR

EWG

EWY

t

5t

6t

t

 

图2交通灯时序工作流程图

3、十字路口要有数字显示,作为时间提示,以便人们更直观地把握时间。

具体为:

当某方向红灯亮时,置显示器为某值,然后以每秒减1计数方式方式工作,直至减到数为“0”,十字路口红、绿灯交换,一次工作循环结束,进入下一步某方向地工作循环。

例如:

当南北方向从黄灯转换成红灯时,置南北方向数字显示为24,并使数显计数器开始减“1”计数,当减到“0”,时,此时红灯灭,而南北方向的绿灯亮;同时,东西方向的红灯亮,并置东西方向的数显为24。

三、实验内容:

1、根据实验要求及原理1、2画出交通指示灯控制电路原理框图。

提示:

两个方向的控制电路可以共用一个24进制计数器实现。

2、用VHDL硬件描述语言层次化设计方法进行顶层文件和各模块电路的设计。

3、用QuartusII对设计进行编译、综合、仿真,给出仿真波形和时序分析数据(不包括数码显示部分)。

4、通过QuartusII集成环境,将设计下载到实验电路上进行硬件测试。

管脚锁定:

clk:

clk143clk1

start:

PIO2330SW1

NSGPIO1929LED12

NSYPIO2028LED11

NSRPIO2127LED10

EWGPIO22LED3

EWYPIO12LED2

EWRLED1

5、画出完整的交通灯控制电路原理框图(含数码显示部分)。

6、修改上述内容2的设计,增加数码显示部分。

注意:

两方向的计数要求分别显示在数码管1、2和数码管7、8上。

7、用MAX_plusⅡ对设计进行编译、综合、仿真,给出仿真波形和时序分析数据。

8、再次将设计下载到实验电路上进行硬件测试。

新增管脚锁定:

A(6):

PIO611SEGg

A(5):

PIO510SEGf

A(4):

PIO49SEGe

A(3):

PIO38SEGd

A

(2):

PIO27SEGc

A

(1):

PIO16SEGb

A(0):

PIO05SEGa

*S

(2):

80

*S

(1):

79

*S(0):

78

四、思考题:

1、控制电路除用有限状态机实现外,还可以采用什么方法实现?

2、如果增加夜间显示(即全部黄灯闪烁),电路该怎样设计?

实验结果:

交通灯控制电路原理框图:

顶层电路的VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitytrafficis

port(clk,start:

instd_logic;

NSG,NSY,NSR,EWG,EWY,EWR:

outstd_logic;

ledNS,ledEW:

outstd_logic_vector(7downto0)

);

end;

architecturebehavoftrafficis

componentNSEW

port(clk,start:

instd_logic;

NSG,NSY,NSR,EWG,EWY,EWR:

outstd_logic

);

endcomponent;

componentled7s

port(clock,start:

instd_logic;

ledns,ledew:

outstd_logic_vector(7downto0)

);

endcomponent;

signalclk0,clk1,clk2,clknsr,clkewr:

std_logic;

begin

u1:

NSEWportmap(clk=>clk,start=>start,

NSG=>NSG,NSY=>NSY,NSR=>NSR,

EWG=>EWG,EWY=>EWY,EWR=>EWR);

u2:

led7sportmap(clock=>clk,start=>start,

ledns=>ledNS,ledew=>ledEW);

end;

各模块电路的VHDL描述:

模块clock的VHDL描述——

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityclockis

port(clk,start:

instd_logic;

clk0,clk1,clk2:

outstd_logic

);

endclock;

architecturebehavofclockis

begin

process(clk,start)

variablecql:

std_logic_vector(6downto0);

begin

ifclk'eventandclk='1'then

ifstart='1'then

ifcql<48thencql:

=cql+1;

elsecql:

=(others=>'0');

endif;

ifcql<24then

clk1<='1';elseclk1<='0';

endif;

ifcql>23andcql<48then

clk2<='1';elseclk2<='0';

endif;

endif;

endif;

endprocess;

end;

模块cnt10的VHDL描述——

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT10IS

PORT(CLK,EN,LD:

INSTD_LOGIC;

CQ:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

D:

INSTD_LOGIC_VECTOR(3DOWNTO0);

COUT:

OUTSTD_LOGIC

);

ENDCNT10;

ARCHITECTUREBEHAVOFCNT10IS

BEGIN

PROCESS(CLK,EN)

VARIABLECQI:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFLD='1'THENCQI:

=D;

IFEN='1'THEN

IFCQI>0THENCQI:

=CQI-1;

ELSECQI:

="1001";

ENDIF;

ENDIF;

ENDIF;

ENDIF;

IFCQI=0THENCOUT<='1';

ELSECOUT<='0';

ENDIF;

CQ<=CQI;

ENDPROCESS;

ENDBEHAV;

模块NSG的VHDL描述——

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityNSGis

port(clk,start:

instd_logic;

cq:

outstd_logic_vector(3downto0);

oout:

outstd_logic

);

end;

architectureoneofNSGis

begin

process(clk,start)

variablecqi:

std_logic_vector(3downto0);

begin

ifclk'eventandclk='1'then

ifstart='1'then

ifcqi<11thencqi:

=cqi+1;

elsecqi:

=(others=>'0');

endif;

endif;

ifcqi<5thenoout<='1';

elseoout<='0';

endif;

endif;

cq<=cqi;

endprocess;

endone;

模块NSR的VHDL描述——

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityNSRis

port(clk,start:

instd_logic;

cq:

outstd_logic_vector(3downto0);

oout:

outstd_logic

);

end;

architectureoneofNSRis

begin

process(clk,start)

variablecqi:

std_logic_vector(3downto0);

begin

ifclk'eventandclk='1'then

ifstart='1'then

ifcqi<11thencqi:

=cqi+1;

elsecqi:

=(others=>'0');

endif;

endif;

ifcqi<6thenoout<='0';

elseoout<='1';

endif;

endif;

cq<=cqi;

endprocess;

endone;

模块NSEW的VHDL描述——

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityNSEWis

port(clk,start:

instd_logic;

NSG,NSY,NSR,EWG,EWY,EWR:

outstd_logic

);

end;

architectureoneofNSEWis

begin

process(clk,start)

variablecqi:

std_logic_vector(5downto0);

begin

ifclk'eventandclk='1'andstart='1'then

ifcqi<47thencqi:

=cqi+1;

elsecqi:

=(others=>'0');

endif;

ifcqi<21thenNSG<='1';

elseNSG<='0';

endif;

ifcqi>20andcqi<25thenNSY<='1';

elseNSY<='0';

endif;

ifcqi<25thenEWR<='1';

elseEWR<='0';

endif;

ifcqi>24andcqi<49thenNSR<='1';

elseNSR<='0';

endif;

ifcqi>24ANDcqi<45thenEWG<='1';

elseEWG<='0';

endif;

ifcqi>44ANDCQI<49thenEWY<='1';

elseEWY<='0';

endif;

endif;

endprocess;

endone;

模块led7s的VHDL描述:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityled7sis

port(clock,start:

instd_logic;

ledns,ledew:

outstd_logic_vector(7downto0)

);

end;

architecturebehavofled7sis

signalcqi:

std_logic_vector(7downto0);

signalcql:

std_logic_vector(7downto0);

signalcnt6:

std_logic_vector(7downto0);

signalclk:

std_logic;

begin

clk<=clock;

process(clk)

begin

ifclk'eventandclk='1'then

ifstart='1'then

ifcnt6<47thencnt6<=cnt6+1;

elsecnt6<="00000000";

endif;

endif;

endif;

endprocess;

process(clk)

begin

ifclk'eventandclk='1'then

ifstart='1'then

ifcqi>32thencqi<=cqi-1;

elsifcqi=32thencqi<="00011001";

elsifcqi>16thencqi<=cqi-1;

elsifcqi=16thencqi<="00001001";

elsifcqi>0thencqi<=cqi-1;

elsifcqi=0andcnt6=0

thencqi<="00100100";

endif;

ifcql>32thencql<=cql-1;

elsifcql=32thencql<="00011001";

elsifcql>16thencql<=cql-1;

elsifcql=16thencql<="00001001";

elsifcql>0thencql<=cql-1;

elsifcql=0andcnt6=24

thencql<="00100100";

endif;

endif;

endif;

endprocess;

ledew<=cqi;

ledns<=cql;

end;

 

交通灯工作时序仿真波形:

测试结果及分析:

(1)东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,南北方向亮红灯时间应等于东西方向亮黄、绿灯时间之和.

(2)当某方向红灯亮时,置显示器为某值,然后以每秒减1计数方式方式工作,直至减到数为“0”,十字路口红、绿灯交换,一次工作循环结束,进入下一步某方向地工作循环。

例如:

当东西方向从黄灯转换成红灯时,置东西方向数字显示为24,并使数显计数器开始减“1”计数,当减到“0”,时,此时红灯灭,而东西方向的绿灯亮;同时,南北方向的红灯亮,并置南北方向的数显为24。

 

【回答问题】

1、控制电路除用有限状态机实现外,还可以采用什么方法实现?

2、如果增加夜间显示(即全部黄灯闪烁),电路该怎样设计?

答:

1.还可以用进程语句实现,用一个十二进制的计数器作为控制模块,则EWR、EWG、EWY、NSR、NSG、NSY在计数器不同输出的时候有相应的输出。

2.把黄灯输出信号EWY、NSY作为使能端,接到一个锁存器上,锁存器的输入时一个频率较高的信号,输出接黄色LED。

当EWY、NSY=1时,黄灯闪烁。

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

当前位置:首页 > 医药卫生 > 临床医学

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

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