REG:PROCESS(CLK1S,car,current_state,c) BEGIN
IF car ='0'THEN current_state <= s0;
c<=\
ELSE
IF CLK1S'EVENT AND CLK1S ='1' THEN --支干道有车开始计数
c <=c+1;
current_state <=next_state;
END IF;
END IF;
CASE current_state IS --状态转换
WHEN s0 => LED <=\支干道无车不减计时
TIME1H<=\TIME2H<=\
IF car = '1' THEN next_state <= s1; ELSE next_state <= s0; END IF;
WHEN s1 => LED <=\主干道绿灯,支干道红灯
IF c=\ELSE next_state <= s1; END IF;
WHEN s2 => LED <=\主干道黄灯,支干道红灯
IF c=\ELSE next_state <=s2; END IF;
WHEN s3 => LED <=\主干道红灯,支干道绿灯
IF c=\ELSE next_state <= s3; END IF;
WHEN s4 => LED <=\支干道黄灯,主干道红灯
IF c=\ELSE next_state <=s4; END IF;
WHEN OTHERS => LED <=\
END CASE;
IF c=\--系统时间为45,主干道黄灯计时5秒 END IF; IF
c=\
TIME1H<=\--系统时间为50,主干道计时30秒,支干道计时25秒 END IF;
IF c=\--系统时间为75,支干道黄灯计时5秒 END IF; IF
c=\
THEN
TIME1H<=\--系统时间为80,主干道计时45秒,支干道计时50秒 END IF;
IF c=\系统时间清零 END IF;
END PROCESS REG; count <=c; END one;
扫描显示译码器: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY xs IS
PORT(clk,CLK1S,car:IN STD_LOGIC;
TIME1H,TIME1L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --主干道置数 TIME2H,TIME2L:IN STD_LOGIC_VECTOR(3 DOWNTO 0); --支干道置数 count:IN STD_LOGIC_VECTOR(6 DOWNTO 0); --计数信号 sel:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); --数码管位码 seg:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); --数码管段码
END xs;
ARCHITECTURE one OF xs IS
SIGNAL num:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL numsel:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL numseg:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL Q1,Q2,Q3,Q4:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
SM:PROCESS (clk,num,numsel) --扫描 BEGIN
IF clk'EVENT AND clK='1' THEN numsel<=numsel+1;
IF numsel=\END IF;
END IF;
END PROCESS SM;
WX:PROCESS (numsel,Q1,Q2,Q3,Q4) --位选 BEGIN
CASE numsel IS
WHEN\WHEN\WHEN\
WHEN\WHEN OTHERS =>NULL;
END CASE; END PROCESS WX;
ZS:PROCESS(CLK1S,car,Q1,Q2,Q3,Q4,num,TIME1H,TIME1L,TIME2H,TIME2L) --数码管置数 BEGIN
IF car ='1' THEN
IF CLK1S'EVENT AND CLK1S='1' THEN
IF Q2>\ELSE
IF Q1>\减计时 END IF;
END IF;
IF Q4>\ELSE
IF Q3>\END IF;
END IF;
END IF;
IF Q1=\ Q1<=TIME1H;Q2<=TIME1L; END IF;
IF Q3=\ Q3<=TIME2H;Q4<=TIME2L; END IF;
ELSE Q1<=TIME1H;Q2<=TIME1L; --支路无车辆不减计时
Q3<=TIME2H;Q4<=TIME2L;
END IF;
END PROCESS ZS; YM:PROCESS (num,numseg) BEGIN CASE num IS
WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS=>NULL;
END CASE;
END PROCESS YM; sel<=numsel; seg<=numseg; END one; 顶层文件: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY jtd IS
PORT (clk:IN STD_LOGIC; -- car:IN STD_LOGIC; --
led:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); --动态扫描时钟 支路车辆传感信号交通灯信号