-- LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; USE ieee.std_logic_unsigned.all; ENTITY colorize IS PORT( r : OUT std_logic_vector(7 downto 0); g : OUT std_logic_vector(7 downto 0); b : OUT std_logic_vector(7 downto 0); code : IN STD_LOGIC_VECTOR(2 DOWNTO 0); test : in std_logic_vector(7 downto 0); cpt_line : IN integer range 0 to 511; cpt_row : IN integer range 0 to 1023; clk : in std_logic ); END colorize; ARCHITECTURE a OF colorize IS signal codeb : std_logic_vector(2 downto 0); signal coded : std_logic_vector(2 downto 0); signal cpt_bis : integer range 0 to 1023; signal cpt_a : integer range 0 to 1023; signal cpt_b : integer range 0 to 63; signal row : std_logic_vector(9 downto 0); begin row <= std_logic_vector(to_unsigned(cpt_row,10)); generator : process(code, codeb, cpt_row, coded, row, test) begin if (test = "00000000") then r(0) <= code(0); r(1) <= code(0); r(2) <= code(0); r(3) <= code(0); r(4) <= code(0); r(5) <= code(0); r(6) <= code(0); r(7) <= code(0); g(0) <= code(1); g(1) <= code(1); g(2) <= code(1); g(3) <= code(1); g(4) <= code(1); g(5) <= code(1); g(6) <= code(1); g(7) <= code(1); b(0) <= code(2); b(1) <= code(2); b(2) <= code(2); b(3) <= code(2); b(4) <= code(2); b(5) <= code(2); b(6) <= code(2); b(7) <= code(2); elsif (test = "00000001") then r(0) <= row(6); r(1) <= row(6); r(2) <= row(6); r(3) <= row(6); r(4) <= row(6); r(5) <= row(6); r(6) <= row(6); r(7) <= row(6); g(0) <= row(7); g(1) <= row(7); g(2) <= row(7); g(3) <= row(7); g(4) <= row(7); g(5) <= row(7); g(6) <= row(7); g(7) <= row(7); b(0) <= row(8); b(1) <= row(8); b(2) <= row(8); b(3) <= row(8); b(4) <= row(8); b(5) <= row(8); b(6) <= row(8); b(7) <= row(8); elsif (test = "00000010") then r(0) <= codeb(0); r(1) <= codeb(0); r(2) <= codeb(0); r(3) <= codeb(0); r(4) <= codeb(0); r(5) <= codeb(0); r(6) <= codeb(0); r(7) <= codeb(0); g(0) <= codeb(1); g(1) <= codeb(1); g(2) <= codeb(1); g(3) <= codeb(1); g(4) <= codeb(1); g(5) <= codeb(1); g(6) <= codeb(1); g(7) <= codeb(1); b(0) <= codeb(2); b(1) <= codeb(2); b(2) <= codeb(2); b(3) <= codeb(2); b(4) <= codeb(2); b(5) <= codeb(2); b(6) <= codeb(2); b(7) <= codeb(2); else r(0) <= coded(0); r(1) <= coded(0); r(2) <= coded(0); r(3) <= coded(0); r(4) <= coded(0); r(5) <= coded(0); r(6) <= coded(0); r(7) <= coded(0); g(0) <= coded(1); g(1) <= coded(1); g(2) <= coded(1); g(3) <= coded(1); g(4) <= coded(1); g(5) <= coded(1); g(6) <= coded(1); g(7) <= coded(1); b(0) <= coded(2); b(1) <= coded(2); b(2) <= coded(2); b(3) <= coded(2); b(4) <= coded(2); b(5) <= coded(2); b(6) <= coded(2); b(7) <= coded(2); end if; end process; codeurA : process(cpt_line, cpt_row, clk, coded) begin if (cpt_row = 0) then coded <= "000"; cpt_bis <= 0; elsif rising_edge(clk) then if (cpt_bis < cpt_line) then cpt_bis <= cpt_bis + 1; -- on compte le nombre de pixel dans la ligne else cpt_bis <= 0; -- quand on atteind cpt_bis = cpt_line, on change de couleur; case coded is when "000" => coded <= "100"; when "100" => coded <= "010"; when "010" => coded <= "001"; when "001" => coded <= "011"; when "011" => coded <= "101"; when "101" => coded <= "110"; when "110" => coded <= "111"; when "111" => coded <= "000"; end case; end if; end if; end process; codeurB : process(cpt_line, cpt_row, clk, codeb) begin if (cpt_row = 0) then codeb <= "000"; cpt_b <= 32; cpt_a <= 32; elsif rising_edge(clk) then if (cpt_row > cpt_a) then codeb <= codeb + 1; -- on change de couleur cpt_a <= cpt_a + cpt_b; if codeb = "111" then cpt_b <= cpt_b / 2; end if; end if; end if; end process; END a;