您的当前位置:首页正文

北方民族大学EDA交通灯课设

来源:爱go旅游网
anther_mini_MCU部分: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY anther_mini_MCU IS

PORT( anther_signal_in:in std_logic;

anther_MCU_RST:IN STD_LOGIC;

anther_led_signal_output:out std_logic_vector(2 downto 0) ); END ;

ARCHITECTURE one OF anther_mini_MCU IS BEGIN PROCESS(anther_signal_in)

VARIABLE timer: STD_LOGIC_VECTOR(1DOWNTO 0):=\"00\";

VARIABLE current_state,next_state: STD_LOGIC_VECTOR(2DOWNTO 0):=\"100\"; begin

IF anther_MCU_RST='1' THEN

IF anther_signal_in'EVENT AND anther_signal_in='1' THEN IF timer=\"10\" THEN timer:=\"00\"; ELSE timer:=timer+1; end if; END IF; end if;

IF anther_MCU_RST='0' THEN timer:=\"00\";

END IF; CASE timer IS

WHEN \"00\"=> current_state:=next_state; next_state:=\"100\"; WHEN \"01\"=> current_state:=next_state; next_state:=\"010\"; WHEN \"10\"=> current_state:=next_state; next_state:=\"001\"; WHEN OTHERS => NULL; end case;

anther_led_signal_output<=current_state; end process; end ;

cnt24部分: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt24 IS

PORT(CLK24,RST24:IN STD_LOGIC;

OUT24:OUT STD_LOGIC_VECTOR(4 DOWNTO 0); COUT24:OUT STD_LOGIC); END;

ARCHITECTURE one OF cnt24 IS BEGIN

PROCESS(CLK24,RST24)

VARIABLE Q: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGIN

IF RST24='0' THEN Q:=(OTHERS=>'0');

ELSIF CLK24'EVENT AND CLK24='1' THEN IF Q<23 THEN Q:=Q+1; ELSE Q:=(OTHERS=>'0'); END IF; END IF;

IF Q=\"10111\" THEN COUT24<='1'; ELSE COUT24<='0'; END IF; OUT24<=Q; END PROCESS; END;

cnt60部分 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt60 IS

PORT(CLK60,RST60:IN STD_LOGIC;

OUT60:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); COUT60:OUT STD_LOGIC); END;

ARCHITECTURE one OF cnt60 IS BEGIN

PROCESS(CLK60,RST60)

VARIABLE Q: STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN

IF RST60='0' THEN Q:=(OTHERS=>'0');

ELSIF CLK60'EVENT AND CLK60='1' THEN IF Q<59 THEN Q:=Q+1; ELSE Q:=(OTHERS=>'0'); END IF; END IF;

IF Q=\"1001011\" THEN COUT60<='1'; ELSE COUT60<='0'; END IF; OUT60<=Q; END PROCESS; END;

Counter部分 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter IS

PORT( CH:IN STD_LOGIC_VECTOR(2 DOWNTO 0); second_in,RST_couter,all_RST:IN STD_LOGIC;

led_signal_output:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);

YELLOW_SIGNAL,GREEN_SIGNAL,RED_SIGNAL,signal_output:OUT STD_LOGIC); END;

ARCHITECTURE one OF counter IS BEGIN

PROCESS(second_in,RST_couter)

VARIABLE Q: STD_LOGIC_VECTOR(5 DOWNTO 0):=\"000000\"; --VARIABLE XX: STD_LOGIC_VECTOR(2 DOWNTO 0):=\"100\";

BEGIN

IF all_RST='1' THEN

IF RST_couter='1' THEN

IF second_in'EVENT AND second_in='1' THEN CASE CH IS

WHEN \"100\" => IF Q>33 THEN

Q:=\"000000\"; signal_output<='1'; ELSE Q:=Q+1; signal_output<='0'; END IF;

WHEN \"010\" => IF Q>3 THEN Q:=\"000000\"; signal_output<='1'; ELSE Q:=Q+1; signal_output<='0' ;END IF;

WHEN \"001\" => IF Q>38 THEN

Q:=\"000000\"; signal_output<='1'; ELSE Q:=Q+1; signal_output<='0'; END IF;

WHEN OTHERS => NULL; END CASE; END IF; END IF; END IF;

IF all_RST='0' THEN Q:=\"000000\"; END IF;

IF RST_couter='0' OR all_RST='0' THEN RED_SIGNAL <= '1'; YELLOW_SIGNAL <='0';GREEN_SIGNAL <='0';-- RST '0' ELSE

CASE CH IS

WHEN \"100\" => RED_SIGNAL <= '1'; YELLOW_SIGNAL <='0';GREEN_SIGNAL <='0'; WHEN \"010\" => RED_SIGNAL <= '0'; YELLOW_SIGNAL <='1';GREEN_SIGNAL <='0'; WHEN \"001\" => RED_SIGNAL <= '0'; YELLOW_SIGNAL <='0';GREEN_SIGNAL <='1'; WHEN OTHERS => RED_SIGNAL <= '0'; YELLOW_SIGNAL <='0';GREEN_SIGNAL <='0' ; END CASE; END IF;

led_signal_output<=Q; END PROCESS; END;

frequency divider部分 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY frequency_divider IS

PORT(frequency_in:IN STD_LOGIC; frequency_en:IN STD_LOGIC;

frequency_out0,frequency_out1,frequency_out2:OUT STD_LOGIC); END;

