⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toptrata.vhd

📁 Image_Filter_An_Image_halftone is performed over data loaded into the on board RAM and presented on
💻 VHD
字号:
--Toptrata: Subtop encargado de realizar el procesamiento ordenado desde Topcom
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity toptrata is
    port (
        clk: in STD_LOGIC;
	Rstglobal:in STD_LOGIC;
	finproc:out STD_LOGIC;		-- Indica fin de procesamiento
	Tammasc: in STD_LOGIC_VECTOR(1 downto 0);	-- Tipo de proc.
	inproces: out std_logic;        -- Maqinser trabajando
	exproces:out std_logic;		-- Maqextrae trabajando
	leeproc:out std_logic;		-- lectura de la RAM
	escriproc:out std_logic;	-- escritura de la RAM
	espeorden: in STD_LOGIC;	-- Desde Topcom se indica aqui 
					-- el fin del almacenamiento de
					-- la imagen original.
        P19: out STD_LOGIC;  		-- pines del led de 7 segmentos
	P18: out STD_LOGIC;
	P23: out STD_LOGIC;
	P20: out STD_LOGIC;
	P24: out STD_LOGIC;
	P26: out STD_LOGIC;
	P25: out STD_LOGIC;
	dirorig: out STD_LOGIC_VECTOR (14 downto 0);
					-- direccion para cuando se accede 
					-- a la imagen origial
	dirpro: out STD_LOGIC_VECTOR (15 downto 0);
					-- direccion para cuando se accede
					-- a la imagen procesada
        datobien: inout STD_LOGIC_VECTOR (7 downto 0);
        				-- Bus de datos de la RAM
        pixdat: out STD_LOGIC_VECTOR (7 downto 0);
        				-- Para cuando se quiere acceder 
        				-- en escritura al bus de datos
        zcontrol:out STD_LOGIC; 	-- Para habilitar o dejar en 
        				-- triestado el dato anterior, lo 
        				-- cual se hara en Topglobal
        				
-- Los siguientes puertos se usaron para la simulacion de 'toptrata'
-- de forma independiente respecto de 'topcom' y 'topglobal'
        coge:out STD_LOGIC;    		-- Captura el dato de la RAM a la 
        				-- entrada del sumador
	recorre:out STD_LOGIC; 		-- Indica que se han recorrido todas
					-- las mascaras de una fila
	calcmed:out STD_LOGIC;		-- Para hacer la media de los pixels
					-- de una mascara
	clasmasc: out STD_LOGIC_VECTOR (2 downto 0);
					-- Tipo de mascara 2x2
	masqui:out STD_LOGIC  		-- Indica el tipo de procesamiento
					-- a los demas componentes
    );
end toptrata;

architecture toptrata_arch of toptrata is

component suminser  is	-- Calcula la direcc. para la imagen procesada
    port (
   
        filacont: in STD_LOGIC_VECTOR(14 downto 0); 
        ContmodN: in STD_LOGIC_VECTOR(7 downto 0); 
        
        inserta: in STD_LOGIC_VECTOR (1 downto 0);
        
        Sal2: out STD_LOGIC_VECTOR(15 downto 0)
    );
end component;

component sumextra is	-- Calcula la direcc. para la imagen original
    port (
     
        filacont: in STD_LOGIC_VECTOR(14 downto 0); 
        ContmodN: in STD_LOGIC_VECTOR(7 downto 0); 
        
        extrae: in STD_LOGIC_VECTOR (1 downto 0);
        
        Sal1: out STD_LOGIC_VECTOR(14 downto 0)
    );
end component;

component maqled is	-- Actua sobre el led de 7 segmentos
    port (
        Segmento: out STD_LOGIC_VECTOR (6 downto 0);
        TamMasc: in STD_LOGIC_VECTOR (1 downto 0);
        clk: in STD_LOGIC;
        GReset: in STD_LOGIC;
        guardada: in STD_LOGIC
        --finproceso: in STD_LOGIC
    );
end component;

component scontgeneric is	-- Para recorrer la memoria
    generic(
    	N: INTEGER :=14;
    	bin: INTEGER :=128;
    	half: INTEGER :=256
    	
    	);
    	
    port (
    	masc: in STD_LOGIC;
    	clk: in STD_LOGIC;
        GReset: in STD_LOGIC;
        Rst: in STD_LOGIC;
        avanza: in STD_LOGIC;
        Finmasc: out STD_LOGIC;
        Cuenta: out STD_LOGIC_VECTOR (N downto 0)
    );
end component;

component comparador is -- Compara el nivel medio de gris de la masc.
  
    port (
        Media: in STD_LOGIC_VECTOR(7 downto 0);
        masc: in STD_LOGIC;
    	clk: in STD_LOGIC;
        GReset: in STD_LOGIC;
        Nummasc: out STD_LOGIC_VECTOR(2 downto 0)
    );
end component;

component sumadato is	-- Suma y realiza la media de los pixels  
    port (
        Media: out STD_LOGIC_VECTOR(7 downto 0);
        masc: in STD_LOGIC;
    	clk: in STD_LOGIC;
        GReset: in STD_LOGIC;
        med: in STD_LOGIC;
        dato: in STD_LOGIC_VECTOR(7 downto 0);
        suma: in STD_LOGIC
    );
end component;

component smaqinser is	-- Controla la escritura de la imagen
			-- procesada
    port (
	triest:out STD_LOGIC;
        procesando: out STD_LOGIC; 
    	finproceso: out STD_LOGIC;
        otramasc: out STD_LOGIC;
        clk: in STD_LOGIC;
	ya: in STD_LOGIC; 
        GReset: in STD_LOGIC;
        summete: in STD_LOGIC_VECTOR (15 downto 0);  
        masc: in STD_LOGIC; 
        escribe: out STD_LOGIC;
        nummasc: in STD_LOGIC_VECTOR (2 downto 0); 
	datopix: out STD_LOGIC_VECTOR (7 downto 0);
        inscambia: out STD_LOGIC_VECTOR (1 downto 0)
       
    );
