📄 scontgeneric.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 + -