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

📄 scontgeneric.vhd

📁 Image_Filter_An_Image_halftone is performed over data loaded into the on board RAM and presented on
💻 VHD
字号:
-- Contador gen閞ico, que se emplea para recorrer las m醩caras 
-- (o los pixels) y para recorrer la memoria por filas.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity scontgeneric is	-- Bloque para determinar la posicion de memoria.
generic(bin:integer :=128; 	-- Es 128 para cuando nos movemos por 
				-- las filas, es 1 para cuando nos 
				-- movemos de pixel a pixel.
	half:integer :=256; 	-- Es 256 para cuando nos movemos por 
				-- las filas, es 2 para cuando nos 
				-- movemos de mascara a mascara.
	N:integer :=14); 	-- Es 7 (128 posiciones) para cuando 
				-- nos desplazamos por columnas, 
				-- es 14 (16K por imagen) para cuando 
				-- nos desplazamos por filas.
port (
        clk: in  std_logic;
        Rst:in STD_LOGIC; 	-- Se resetea el scontgeneric al final 
				-- del procesamiento de imagen.
        GReset: in STD_LOGIC;
        avanza: in STD_LOGIC;   -- Para pasar a la siguiente posicion 
				-- que corresponda.
	Finmasc: inout STD_LOGIC; -- Indica que ha llegado al final de 
				  -- la fila o de la imagen, seg鷑 sea 
				  -- el uso del contador gen閞ico.
        masc: in STD_LOGIC; 	  -- Indica el tipo de proceso. 
        Cuenta: out STD_LOGIC_VECTOR (N downto 0)
    );
end scontgeneric;

architecture scontgeneric_arch of scontgeneric is


signal cta,ctaprox,satura:std_logic_vector (N downto 0);

begin

    async:process(satura,avanza,cta,masc)
    variable dummy : integer;
      begin
    
	for i in 0 to N-1 loop  -- Se asigna el valor de saturacion, 
				-- que es el final de fila o imagen.
      		satura(i)<='1';
	end loop;
      		satura(N)<='0';	
     
        if(masc='0') then 	-- Se asigna el paso de contador
				-- segun el procesamiento a realizar
      		dummy:=bin;
      		satura(0)<='1';
        else 
      		dummy := half;
      		satura(0)<='0'; -- Para tener en cuenta, en halftoning, 
				-- la primera posici髇 de la 鷏tima 
				-- m醩cara 2x2 de cada fila.
			
        end if;	
     

      if (avanza='1') then 
      			
	if (cta=satura) then
		Finmasc<='1';
		
		if (N=7) then 	-- Si nos movemos por columnas, queremos 
				-- que el siguiente valor tras saturar
				-- sea de nuevo inmediatamente cero.
			ctaprox<=(others=>'0');
		else		-- Si es por filas, queremos que se 
				-- exceda el maximo valor para que nos 
				-- sirva de condicion de fin de proceso 
				-- en las maquinas de estado.
			ctaprox <= cta + dummy;
		end if;
	
	else
		Finmasc<='0';
       		ctaprox <= cta + dummy;
	end if;
      else
         Finmasc<='0';
         ctaprox <= cta;
      end if;
    end process;
    
     sync:process(Rst,clk,GReset,ctaprox)
       begin
         If (GReset='1') then
         	cta<=(others=>'0');  
         	-- Para empezar la simulacion en las dos ultimas
         	-- filas de la imagen se puede proceder aqui de 
         	-- la siguiente manera:
         	-- if (N=7) then
           	--   cta<=(others=>'0');  	
		-- else
		--   cta<="011111100000000";
		-- end if;             
         elsif (clk'event and clk='1') then
		if (Rst='1') then  	-- Si hemos terminado de 
					-- procesar la imagen.
			cta<=(others=>'0');
		else
              		cta<= ctaprox;
              	end if;
         end if;
         
    end process;
     cuenta<= cta;               
end scontgeneric_arch;

⌨️ 快捷键说明

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