📄 jiaotongdeng.txt
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jtd IS
PORT(CLK,CLK0,RST:IN STD_LOGIC;
Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
SEL:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END jtd;
ARCHITECTURE BEHAV OF jtd IS
TYPE STATES IS (ST0,ST1,ST2,ST3,ST4);
SIGNAL C_S,N_S:STATES:=ST0;
SIGNAL BCD1N:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL BCD10N:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL OPT:STD_LOGIC:='0';
SIGNAL LED:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(CLK,RST)
BEGIN
IF(RST='1')THEN
C_S<=ST0;
ELSIF(CLK'EVENT AND CLK='1')THEN
C_S<=N_S;
END IF;
END PROCESS;
PROCESS(C_S,RST,BCD1N,BCD10N)
BEGIN
CASE C_S IS
WHEN ST0=>Q<="100100"; ----初始状态,两个红灯亮(3S)
IF(RST='1')THEN
N_S<=ST0;
ELSIF(BCD10N="0000" AND BCD1N="0010")THEN
N_S<=ST1;
ELSE N_S<=ST0;
END IF;
WHEN ST1=>Q<="001100"; ----状态1,南北红灯亮,东西绿灯亮(27s)
IF(OPT='0')THEN
IF(BCD10N="0010" AND BCD1N="0111")THEN
N_S<=ST2;
ELSE N_S<=ST1;
END IF;
END IF;
WHEN ST2=>Q<="010100"; ----状态2,南北红灯亮,东西黄灯亮(3S)
IF(OPT='0')THEN
IF(BCD10N="0010" AND BCD1N="1001")THEN
N_S<=ST3;
ELSE N_S<=ST2;
END IF;
END IF;
WHEN ST3=>Q<="100001"; ------状态3,南北绿灯亮,东西红灯亮(57S)
IF(OPT='1')THEN
IF(BCD10N="0101" AND BCD1N="0111")THEN
N_S<=ST4;
ELSE N_S<=ST3;
END IF;
END IF;
WHEN ST4=>Q<="100010"; ------状态4,南北黄灯亮,东西亮红灯
IF(OPT='1')THEN
IF(BCD10N="0101" AND BCD1N="1001")THEN
N_S<=ST1;
ELSE N_S<=ST4;
END IF;
END IF;
WHEN OTHERS=>N_S<=ST0;
END CASE;
END PROCESS;
PROCESS(CLK,RST) ----个位变化
BEGIN
IF(RST='1')THEN
BCD1N<="0000";
ELSIF(CLK'EVENT AND CLK='1')THEN
IF(BCD1N="1001")THEN
BCD1N<="0000";
ELSE BCD1N<=BCD1N+1;
END IF;
END IF;
END PROCESS;
PROCESS(CLK,OPT,RST)
BEGIN
IF(RST='1')THEN ----十位变化
BCD10N<="0000";
ELSIF(CLK'EVENT AND CLK = '1')THEN
IF(BCD1N = "1001") THEN
IF(OPT='0' AND BCD10N="0010")THEN
BCD10N<="0000";
OPT<=NOT OPT;
ELSIF(OPT='1' AND BCD10N="0101")THEN
BCD10N<="0000";
OPT<=NOT OPT;
ELSE BCD10N<=BCD10N+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CLK0,LED)
BEGIN
IF(CLK0 ='1')THEN
SEL<="001";
LED<=BCD1N;
ELSE SEL<="000";
LED<=BCD10N;
END IF;
CASE LED IS
WHEN "0000"=>Y<="0111111";
WHEN "0001"=>Y<="0000110";
WHEN "0010"=>Y<="1011011";
WHEN "0011"=>Y<="1001111";
WHEN "0100"=>Y<="1100110";
WHEN "0101"=>Y<="1101101";
WHEN "0110"=>Y<="1111101";
WHEN "0111"=>Y<="0000111";
WHEN "1000"=>Y<="1111111";
WHEN "1001"=>Y<="1101111";
WHEN "1010"=>Y<="1110111";
WHEN "1011"=>Y<="1111100";
WHEN "1100"=>Y<="0111001";
WHEN "1101"=>Y<="1011110";
WHEN "1110"=>Y<="1111001";
WHEN "1111"=>Y<="1110001";
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END BEHAV;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -