-- DC_FRAME_PLACER.vhd library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; entity DC_FRAME_PLACER is generic(WordSize :integer := 8;WordCnt : integer := 144;MinFCount : integer := 64); port( clk : in std_logic; Wcount : in integer range 0 to WordCnt-1; MinFCnt : in integer range 0 to MinFCount-1; Flag : out std_logic; AMR1X : in std_logic_vector(23 downto 0); AMR1Y : in std_logic_vector(23 downto 0); AMR1Z : in std_logic_vector(23 downto 0); AMR2X : in std_logic_vector(23 downto 0); AMR2Y : in std_logic_vector(23 downto 0); AMR2Z : in std_logic_vector(23 downto 0); AMR3X : in std_logic_vector(23 downto 0); AMR3Y : in std_logic_vector(23 downto 0); AMR3Z : in std_logic_vector(23 downto 0); AMR4X : in std_logic_vector(23 downto 0); AMR4Y : in std_logic_vector(23 downto 0); AMR4Z : in std_logic_vector(23 downto 0); Temp1 : in std_logic_vector(23 downto 0); Temp2 : in std_logic_vector(23 downto 0); Temp3 : in std_logic_vector(23 downto 0); Temp4 : in std_logic_vector(23 downto 0); WordOut : out std_logic_vector(WordSize-1 downto 0) ); end entity; architecture ar_DC_FRAME_PLACER of DC_FRAME_PLACER is signal MinFCntVect : std_logic_vector(8 downto 0); signal MinFCntVectLSB : std_logic; begin MinFCntVect <= std_logic_vector(TO_UNSIGNED(MinFCnt,9)); MinFCntVectLSB <= MinFCntVect(0); process(clk) begin if clk'event and clk ='1' then case MinFCntVect(2 downto 0) is when "000" => case Wcount is when 47 => WordOut <= AMR1X(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR1X(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR1X(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR1Y(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR1Y(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR1Y(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "001" => case Wcount is when 47 => WordOut <= AMR1Z(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR1Z(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR1Z(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR2X(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR2X(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR2X(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "010" => case Wcount is when 47 => WordOut <= AMR2Y(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR2Y(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR2Y(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR2Z(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR2Z(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR2Z(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "011" => case Wcount is when 47 => WordOut <= AMR3X(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR3X(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR3X(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR3Y(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR3Y(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR3Y(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "100" => case Wcount is when 47 => WordOut <= AMR3Z(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR3Z(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR3Z(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR4X(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR4X(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR4X(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "101" => case Wcount is when 47 => WordOut <= AMR4Y(23 downto 16); Flag <= '1'; when 48 => WordOut <= AMR4Y(15 downto 8); Flag <= '1'; when 49 => WordOut <= AMR4Y(7 downto 0); Flag <= '1'; when 50 => WordOut <= AMR4Z(23 downto 16); Flag <= '1'; when 51 => WordOut <= AMR4Z(15 downto 8); Flag <= '1'; when 52 => WordOut <= AMR4Z(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "110" => case Wcount is when 47 => WordOut <= Temp1(23 downto 16); Flag <= '1'; when 48 => WordOut <= Temp1(15 downto 8); Flag <= '1'; when 49 => WordOut <= Temp1(7 downto 0); Flag <= '1'; when 50 => WordOut <= Temp2(23 downto 16); Flag <= '1'; when 51 => WordOut <= Temp2(15 downto 8); Flag <= '1'; when 52 => WordOut <= Temp2(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when "111" => case Wcount is when 47 => WordOut <= Temp3(23 downto 16); Flag <= '1'; when 48 => WordOut <= Temp3(15 downto 8); Flag <= '1'; when 49 => WordOut <= Temp3(7 downto 0); Flag <= '1'; when 50 => WordOut <= Temp4(23 downto 16); Flag <= '1'; when 51 => WordOut <= Temp4(15 downto 8); Flag <= '1'; when 52 => WordOut <= Temp4(7 downto 0); Flag <= '1'; when others => WordOut <= X"A5"; Flag <= '0'; end case; when others => WordOut <= X"A5"; Flag <= '0'; end case; end if; end process; end ar_DC_FRAME_PLACER;