利用VHDL设计一个8位指示灯走马灯电路

核心提示LIBRARY IEEE;USE IEEE.Std_logic_1164.ALL;ENTITY rotator IS PORT(clk:IN Std_logic; led:OUT Std_logic_vector(7 DOWNTO

LIBRARY IEEE;

USE IEEE.Std_logic_1164.ALL;

ENTITY rotator IS

PORT(clk:IN Std_logic;

led:OUT Std_logic_vector(7 DOWNTO 0));

END rotator;

ARCHITECTURE behavl OF rotator IS

SIGNAL state:Std_logic_vector(3 DOWNTO 0);

SIGNAL dir:std_logic;

BEGIN

PROCESS(clk)

BEGIN

IF clk'Event AND clk = '1' THEN

CASE state IS

WHEN "0000" => state <= "1000"; dir <= '0';

WHEN "1000" => IF dir = '0' THEN state <= "1100"; ELSE state <= "0000"; END IF;

WHEN "1100" => IF dir = '0' THEN state <= "1110"; ELSE state <= "1000"; END IF;

WHEN "1110" => IF dir = '0' THEN state <= "1111"; ELSE state <= "1100"; END IF;

WHEN "1111" => state <= "1110"; dir <= '1';

WHEN OTHERS=> state <= "0000";

END CASE;

END IF;

END PROCESS;

led(7) <= state(3); led(0) <= state(3);

led(6) <= state(2); led(1) <= state(2);

led(5) <= state(1); led(2) <= state(1);

led(4) <= state(0); led(3) <= state(0);

END behavl;

用VHDL语言设计一个七段显示译码器电路,要求输出信号为高电平有效, 能驱动共阴极数码管。

library IEEE;

use IEEE.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity shukong is

port{

clk250:in std_logic;

d:in std_logic_vector(3 downto 0);

divclk:out std_logic

};

end entity;

architecture be of shukong is

variable full:std_logic;

variable clk1:std_logic_vector(3 downto 0);

begin

process(clk250)

begin

if clk250'event and clk = '1' then

if clk1 = "1111" then

clk1 <= d;

else clk1 := clk1 + 1;

end if;

end if;

end process;

process(clk1)

if clk1 = 1 then full := 0;

else full := 1;

end if;

end process;

divclk <= full;

end architecture;

这是个数控分频,11分频只要d赋值为“1011”就可以了

下面是74LS49的VHDL描述,74LS49就是一个驱动共阴极数码管的译码器:

LIBRARY IEEE;

USE IEEE.Std_logic_1164.ALL;

ENTITY ls49 IS

PORT(bl_n:IN Std_logic;

bi:IN Std_logic_vector(3 DOWNTO 0);

a,b,c,d,e,f,g:OUT Std_logic);

END ls49;

ARCHITECTURE behave_49 OF ls49 IS

SIGNAL s:Std_logic_vector(6 DOWNTO 0);

BEGIN

PROCESS(bi,bl_n)

BEGIN

IF bl_n = ′0′ THEN

s <= (OTHERS => ′0′);

ELSE

CASE bi IS

WHEN ″0000″ => s <= B″011_1111″;

WHEN ″0001″ => s <= B″000_0110″;

WHEN ″0010″ => s <= B″101_1011″;

WHEN ″0011″ => s <= B″100_1111″;

WHEN ″0100″ => s <= B″110_0110″;

WHEN ″0101″ => s <= B″110_1101″;

WHEN ″0110″ => s <= B″111_1101″;

WHEN ″0111″ => s <= B″010_0111″;

WHEN ″1000″ => s <= B″111_1111″;

WHEN ″1001″ => s <= B″110_1111″;

WHEN ″1010″ => s <= B″101_1000″;

WHEN ″1011″ => s <= B″100_1100″;

WHEN ″1100″ => s <= B″110_0010″;

WHEN ″1101″ => s <= B″111_1001″;

WHEN ″1110″ => s <= B″111_1000″;

WHEN ″1111″ => s <= B″000_0000″; -- 熄灭

WHENOTHERS=> s <= (OTHERS => ′0′); -- 熄灭

END CASE;

END IF;

END PROCESS;

a <= s(0);

b <= s(1);

c <= s(2);

d <= s(3);

e <= s(4);

f <= s(5);

g <= s(6);

END behave_49;

 
友情链接
鄂ICP备19019357号-22