⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiaotongdeng.txt

📁 设计一个简单的十字路口交通灯。交通灯分东西和南北两个方向
💻 TXT
字号:
控制单元:
library ieee;
 use ieee.std_logic_1164.all;
 use ieee.std_logic_unsigned.all;
entity traffic is
 port(clk, reset,urgency: in std_logic;
w1,w2:in std_logic;
r1,r2,y1,y2,g1,g2,c1,c2:out std_logic);
end traffic;
architecture arch of traffic is
type state_space is(s0,s1,s2,s3,s4);
signal state:state_space;
begin
process(clk)
begin
if urgency='1' then
state<=s4;
elsif reset='1' then
state<=s0;
elsif(clk 'event and clk='1')then
case state is
when s0=>
        if w1='1' then
        state<=s1;
        end if;
when s1=>
        if w2='1' then
        state<=s2;
        end if;
when s2=>
        if w1='1' then
         state<=s3;
         end if;
when s3=>
         if w2='1' then
         state<=s0;
         end if;
when s4=>
         if urgency='0' then
         state<=s0;
         end if;
end case;
end if;
end process;
c1<='1' when state=s0 or state=s2 else '0';
c2<='1' when state=s1 or state=s3 else '0';
r1<='1' when state=s0 or state=s1 or state=s4 else '0';
g1<='1' when state=s2 else '0';
y1<='1' when state=s3 else '0';
r2<='1' when state=s2 or state=s3 or state=s4 else '0';
g2<='1' when state=s0 else '0';
y2<='1' when state=s1 else '0';
end arch;
绿灯计数器:
library ieee;
 use ieee.std_logic_1164.all;
 use ieee.std_logic_unsigned.all;
entity lv is
port(
clk:in std_logic;
enable:in std_logic;
c:out std_logic;
a1,a0:buffer std_logic_vector(3 downto 0));
end lv;
architecture lvdeng of lv is
begin
process(clk)
begin
if (clk 'event and clk='1') then
if enable='0' then
a1<="0100";a0<="0000";
elsif a1>0 and a0=0 then
a0<="1001";a1<=a1-"0001";
elsif a0>0 then
a0<=a0-"0001";
end if;
end if;
if a1="0000" and a0="0000" then
c<='1';
else c<='0';
end if;
end process;
end lvdeng;
黄灯计数器:
library ieee;
 use ieee.std_logic_1164.all;
 use ieee.std_logic_unsigned.all;
entity huang is
port(
clk:in std_logic;
enable:in std_logic;
c:out std_logic;
cnt:buffer std_logic_vector(3 downto 0));
end huang;
architecture huangdeng of huang is
begin
process(clk)
begin
if (clk 'event and clk='1') then
if enable='1' and cnt>0 then
cnt<=cnt-"0001";
else cnt<="0100";
end if;
end if;
if cnt=0 then
c<='1';
else c<='0';
end if;
end process;
end huangdeng;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -