Я новичок в VHDL и пытаюсь сделать простое приложение со светодиодной матрицей (8x8).Моя цель - включить светодиоды матрицы, чтобы я мог видеть улыбающееся лицо.По какой-то причине ни один из светодиодов не включается.
Чтобы увидеть, что не так, я попытался включить все светодиоды в каждой строке за раз, комментируя инструкцию case и давая cols <= "00000000" передутверждение, что результат заключается в том, что единственная строка, которая включается, является первой, она продолжает включаться и выключаться каждую секунду. </p>
Я сделал делитель частоты в течение 1 секунды, чтобы посмотреть, работает ли код правильно.
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.std_logic_unsigned.all;
entity main is
Port ( clk : in STD_LOGIC;
rows : out STD_LOGIC_VECTOR (7 downto 0);
cols : out STD_LOGIC_VECTOR (7 downto 0));
end main;
architecture Behavioral of main is
signal count: std_logic_vector(7 downto 0):= "00000001";
signal clk1Hz: std_logic_vector(26 downto 0);
begin
process(clk)
begin
if rising_edge(clk) then
if clk1Hz = X"5F5E0FF" then
clk1Hz <= "000" & X"000000";
else
clk1Hz <= clk1Hz + 1;
end if;
if clk1Hz(26) = '1' then
if count = "10000000" then
count <= "00000001";
else
count(7 downto 1) <= count(6 downto 0);
count(0) <= '0';
end if;
rows <= count;
case count is
when "00000001" => cols <= "11111111";
when "00000010" => cols <= "11011011";
when "00000100" => cols <= "11011011";
when "00001000" => cols <= "11111111";
when "00010000" => cols <= "00111100";
when "00100000" => cols <= "10000001";
when "01000000" => cols <= "11000011";
when "10000000" => cols <= "11111111";
when others => cols <= "11111111";
end case;
end if;
end if;
end process;
end Behavioral;