?? jiao_tong.vhd
字號(hào):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jiao_tong IS
PORT(clk:IN STD_LOGIC;
jin:IN STD_LOGIC;
scan:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
seg7:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
ra,ya,ga:OUT STD_LOGIC;
rb,yb,gb:OUT STD_LOGIC
);
END jiao_tong;
ARCHITECTURE one OF jiao_tong IS
type state is(st1,st2,st3,st4);
signal clk1khz,clk1hz:STD_LOGIC;
signal one,ten:STD_LOGIC_VECTOR(3 DOWNTO 0);
signal cnt:STD_LOGIC_VECTOR(1 DOWNTO 0);
signal data:STD_LOGIC_VECTOR(3 DOWNTO 0);
signal seg7_temp:STD_LOGIC_VECTOR(6 DOWNTO 0);
signal r1,r2,g1,g2,y1,y2:std_logic;
BEGIN
PROCESS(clk)
variable count:integer range 0 to 24999;
BEGIN
IF clk'event and clk='1'THEN
IF count=24999 THEN
clk1khz<=not clk1khz;
count:=0;
ELSE
count:=count+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk1khz)
variable counter:integer range 0 to 499;
BEGIN
IF clk1khz'event and clk1khz='1' THEN
IF counter=499 THEN
clk1hz<=not clk1hz;
counter:=0;
ELSE
counter:=counter+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk1hz)
variable stx:state;
variable a:std_logic;
variable qh,q1:std_logic_vector(3 downto 0);
BEGIN
if clk1hz'event and clk1hz='1'THEN
CASE stx IS
WHEN st1=>if jin='0' THEN
if a='0'THEN
qh:="0011";
q1:="0100";
a:='1';
r1<='0';
y1<='0';
g1<='1';
r2<='1';
y2<='0';
g2<='0';
else
if qh=0 and q1=1 then
stx:=st2;
a:='0';
qh:="0000";
q1:="0000";
elsif q1=0 then
q1:="1001";
qh:=qh-1;
else
q1:=q1-1;
end if;
end if;
end if;
WHEN st2=>if jin='0' THEN
if a='0'THEN
qh:="0000";
q1:="0100";
a:='1';
r1<='0';
y1<='1';
g1<='0';
r2<='1';
y2<='0';
g2<='0';
else
if q1=1 then
stx:=st3;
a:='0';
qh:="0000";
q1:="0000";
else
q1:=q1-1;
end if;
end if;
end if;
WHEN st3=>if jin='0' THEN
if a='0'THEN
qh:="0010";
q1:="0100";
a:='1';
r1<='1';
y1<='0';
g1<='0';
r2<='0';
y2<='0';
g2<='1';
else
if qh=0 and q1=1 then
stx:=st4;
a:='0';
qh:="0000";
q1:="0000";
elsif q1=0 then
q1:="1001";
qh:=qh-1;
else
q1:=q1-1;
end if;
end if;
end if;
WHEN st4=>if jin='0' THEN
if a='0'THEN
qh:="0000";
q1:="0100";
a:='1';
r1<='1';
y1<='0';
g1<='0';
r2<='1';
y2<='1';
g2<='0';
else
if q1=1 then
stx:=st1;
a:='0';
qh:="0000";
q1:="0000";
else
q1:=q1-1;
end if;
end if;
end if;
END CASE;
END IF;
one<=q1;
ten<=qh;
END PROCESS;
PROCESS(jin ,clk1hz,r1,r2,g1,g2,y1,y2,seg7_temp)
BEGIN
IF jin='1' THEN
ra<=r1 or jin;
rb<=r2 or jin;
ga<=g1 and not jin;
gb<=g2 and not jin;
ya<=y1 and not jin;
yb<=y2 and not jin;
seg7(0)<=seg7_temp(0) and clk1hz;
seg7(1)<=seg7_temp(1) and clk1hz;
seg7(2)<=seg7_temp(2) and clk1hz;
seg7(3)<=seg7_temp(3) and clk1hz;
seg7(4)<=seg7_temp(4) and clk1hz;
seg7(5)<=seg7_temp(5) and clk1hz;
seg7(6)<=seg7_temp(6) and clk1hz;
ELSE
seg7<=seg7_temp;
ra<=r1;
rb<=r2;
ga<=g1;
gb<=g2;
ya<=y1;
yb<=y2;
END IF;
END PROCESS;
PROCESS(clk1khz)
BEGIN
IF clk1khz'event and clk1khz='1' THEN
IF cnt="01" THEN cnt<="00";
ELSE cnt<=cnt+1;
END IF;
END IF;
END PROCESS;
PROCESS(cnt,one,ten)
BEGIN
CASE cnt is
WHEN "00"=>data<=one;scan<="01";
WHEN "01"=>data<=ten;scan<="10";
WHEN others=>null;
END CASE;
END PROCESS;
PROCESS(data)
BEGIN
CASE data IS
WHEN"0000"=>seg7_temp<="1000000";
WHEN"0001"=>seg7_temp<="1111001";
WHEN"0010"=>seg7_temp<="0100100";
WHEN"0011"=>seg7_temp<="0110000";
WHEN"0100"=>seg7_temp<="0011001";
WHEN"0101"=>seg7_temp<="0010010";
WHEN"0110"=>seg7_temp<="0000010";
WHEN"0111"=>seg7_temp<="1111000";
WHEN"1000"=>seg7_temp<="0000000";
WHEN"1001"=>seg7_temp<="0010000";
WHEN OTHERS=>seg7_temp<="1000000";
END CASE;
END PROCESS;
END one;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -