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