📄 sumadato.vhd
字号:
-- 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -