1 library IEEE; 2 use IEEE.STD_LOGIC_1164.ALL; 3 use IEEE.NUMERIC_STD.ALL; 4 5 entity dp_a is 6 Port ( A : in STD_LOGIC_VECTOR (7 downto 0); 7 LA : in STD_LOGIC; 8 EA : in STD_LOGIC; 9 LB : in STD_LOGIC; 10 EB : in STD_LOGIC; 11 clk : in STD_LOGIC; 12 z : out STD_LOGIC; 13 a0 : out STD_LOGIC; 14 Dout : out STD_LOGIC_VECTOR (7 downto 0)); 15 end dp_a; 16 17 architecture Behavioral of dp_a is 18 signal a_r,b_r: unsigned (7 downto 0); -- slaida de los registros: desplazamiento y contador 19 begin 20 21 --========== shift register para almacenar y rotar el dato de entrada A ============== 22 shift_reg:process(clk) 23 begin 24 if rising_edge(clk) then 25 if LA='1' then 26 a_r <= unsigned(A); --cargar el shift register con el dato de entrada A 27 elsif EA='1' then 28 a_r <= shift_right(a_r,1); 29 end if; 30 end if; 31 end process; 32 --=================================================================================== 33 34 --========== counter rgister para almacenar el numero de unos ========================= 35 counter_reg:process(clk) 36 begin 37 if rising_edge(clk) then 38 if LB='1' then 39 b_r <= (others=>'0'); 40 elsif EB='1' then 41 b_r <= b_r+1; --incrementar el contador 42 end if; 43 end if; 44 end process; 45 --=================================================================================== 46 47 --========== comparador con zero ==================================================== 48 z <= '1' when a_r = "00000000" else '0'; -- compuerta nor 49 --=================================================================================== 50 51 --========== salida a0 ============================================================== 52 a0 <= a_r(0); 53 --=================================================================================== 54 55 --========== salida Dout ============================================================ 56 Dout <= std_logic_vector(b_r); 57 --=================================================================================== 58 59 end Behavioral; 60 61