EDA实验报告实验四交通灯控制器设计.docx

上传人:b****7 文档编号:15544759 上传时间:2023-07-05 格式:DOCX 页数:15 大小:241.17KB
下载 相关 举报
EDA实验报告实验四交通灯控制器设计.docx_第1页
第1页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第2页
第2页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第3页
第3页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第4页
第4页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第5页
第5页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第6页
第6页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第7页
第7页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第8页
第8页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第9页
第9页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第10页
第10页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第11页
第11页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第12页
第12页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第13页
第13页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第14页
第14页 / 共15页
EDA实验报告实验四交通灯控制器设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

EDA实验报告实验四交通灯控制器设计.docx

《EDA实验报告实验四交通灯控制器设计.docx》由会员分享,可在线阅读,更多相关《EDA实验报告实验四交通灯控制器设计.docx(15页珍藏版)》请在冰点文库上搜索。

EDA实验报告实验四交通灯控制器设计.docx

EDA实验报告实验四交通灯控制器设计

实验四交通灯控制器设计

一、实验目的

1学习与日常生活相关且较复杂数字系统设计;

2、进一步熟悉EDA实验装置和QuartusH软件的使用方法;

3、学习二进制码到BCD码的转换;

4、学习有限状态机的设计应用。

二、设计要求

完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个

由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体

要求如下:

1有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;

2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;

3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请求信号S=1,其余时间S=0;

4、平时系统停留在主干道通行(MGCR)状态,一旦S信号有效,经主道黄灯4秒(MYCR)状态后转入乡间公路通行(MRCG)状态,但要保证主干道通行大于一分钟后才能转换;

5、一旦S信号消失,系统脱离MRCG状态,即经乡道黄灯4秒(MRCY)状态进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟;

6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。

三、主要仪器设备

1、微机1台

2、Quartusll集成开发软件1套

3、EDA实验装置1套四、实验思路

1、设计一个状态寄存器,控制六盏灯的亮与灭2、设计一个计时器,控制各状态的持续时间,计时器应满足以下要求:

1)当S=1,且计数器已完成60计数时,计数器进入模4计数,随后进入模20计数,再进入模4计数,再回到模60计数

2)当计数器进行摸20计数时,一旦S变为0,计数器立马进入模4计数,再进入模60计数

3)完成模20计数后,不论S为0或1,计数器进入模4计数,再进入模60计数

4)若计数器未完成模60计数,不论S如何变话,计数器将继续进行模60计数

3、设计一个译码显示电路,将计时器的八位BCD码转化为数码管可以显示的段位码通过动态扫描电路实现。

4、设计一个分频器,将扫描频率分频为基准频率,提供计时器,状态器,译码显示的钟控。

5、使用文本设计4个底层文件,并生成相应元器件,再使用原理图设计顶层文件

五、实验步骤

1、建立工作库文件夹和编辑设计文件

1)建立一个文件夹保存工程文件;

2)打开Quartusll,建立新的VHDL文件,再打开的页面下输入以下程序

控制6盏灯的模块代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYjtdIS

PORT(clk,RESET,S:

INSTD_LOGIC;

COUNT:

INSTD_LOGIC_VECTOR(7DOWNTO0);

MG,MY,MR,CG,CY,CR:

OUTSTD_LOGIC);

ENDjtd;

ARCHITECTUREbehavOFjtdIS

TYPEjtdSTATEIS(mgcr,mycr,mrcg,mrcy);

SIGNALSTATE:

jtdSTATE;

BEGIN

PROCESS(RESET,STATE,clk,S)

BEGIN

IFRESET='1'THENSTATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0:

ELSIFclk'EVENTANDclk='1'then

CASESTATEIS

WHENmgcr=>IFCOUNT="00000001"ANDS='1'THENSTATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';

ELSESTATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';ENDIF;

WHENmycr=>IFCOUNT="00000001"THENSTATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';

ELSESTATE<=mycr;MY<='1';CR<='1';MG<='0';MR<='0';CG<='0';CY<='0';ENDIF;

WHENmrcg=>IFCOUNT="00000001"ORS='0'THENSTATE<=mrcy;MR<='1';CY<='1';MY<='0';MG<='0';CR<='0';CG<='0';

