sumadato.vhd

来自「Image_Filter_An_Image_halftone is perfor」· VHDL 代码 · 共 69 行

VHD
69
字号
-- Sumador de datos, que recibe los pixels leidos de la imagen,
-- y realiza la suma y media de los 4 valores de cada mascara 2x2 
-- en el caso de que se trate de procesamiento halftonning.
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity sumadato is
    port (
        dato: in STD_LOGIC_VECTOR (7 downto 0); 
        			-- Pixel capturado de la
        			-- imagen original.
        masc: in STD_LOGIC; 	-- Maqextrae le indica asi el 
        			-- tipo de proceso.
        suma: in STD_LOGIC; 	
        med: in STD_LOGIC; 	-- Para hacer la media de los 
        			-- pixels de la mascara.
        GReset: in std_logic;
        clk: in std_logic;
        media: out STD_LOGIC_VECTOR (7 downto 0) -- Media de la masc. 
    );
end sumadato;

architecture sumadato_arch of sumadato is
signal sumaux,anyade: std_logic_vector(9 downto 0);
				-- 10 bits porque sumamos 4 pixels
signal mediaux,auxmed:std_logic_vector(9 downto 0);
				-- Al sacar la media solo tendremos 
				-- en cuenta los 8 primeros bits.
begin
     
       async: process(suma,masc,auxmed,dato,med,anyade)
           begin
              
               if(suma='1') then
                  sumaux<=anyade+dato;  -- Lo sumamos el dato al 
                  			-- valor acumulado.
		  mediaux<=auxmed;
               elsif (med='1' ) then                          
                  if(masc='1') then 	-- mascara de 2x2
                  	mediaux<="00" & anyade(9 downto 2); 
                  			-- Para implementar la division
                  			-- por 4, desechamos los dos
                  			-- ultimos bits.
                  else
                  	mediaux<=anyade;  --caso binario
                  end if;
                  sumaux<="0000000000";	-- Nos preparamos para el 
                  			-- sgte. pixel o mascara.
               else  
               sumaux<=anyade;
               mediaux<=auxmed;
               end if;                  
       end process;
            
       sync:process(clk,mediaux,GReset,sumaux)
           begin
               if (GReset='1') then	-- Reset global
               	anyade<="0000000000"; 
               	auxmed<="0000000000";
               elsif(clk'event and clk='1') then
                auxmed<=mediaux;      	        			
		anyade<=sumaux;
               end if;
       end process;
media<=auxmed(7 downto 0);		-- Para tener una salida 
					-- de ocho bits.                 
end sumadato_arch;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?