EDA实验报告实验四交通灯控制器设计说明.docx
- 文档编号:8468616
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:13
- 大小:205.75KB
EDA实验报告实验四交通灯控制器设计说明.docx
《EDA实验报告实验四交通灯控制器设计说明.docx》由会员分享,可在线阅读,更多相关《EDA实验报告实验四交通灯控制器设计说明.docx(13页珍藏版)》请在冰豆网上搜索。
EDA实验报告实验四交通灯控制器设计说明
实验四交通灯控制器设计
一、实验目的
1、学习与日常生活相关且较复杂数字系统设计;
2、进一步熟悉EDA实验装置和QuartusU软件的使用方法;
3、学习二进制码到BCD码的转换;
4、学习有限状态机的设计应用。
二、设计要求
完成设计、仿真、调试、下载、硬件测试等环节,在型EDA实验装置上实现一个由一条主干道和一条乡间公路的汇合点形成的十字交叉路口的交通灯控制器功能,具体要求如下:
1、有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;
2、交通灯由绿转红前有4秒亮黄灯的间隔时间,由红转绿没有间隔时间;
3、乡间公路右侧各埋有一个串连传感器,当有车辆准备通过乡间公路时,发出请
求信号S=1,其余时间S=0;
4、平时系统停留在主干道通行(MGCR状态,一旦S信号有效,经主道黄灯4秒
(MYCR状态后转入乡间公路通行(MRC)状态,但要保证主干道通行大于一分钟后才能转换;
5、一旦S信号消失,系统脱离MRC状态,即经乡道黄灯4秒(MRC)伏态进入MGCR状态,即使S信号一直有效,MRC状态也不得长于20秒钟;
6、控制对象除红绿灯之外,还包括分别在主干道和乡间公路各有一个两位十进制倒计时数码管显示。
三、主要仪器设备
1、微机1台
2、QuartusII集成开发软件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盏灯的模块代码:
LlBRARYlEEE;
USElEEE.STD_LOGlC_1164.ALL;
USElEEE.STD_LOGlC_UNSlGNED.ALL;
ENTlTYjtdlS
PORT(clk,RESET,S:
lNSTD_LOGlC;
COUNT:
lNSTD_LOGlC_VECTOR(7DOWNTO0);MG,MY,MR,CG,CY,CR:
OUTSTD_LOGlC);
ENDjtd;
ARCHlTECTUREbehavOFjtdlS
TYPEjtdSTATElS(mgcr,mycr,mrcg,mrcy);
SlGNALSTATE:
jtdSTATE;
BEGlN
PROCESS(RESET,STATE,clk,S)
BEGlN
lFRESET='1'THENSTATE<=mgcr;MG<='1';CR<='1';MY<='0';MR<='0';CG<='0';CY<='0';
ELSlFclk'EVENTANDclk='1'then
CASESTATElS
WHENmgcr=>lFCOUNT="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';ENDlF;
WHENmycr=>lFCOUNT="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';ENDlF;
WHENmrcg=>lFCOUNT="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';ENDlF;
WHENmrcy=>lFCOUNT="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
WHEN
mgcr=>IFS='1'
AND
b='1'
THEN
STATE<=mycr;a:
='0';th:
="0000";tl:
="0100";b:
='0';
ELSIF
S='0'
AND
b='1'
THEN
STATE<=mgcr;a:
='1';th:
="0000";tl:
="0001";
ELSE
IFa='0'THENth:
="0110";tl:
="0000";a:
='1';
else
IFNOT(th="0000"ANDtl="0010")then
IFtl="0000"thentl:
="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"thentl:
="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'THEN
th:
="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=>'0');
ENDIF;
ENDIF;
SEL(0)<=sl0;
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
CNT8:
="00000";--当CNT8计数计满时,输入数据D被同步预置给计数器
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)控制分频的模块
FEN
i
L
CLKFOOT
iitst
i*g
4、建立新的工程,将各个模块的元器件用原理图连接,进行编译原理图如下:
P"EM■■■■■■■!
«■?
■■■■■ai---si
5、系统仿真
1)建立新的波形激励文件
2)在波形编辑器窗口添加节点
3)通过Edit->EndTime来设定仿真结束时间
4)在CLOC窗口中设置elk的时钟周期为10ns
5)点击save保存
6)通过Tools下的SimulatorTools项进行仿真,然后观察输出波形
仿真波形如下:
.专业.整理.
住炬S*2
Y15
英〔若世丫削Y甜上舉
■ui
2mlaEf
elk
A.
V
11
■F
A■
ktf
Ai
X
Ai
邸
Ai
PIT
A
xnh
A1
田l:
i・
HE
»*1e»
H.S
rl>
AiI
i.
h■
k
fa1
阿
4i
CC
1Li
er
Ai
Er
A
rst
hi
Elm
KC
60秒过后,若
S=1主道进入黄
灯状态并保持4秒
20秒过后,不论
S=1或0乡道进
入黄灯状态并保
持4秒
1J
:
(H
¥
T:
tE'
t1
I
141.7£
N&tii-±
Viluc
14.8f
4
1i
s
Ai
nE
A
ny
A1
nr
Ai
吃
Li
Ai
si3
A
|±jtin
Jtt
当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、此实验的仿真与硬件结果存在一定的偏差,说明仿真结果并非完全属实,因此更要注重实践,以实验结果为准。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 实验 报告 交通灯 控制器 设计 说明