ELSESTATE<=mrcg;MR<='1';CG<='1';MG<='0';MY<='0';CR<='0';CY<='0';ENDIF;

WHENmrcy=>IFCOUNT="00000001"THENSTATE<=mgcr;MG<='1';CR<='1';MR<='0';MY<='0';CY<='0';CG<='0';

ELSESTATE<=mrcy;MR<='1';CY<='1';MY<='0:

MG<='0';CR<='0';CG<='0:

ENDIF;

ENDCASE;

ENDIF;

ENDPROCESS;

ENDbehav;

控制数码管显示倒计时数并且输出:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYJISHUIS

PORT(clk,S:

INSTD_LOGIC;

tim:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDJISHU;

ARCHITECTUREbehavOFJISHUIS

TYPERGYIS(mgcr,mycr,mrcg,mrcy);

SIGNALSTATE:

RGY;

BEGIN

PROCESS(clk)

VARIABLEb:

STD_LOGIC:

='0';

VARIABLEa:

STD_LOGIC:

='0';

VARIABLEth,tl:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

--IFRESET='1'THENSTATE<=mgcr;th:

="0000";tl:

="0000";a:

='0';b:

='0';

IFclk'EVENTANDclk='1'THEN

CASESTATEIS

WHENmgcr=>IFS='1'ANDb='1'THENSTATE<=mycr;a:

='0';th:

="0000";tl:

="0100";b:

='0';ELSIFS='0'ANDb='1'THENSTATE<=mgcr;a:

='1';th:

="0000";tl:

="0001";ELSE

IFa='0'THEN

th:

="0110";tl:

="0000";a:

='1';

else

IFNOT(th="0000"ANDtl="0010")then

IFtl="0000"then

tl:

="1001";th:

=th-1;

elsetl:

=tl-1;

ENDIF;

ELSEth:

="0000";tl:

="0001";a:

='0';b:

='1';

ENDIF;

ENDIF;

ENDIF;

WHENmycr=>IFa='0'THEN

th:

="0000";tl:

="0100";a:

='1';

else

IFNOT(th="0000"ANDtl="0010")then

tl:

=tl-1;

ELSEth:

="0000";tl:

="0001";a:

='0';STATE<=mrcg;

ENDIF;

ENDIF;

WHENmrcg=>IFS='1'THEN

IFa='0'THEN

th:

="0010";tl:

="0000";a:

='1';

else

IFNOT(th="0000"ANDtl="0010")then

IFtl="0000"then

tl:

="1001";th:

=th-1;

elsetl:

=tl-1;

ENDIF;

ELSEth:

="0000";tl:

="0001";a:

='0';STATE<=mrcy;

ENDIF;

ENDIF;

ELSEa:

='0';STATE<=mrcy;th:

="0000";tl:

="0100";

ENDIF;

WHENmrcy=>IFa='0'THENth:

="0000";tl:

="0100";a:

='1';

else

IFNOT(th="0000"ANDtl="0010")then

tl:

=tl-1;

ELSEth:

="0000";tl:

="0001";a:

='0';STATE<=mgcr;

ENDIF;

ENDIF;

ENDCASE;

tim<=th&tl;

ENDIF;

endprocess;

ENDbehav;

动态译码显示电路

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdispIS

PORT(CLK:

INSTD_LOGIC;

INPO:

INSTD_LOGIC_VECTOR(7DOWNTO0);

sl0,sl1,sl2:

bufferSTD_LOGIC;

SEL:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

SG:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

GW,SW:

bufferSTD_LOGIC_VECTOR(3DOWNTO0)

);

ENDDISP;

ARCHITECTUREbehavOFDISPIS

SIGNALCNT8:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALA:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

GW<=INPO(3downto0);

SW<=INPO(7downto4);

P3:

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFCNT8<"001"THENCNT8<=CNT8+1;

ELSECNT8<=(OTHERS=>'O');

ENDIF;

ENDIF;

SEL(O)<=slO;

SEL

(1)<=sl1;

SEL

(2)<=sl2;

CASECNT8IS

WHEN"000"=>sl2<='0';sl1<='1';sl0<='0';A<=GW;

WHEN"001"=>sl2<='0';sl1<='0';sl0<='1';A<=SW;

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

P4:

PROCESS(A)

BEGIN

CASEAIS

WHEN"0000"=>SG<="00111111";WHEN"0001"=>SG<="00000110";

WHEN"0010"=>SG<="01011011";WHEN"0011"=>SG<="01001111";

WHEN"0100"=>SG<="01100110";WHEN"0101"=>SG<="01101101";

WHEN"0110"=>SG<="01111101";WHEN"0111"=>SG<="00000111";

WHEN"1000"=>SG<="01111111";WHEN"1001"=>SG<="01101111";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

ENDbehav;

分频器电路:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFENIS

PORT(CLK:

INSTD_LOGIC;

FOUT:

OUTSTD_LOGIC);

END;

ARCHITECTUREoneOFFENIS

SIGNALFULL:

STD_LOGIC;

BEGIN

P_REG:

PROCESS(CLK)

VARIABLECNT8:

STD_LOGIC_VECTOR(4DOWNTO0);--INPORTANT

BEGIN

IFCLK'EVENTANDCLK='1'THEN--512fen

IFCNT8="11111"THEN

CNT8:

="00000";--当CNT8计数计满时,输入数据D被同步预置给计数器CNT8

FULL<='1';--同时使溢出标志信号FULL输出为高电平

ELSECNT8:

=CNT8+1;--否则继续作加1计数

FULL<='0';--且输出溢出标志信号FULL为低电平

ENDIF;

ENDIF;

ENDPROCESSP_REG;

P_DIV:

PROCESS(FULL)

VARIABLECNT2:

STD_LOGIC;

BEGIN

IFFULL'EVENTANDFULL='1'THEN

CNT2:

=NOTCNT2;--如果溢出标志信号FULL为高电平,D触发器输出取反

IFCNT2='1'THENFOUT<='1';ELSEFOUT<='0';

ENDIF;

ENDIF;

ENDPROCESSP_DIV;

END;

2、编译过程

1)输入完程序之后逐个编译

