南昌大学实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:实验五十字路口交通灯控制器设计一、实验目的1、进一步加强经典状态机的设计2、学会设计模可变倒计时计数器二、实验要求一条主干道,一条乡间公路。组成十字路口,要求优先保证主干道通行。有MR(主红)、MY(主黄)、MG(主绿)、CR(乡红)、CY(乡黄)、CG(乡绿)六盏交通灯需要控制;交通灯由绿→红有4秒黄灯亮的间隔时间,由红→绿没有间隔时间;系统有MRCY、MRCG、MYCR、MGCR四个状态;乡间公路右侧各埋有一个传感器,当有车辆通过乡间公路时,发出请求信号S=1,其余时间S=0;平时系统停留在MGCR(主干道通行)状态,一旦S信号有效,经MYCR(黄灯状态)转入MRCG(乡间公路通行)状态,但要保证MGCR的状态不得短于一分钟;一旦S信号无效,系统脱离MRCG状态。随即经MRCY(黄灯状态)进入MGCR状态,即使S信号一直有效,MRCG状态也不得长于20秒钟。三、设计过程1,交通灯工作原理分析:根据交通灯控制器的功能与要求,将其总体电路分为状态控制,倒计时,数码管显示,信号灯显示模块。外部两路脉冲振荡器的频率选为1kHz和1Hz的信号,1khz信号用于显示模块的扫描,1Hz信号用做倒计时模块的计数脉冲。由于实验箱只能接一个信号源故加入分频模块。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、使用文本设计底层文件,并生成相应元器件,再使用原理图设计顶层文件四、实验步骤1、顶层文件的设计顶层原理图设计可以依据系统框图进行,由状态控制计数模块,数码管显示分频模块和交通灯显示模块(jtdjs,jtdfp,jtdxs)三部分组成。2,各模块设计文件①jtdjs:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJTDJSISPORT(CLK1,S,RESET:INSTD_LOGIC;b:BUFFERSTD_LOGIC;tim:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDJTDJS;ARCHITECTUREbehavOFJTDJSISTYPESTAIS(mgcr,mycr,mrcg,mrcy);SIGNALSTATE:STA;BEGINPROCESS(CLK1)--VARIABLEb:STD_LOGIC:='0';VARIABLEa:STD_LOGIC:='0';VARIABLEth,tl:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRESET='0'THENSTATE=mgcr;th:=0000;tl:=0000;a:='0';b='0';ELSIFCLK1'EVENTANDCLK1='1'THENCASESTATEISWHENmgcr=IFS='1'ANDb='1'THENSTATE=mycr;a:='0';th:=0000;tl:=0100;b='0';--ELSIFS='0'ANDb='1'THENSTATE=mgcr;a:='0';--th:=0110;tl:=0000;ELSEIFa='0'THENth:=0110;tl:=0000;a:='1';elseIFNOT(th=0000ANDtl=0010)thenIFtl=0000thentl:=1001;th:=th-1;elsetl:=tl-1;ENDIF;ELSEth:=0000;tl:=0001;a:='0';b='1';ENDIF;ENDIF;ENDIF;WHENmycr=IFa='0'THENth:=0000;tl:=0100;a:='1';elseIFNOT(th=0000ANDtl=0010)thentl:=tl-1;ELSEth:=0000;tl:=0001;a:='0';STATE=mrcg;ENDIF;ENDIF;WHENmrcg=IFS='1'THENIFa='0'THENth:=0010;tl:=0000;a:='1';elseIFNOT(th=0000ANDtl=0010)thenIFtl=0000thentl:=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';elseIFNOT(th=0000ANDtl=0010)thentl:=tl-1;ELSEth:=0000;tl:=0001;a:='0';STATE=mgcr;ENDIF;ENDIF;ENDCASE;tim=th&tl;ENDIF;endprocess;ENDbehav;②JTDFPLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJTDFPISPORT(CLK:INSTD_LOGIC;JIN:INSTD_LOGIC_VECTOR(7DOWNTO0);SG:OUTSTD_LOGIC_VECTOR(7DOWNTO0);sel0,sel1,sel2:OUTSTD_LOGIC;CLK1:bufferSTD_LOGIC);ENDJTDFP;ARCHITECTUREbehavOFJTDFPISSIGNALQ:STD_LOGIC_VECTOR(11DOWNTO0);SIGNALP,R:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALCONT8:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALCONT:STD_LOGIC_VECTOR(7DOWNTO0);SIGNALYM:STD_LOGIC_VECTOR(11DOWNTO0);SIGNALA:STD_LOGIC_VECTOR(3DOWNTO0);BEGINF:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENCONT=CONT+1;IFCONT=100THENCLK1='1';CONT=00000000;ELSECLK1='0';ENDIF;ENDIF;ENDPROCESS;C:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENIFCONT8001THENCONT8=CONT8+1;ELSECONT8=(OTHERS='0');ENDIF;ENDIF;CASECONT8ISWHEN000=sel0='0';sel1='1';sel2='0';A=JIN(3downto0);WHEN001=sel0='1';sel1='0';sel2='0';A=JIN(7downto4);WHENOTHERS=NULL;ENDCASE;ENDPROCESS;D:PROCESS(A)BEGINCASEAISWHEN0000=SG=00111111;WHEN0001=SG=00000110;WHEN0010=SG=01011011;WHEN0011=SG=01001111;WHEN0100=SG=01100110;WHEN0101=SG=01101101;WHEN0110=SG=01111101;WHEN0111=SG=00000111;WHEN1000=SG=01111111;WHEN1001=SG=01101111;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDbehav;③JTDXSLIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYJTDXSISPORT(CLK1,S,B,RESET:INSTD_LOGIC;COUNT:INSTD_LOGIC_VECTOR(7DOWNTO0);MG,MY,MR,CG,CY,CR:OUTSTD_LOGIC);ENDJTDXS;ARCHITECTUREbehavOFJTDXSISTYPESTATESIS(mgcr,mycr,mrcg,mrcy);SIGNALSTATE:STATES;BEGINPROCESS(STATE,CLK1,S,RESET)BEGINIFRESET='0'THENSTATE=mgcr;MG='1';CR='1';MY='0';MR='0';CG='0';CY='0';ELSIFCLK1'EVENTANDCLK1='1'thenCASESTATEISWHENmgcr=IFB='1'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=00000001THENSTATE=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=00000001ORS='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=00000001THENSTATE=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;3、编译1)输入完程序之后逐个编译2)逐个编译无错之后进行全程编译4、将以上模块生成元器件计数控制数码管显示分频交通灯显示5,将以上各器件连接成实验原理图6、系统仿真1)建立新的波形激励文件2)在波形编辑器窗口添加节点3)通过Edit-EndTime来设定仿真结束时间4)在CLOCK窗口中设置clk的时钟周期为1us5)点击save保存6)通过Tools下的SimulatorTools项进行仿真,然后观察输出波形。仿真波形如下:S=1乡间公路状态(既MGCR60S-MYCG4S-MRCG20S-MGCY4S-MGCR60S)S=0转S=1立即进入MYCR4S-MRCG20S7,引脚锁定8,连接到实验箱下载程序观察实验结果:有开关K1控制S的值,当K1断开时实验箱交通灯处于MGCR状态,数码管在倒数60计数。合上K1后S由0转入1状态,数码管继续倒数60计数且交通灯仍处于MGCR状态,60计数完成后随即转入MYCG4S-MRCG20S-MGCY4S-MGCR60S的循环状态直到S再次由1变成0,数码管立即停止计数