Я рекомендую реализовать решение с помощью чистой комбинационной логики, регистры вам на самом деле не нужны (синтезируются, когда вы используете нарастающий / падающий фронт тактовой частоты).
Вы можете синхронизировать его (выставить через несколько регистров) вне часов.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
Entity SEG7_LUT is
port( oSEG : out std_logic_vector (6 downto 0);
iDIG : in std_logic_vector (3 downto 0));
end entity SEG7_LUT;
Architecture RTL of SEG7_LUT is
begin
logic : process (iDIG) begin
case iDIG is
when x"1" => oSEG <= "1111001";
when x"2" => oSEG <= "0100100"; -- |--rt--|
when x"3" => oSEG <= "0110000"; -- lt rt
when x"4" => oSEG <= "0011001"; -- | |
when x"5" => oSEG <= "0010010"; -- ---m----
when x"6" => oSEG <= "0000010"; -- | |
when x"7" => oSEG <= "1111000"; -- lb rb
when x"8" => oSEG <= "0000000"; -- | |
when x"9" => oSEG <= "0011000"; -- ---b----
when x"a" => oSEG <= "0001000";
when x"b" => oSEG <= "0000011";
when x"c" => oSEG <= "1000110";
when x"d" => oSEG <= "0100001";
when x"e" => oSEG <= "0000110";
when x"f" => oSEG <= "0001110";
when x"0" => oSEG <= "1000000";
end case;
end process logic;
end;
Приведенный ниже код дает пример представления 32-разрядного числа в шестнадцатеричном формате на восьми 7-сегментных дисплеях.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
Entity SEG7_LUT_8 is
port( oSEG0 : out std_logic_vector (6 downto 0);
oSEG1 : out std_logic_vector (6 downto 0);
oSEG2 : out std_logic_vector (6 downto 0);
oSEG3 : out std_logic_vector (6 downto 0);
oSEG4 : out std_logic_vector (6 downto 0);
oSEG5 : out std_logic_vector (6 downto 0);
oSEG6 : out std_logic_vector (6 downto 0);
oSEG7 : out std_logic_vector (6 downto 0);
iDIG : in std_logic_vector (31 downto 0));
end;
Architecture RTL of SEG7_LUT_8 is
begin
u0 : entity work.SEG7_LUT port map( oSEG0,iDIG(3 downto 0) );
u1 : entity work.SEG7_LUT port map(oSEG1,iDIG(7 downto 4) );
u2 : entity work.SEG7_LUT port map(oSEG2,iDIG(11 downto 8) );
u3 : entity work.SEG7_LUT port map(oSEG3,iDIG(15 downto 12) );
u4 : entity work.SEG7_LUT port map(oSEG4,iDIG(19 downto 16) );
u5 : entity work.SEG7_LUT port map(oSEG5,iDIG(23 downto 20) );
u6 : entity work.SEG7_LUT port map(oSEG6,iDIG(27 downto 24) );
u7 : entity work.SEG7_LUT port map(oSEG7,iDIG(31 downto 28) );
end;