2)逐个编译无错之后进行全程编译

3、将以上模块生成元器件

1)控制6盏灯的模块:

2)控制数码管显示倒计时数的模块:

 

3)控制动态扫描显示的模块

4、建立新的工程,将各个模块的元器件用原理图连接,进行编译。

原理图如下:

5、系统仿真

1)建立新的波形激励文件

2)在波形编辑器窗口添加节点

3)通过Edit->EndTime来设定仿真结束时间

4)在CLOCK窗口中设置elk的时钟周期为10ns

5)点击save保存

6)通过Tools下的SimulatorTools项进行仿真,然后观察输出波形仿真波形如下:

¥电1辽鱼

呷化us

148.T8ue

1

151.34us

1

153.9ue

156.-46ue

159.0?

ue

11

14.BE

elk

A【1

厂「

T-TLTLrLrLrL-rLjn.rrjn_TLn

Ai

mg

A

my

k1

mr

Ai

A*

I

cy

Ai

er

A

/

<>

1

[3tim

Hd

恳02X

01X20X

19X18Xl7XIB

7is/x

04X03xa

2XDJXSOX5?

f-

•|1■J|J*

f

f

当S一旦为0,乡道立刻进入黄灯状态,并持续四秒

6、引脚设定

六、实验现象及验证

1、当“电平1”不按时(S为0),数码管一直保持60秒倒计时,计数结束后数码管保

 

持000001状态,LED灯保持001100;

2、当按下“电平1”(S为1),数码管倒计时4秒,LED灯011100;随后倒计时20秒,LED灯100001,此后倒计时4秒,LED灯001011;最后进入倒计时60秒;

3、当倒计时20秒时,若灭掉“电平1”(S变为0),数码管倒计时4秒,LED灯001011;最后进入倒计时60秒。

(6个led分别对应主红黄绿、乡红黄绿)

七、实验心得

1、学会了模可变倒计时计数器,熟悉了IFNOT语句,这次试验用了四个模块,总体思路比较清晰,明白了主绿乡红、主黄乡红、主红乡绿、主红乡黄4个状态之间的循环。

2、主要编写了动态译码电路和分频器源代码,对代码的编写要求更加清楚明晰,

并且能够在熟悉个元件端口及功能的基础上,能够对元件进行顶层逻辑连接,使之达到

所需的实验要求。

3、此实验的仿真与硬件结果存在一定的偏差,说明仿真结果并非完全属实,因此更要注重实践,以实验结果为准。

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2