end component;

component smaqextrae is	-- Controla la lectura de la imagen original
			-- y la operacion con sus valores
 port (
	procesando: out STD_LOGIC; 
        otramasc: in STD_LOGIC; 
        clk: in STD_LOGIC;
	captura: out STD_LOGIC;
        GReset: in STD_LOGIC;
        sumext: in STD_LOGIC_VECTOR (14 downto 0);
        Tammasc: in STD_LOGIC_VECTOR (1 downto 0);
        medium: out STD_LOGIC;
        lee: out STD_LOGIC;
        ya: out STD_LOGIC;
        masc: out STD_LOGIC; 
        suma: out STD_LOGIC;
        excambia: out STD_LOGIC_VECTOR (1 downto 0)
    );
end component;


signal termina,Pasamasc,hazmedia,otram,go: std_logic;
signal triest,plus,tipoproc,sostiene: std_logic;
signal datosum,Contmasc,rango,datopix: STD_LOGIC_VECTOR (7 downto 0);
signal inscam,excam : STD_LOGIC_VECTOR (1 downto 0);
signal halfmasc : STD_LOGIC_VECTOR (2 downto 0);
signal inserdir : STD_LOGIC_VECTOR (15 downto 0);
signal Contfilas,extdir : STD_LOGIC_VECTOR (14 downto 0);

-- La siguiente signal se uso para la simulacion de 'toptrata'
-- de forma independiente respecto de 'topcom' y 'topglobal'.-
--signal pixeldata : STD_LOGIC_VECTOR (7 downto 0);

begin


metedir: suminser  
    port map(
     
        filacont => Contfilas, 
        ContmodN => Contmasc, 
        inserta => inscam,
        Sal2 => inserdir
    );
dirpro<=inserdir;


sacadir: sumextra 
    port map(
      
        filacont => Contfilas, 
        ContmodN => Contmasc,
        extrae => excam,
        Sal1 => extdir
    );
dirorig<=extdir;

LED: maqled 
    port map(
        Segmento(6) => P19,
	Segmento(5) => P18,
	Segmento(4) => P23,
	Segmento(3) => P20,
	Segmento(2) => P24,
	Segmento(1) => P26,
	Segmento(0) => P25,
        TamMasc => Tammasc,
        clk => clk,
        GReset => Rstglobal,
        guardada => espeorden
        --finproceso => termina
    );

zona: scontgeneric 	-- Para recorrer las mascaras o pixels
			-- a lo largo de una fila
	generic map(N =>7,
		bin => 1,
		half => 2)
	port map(clk => clk,
		GReset => Rstglobal,
		masc => tipoproc,
		Rst => termina,
		avanza => otram,
		Finmasc => Pasamasc,
		Cuenta => Contmasc);

recorre<=Pasamasc;
  
filas: scontgeneric	-- Para recorrer las filas de la memoria
	generic map(N =>14,
		bin => 128,
		half => 256)
	port map(clk => clk,
		GReset => Rstglobal,
		masc => tipoproc,
		Rst => termina,
		avanza => Pasamasc,
		Finmasc => open,
		Cuenta => Contfilas);
		



Tipomasc: comparador 
  
    port map(
        Media => rango,
       	masc => tipoproc,
    	clk => clk,
        GReset => Rstglobal,
        Nummasc => halfmasc
    );


Sumador: sumadato 
  
    port map(
        Media => rango,
       	masc => tipoproc,
    	clk => clk,
        GReset => Rstglobal,
        med => hazmedia,
        dato => datosum,
        suma => plus
    );




ME1: smaqinser 
    port map(
    	triest=>triest,
        procesando => inproces, 
    	finproceso => termina, 
        otramasc => otram,	
        clk => clk,
	ya => go, 	
        GReset => Rstglobal,
        summete => inserdir, 	 
        masc => tipoproc, 	
        escribe => escriproc,
        nummasc => halfmasc, 	
	datopix => datopix,        
	inscambia => inscam
       
    );

ME2: smaqextrae 
 port map(
	procesando => exproces, 
        otramasc => otram, 	
        clk => clk,
	captura => sostiene,
        GReset => Rstglobal,
        sumext => extdir,
        Tammasc => Tammasc,
        medium => hazmedia,	
        lee => leeproc,	
        ya => go,	
        masc => tipoproc,	
        suma => plus,	
        excambia => excam 	
    );
    
coge<=sostiene;
finproc<=termina;
masqui<=tipoproc;
calcmed<=hazmedia;
clasmasc<=halfmasc;

-- Proceso para capturar en biesables el dato leido de la RAM 
mantiene: process (sostiene,clk,Rstglobal)
	begin
	if (Rstglobal='1') then		
		datosum<=(others=>'0');	-- No seria necesario
	elsif(clk'event and clk='0') then
		if (sostiene='1') then
			datosum<=datobien;
		end if;
	end if;
end process;

-- El siguiente proceso se uso para la simulacion de 'toptrata'
-- de forma independiente respecto de 'topcom' y 'topglobal'
--a:process(triest,datopix)
--begin
--if (triest='1') then
--		pixeldata<=(others=>'Z');
--else
--		pixeldata<=datopix;
--end if;

--end process;

--datobien<=pixeldata;


pixdat<=datopix;	

zcontrol<=triest;

end toptrata_arch;

⌨️ 快捷键说明

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