预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYLIGHTISPORT(clk,rst:INSTD_LOGIC;a_g,a_y,a_r,b_r,b_y,b_g:OUTSTD_LOGIC;--两组信号灯W11:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--段选信号输出W:OUTSTD_LOGIC_VECTOR(2DOWNTO0));--位选信号输出ENDLIGHT;ARCHITECTUREBHVOFLIGHTISTYPESTATE_TYPEIS(S1,S2,S3,S4);--状态机说明部分SIGNALSTATE:STATE_TYPE;SIGNALQ:STD_LOGIC_VECTOR(4DOWNTO0);--总时间信号SIGNALsel1,sel2:STD_LOGIC_VECTOR(7DOWNTO0);--两组信号灯的段码输出中间量SIGNALclk1:STD_LOGIC;SIGNALcnt:INTEGERRANGE1TO1000;BEGINPROCESS(clk,cnt)BEGIN--1000分频计数IF(clk'EVENTANDclk='1')THENIFcnt=1000THENcnt<=1;clk1<='1';ELSEclk1<='0';cnt<=cnt+1;ENDIF;ENDIF;ENDPROCESS;PROCESS(clk1,rst)--状态机主控时序进程VARIABLEW1,W2:STD_LOGIC_VECTOR(7DOWNTO0);BEGINIFrst='1'THENQ<="00000";W1:="00000001";W2:="00000001";STATE<=S1;--W<="000";ELSIF(clk1'EVENTANDclk1='1')THENIFQ<"10000"THEN--定义总时间Q为18sQ<=Q+1;ELSEQ<="00000";ENDIF;CASESTATEISWHENS1=>IFQ<"00110"THENIFW1="00000001"THENW1:="00000111";--a绿灯为6s(7-1)ENDIF;W1:=W1-1;IFW2="00000001"THENW2:="00001010";--b红灯为9s(10-1)ENDIF;W2:=W2-1;ELSIFQ="00110"THENSTATE<=S2;--s1=>s2ENDIF;WHENS2=>IF(Q<"01001"ANDQ>="00110")THENIFW1="00000001"THENW1:="00000100";--a黄灯为3s(4-1)ENDIF;W1:=W1-1;W2:=W2-1;ELSIFQ="01001"THENSTATE<=S3;--s2=>s3ENDIF;WHENS3=>IF(Q<"01110"ANDQ>="01001")THENIFW1="00000001"THENW1:="00001010";--a红灯为9s(10-1)ENDIF;W1:=W1-1;IFW2="00000001"THENW2:="00000111";--b绿灯为6s(7-1)ENDIF;W2:=W2-1;ELSIFQ="01110"THENSTATE<=S4;--s3=>s4ENDIF;WHENS4=>IF(Q<"10000"ANDQ>="01110")THENIFW2="00000001"THENW2:="00000100";--b黄灯为3s(4-1)ENDIF;W2:=W2-1;W1:=W1-1;ELSIFQ="10000"THENSTATE<=S1;--s4=>s1ENDIF;WHENOTHERS=>STATE<=S1;ENDCASE;IFW1="00000000"THENsel1<=X"3F";--0ELSIFW1="00000001"THENsel1<=X"06";--1ELSIFW1="00000010"THENsel1<=X"5B";--2ELSIFW1="00000011"THENsel1<=X"4F";--3ELSIFW1="00000100"THENsel1<=X"66";--4ELSIFW1="00000101"THENsel1<=X"6D";--5ELSIFW1="00000110"THENsel1<=X"7D";--6ELSIFW1="00000111"THENsel1<=X"