ARCHITECTURE one OF frequency_divider IS BEGIN

PROCESS(frequency_in)

VARIABLE B:INTEGER RANGE 0 TO 999 ; VARIABLE A:STD_LOGIC; BEGIN

IF frequency_en='1' THEN

IF frequency_in'EVENT AND frequency_in='1' THEN B:=B+1;

IF B=999 THEN B:=0;

IF A='1' THEN A:='0'; ELSE A:='1'; END IF; END IF; END IF; END IF;

frequency_out0<=A; frequency_out1<=A; frequency_out2<=A; END PROCESS; END;

LED部分: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY led IS

PORT( led_in:in std_logic_vector(5 downto 0); led_RST,led_CLK:in std_logic;

led_shi_out:out std_logic_vector(6 downto 0); led_ge_out:out std_logic_vector(6 downto 0));

END ;

ARCHITECTURE one OF led IS

SIGNAL GGE:std_logic_vector(5 downto 0); BEGIN

PROCESS(led_in)

VARIABLE C:std_logic_vector(5 downto 0); VARIABLE GE:std_logic_vector(5 downto 0); VARIABLE NUM:std_logic_vector(5 downto 0); begin C:=led_in; NUM:=C;

IF NUM>9 THEN

NUM:=NUM-10; ELSE GE:=NUM; END IF;

IF NUM>9 THEN NUM:=NUM-10; ELSE GE:=NUM; END IF;

IF NUM>9 THEN NUM:=NUM-10; ELSE GE:=NUM; END IF;

IF NUM>9 THEN NUM:=NUM-10; ELSE GE:=NUM; END IF; IF NUM>9 THEN NUM:=NUM-10; GE:=NUM; ELSE GE:=NUM; END IF; GGE<=GE; END PROCESS;

PROCESS (GGE,led_in,led_CLK,led_RST)

VARIABLE SHI:std_logic_vector(5 downto 0);

VARIABLE DATA_IN:std_logic_vector(5 downto 0); VARIABLE DATA:std_logic_vector(3 downto 0); VARIABLE ENA:STD_LOGIC:='1'; BEGIN

DATA_IN:=led_in;

IF DATA_IN=GGE THEN SHI:=\"000000\";

ELSE SHI:=DATA_IN-GGE; END IF;

IF ENA='1' THEN CASE GGE IS

WHEN \"000000\"=> led_ge_out<=\"0111111\";--0 3F WHEN \"000001\"=> led_ge_out<=\"0000110\";--1 06 WHEN \"000010\"=> led_ge_out<=\"1011011\";--2 5B WHEN \"000011\"=> led_ge_out<=\"1001111\";--3 4F WHEN \"000100\"=> led_ge_out<=\"1100110\";--4 66 WHEN \"000101\"=> led_ge_out<=\"1101101\";--5 6D WHEN \"000110\"=> led_ge_out<=\"1111101\";--6 7D WHEN \"000111\"=> led_ge_out<=\"0000111\";--7 07 WHEN \"001000\"=> led_ge_out<=\"1111111\";--8 7F WHEN \"001001\"=> led_ge_out<=\"1101111\";--9 6F WHEN OTHERS=> NULL; end case; CASE SHI IS

WHEN \"000000\"=> led_shi_out<=\"0111111\"; WHEN \"001010\"=> led_shi_out<=\"0000110\"; WHEN \"010100\"=> led_shi_out<=\"1011011\"; WHEN \"011110\"=> led_shi_out<=\"1001111\"; WHEN \"101000\"=> led_shi_out<=\"1100110\"; WHEN \"110010\"=> led_shi_out<=\"1101101\"; WHEN OTHERS=> NULL; end case;

ELSE led_shi_out<=\"0000000\";led_ge_out<=\"0000000\"; END IF;

if led_RST='0' then

IF led_CLK'EVENT AND led_CLK='1' THEN DATA:=DATA+1;

IF DATA=\"0011\" THEN ENA:='0';DATA:=\"0000\"; ELSE ENA:='1'; END IF; END IF; END IF;

IF led_RST='1' then ENA:='1'; END IF; end process; end;

mini_MCU部分 LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mini_MCU IS

PORT( signal_in:in std_logic;

MCU_RST:IN STD_LOGIC;

led_signal_output:out std_logic_vector(2 downto 0) ); END ;

ARCHITECTURE one OF mini_MCU IS BEGIN PROCESS(signal_in)

VARIABLE timer: STD_LOGIC_VECTOR(1DOWNTO 0):=\"00\";

VARIABLE current_state,next_state: STD_LOGIC_VECTOR(2DOWNTO 0):=\"100\"; begin

IF MCU_RST='1' THEN

IF signal_in'EVENT AND signal_in='1' THEN IF timer=\"10\" THEN timer:=\"00\"; ELSE timer:=timer+1; end if; END IF; end if;

IF MCU_RST='0' THEN timer:=\"00\";

end if; CASE timer IS

WHEN \"00\"=> current_state:=next_state; next_state:=\"001\"; WHEN \"01\"=> current_state:=next_state; next_state:=\"100\"; WHEN \"10\"=> current_state:=next_state; next_state:=\"010\"; WHEN OTHERS => NULL; end case;

led_signal_output<=current_state; end process; end ;

traffic_light部分

把上面的部分汇总加到一起就能用了

因篇幅问题不能全部显示,请点此查看更多更全内容