Al usar el tutorial cosmiac 13 http://www.cosmiac.org/tutorial_13.html e ISE 10.1, el archivo pdf muestra cómo generar una imagen y puede descargar el proyecto haciendo clic en el primer archivo .zip. Al final del proyecto, dice ... Ahora intenta transmitir un pequeño video en un método similar. Nota: es necesario modificar el archivo Matlab de forma adecuada para obtener la información de píxeles y el reader.vhd a las especificaciones de video utilizadas. También es necesario obtener un video que utiliza solo los colores 8 (que pueden ser representados por la placa Spartan-3E) para obtener una salida limpia.Cómo transmitir un pequeño video en spartan 3e fpga?
Mis preguntas son ... Si tengo los archivos matlab .coe (marcos de video), ¿utilizo un ram de puerto único (qué tipo de ram en el generador de memoria central) para transmitir un video pequeño? y ¿cómo puedo modificar el lector a continuación?
Digamos que empiezo con 2 cuadros (2 imágenes). Quiero mostrarlo de nuevo como un video o 1 encima de otro (más fácil).
Cosas que recordar ... lenguaje de programación de vhdl, Xilinx ise cualquier versión (puedo actualizar), Xilinx Impact.
---------------------------------------------------------------------------------
-- File Name: reader.vhd
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity reader is
Port (clk, reset : in STD_LOGIC;
row : in STD_LOGIC_VECTOR (9 downto 0);
col : in STD_LOGIC_VECTOR (9 downto 0);
addr : out STD_LOGIC_VECTOR (15 downto 0);
ennormal, enencryp : out std_logic;
datain : in STD_LOGIC_VECTOR (2 downto 0);
dataout : out STD_LOGIC_VECTOR (2 downto 0));
end reader;
architecture Behavioral of reader is
constant vtop : integer := 128;
constant vbottom : integer := 351;
constant htop1 : integer := 64;
constant hbottom1 : integer := 287;
constant htop2 : integer := 352;
constant hbottom2 : integer := 575;
signal addr_normal : STD_LOGIC_VECTOR (15 downto 0) := (others => '0');
signal addr_encryp : STD_LOGIC_VECTOR (15 downto 0) := (others => '0');
signal en_normal : std_logic := '0';
signal en_encryp : std_logic := '0';
begin
ens : process (clk, reset)
begin
if reset = '1' then
en_normal <= '0';
en_encryp <= '0';
elsif clk'event and clk='1' then
if (row >= vtop) and (row <= vbottom) then
if (col >= htop1) and (col <= hbottom1) then
en_normal <= '1';
en_encryp <= '0';
elsif (col >= htop2) and (col <= hbottom2) then
en_normal <= '0';
en_encryp <= '1';
else
en_normal <= '0';
en_encryp <= '0';
end if;
else
en_normal <= '0';
en_encryp <= '0';
end if;
end if;
end process ens;
c_normal: process (clk, reset)
begin
if reset = '1' then
addr_normal <= (others => '0');
elsif clk'event and clk='1' then
if en_normal = '1' then
if addr_normal = 50175 then
addr_normal <= (others => '0');
else
addr_normal <= addr_normal + 1;
end if;
end if;
end if;
end process c_normal;
c_encryp: process (clk, reset)
begin
if reset = '1' then
addr_encryp <= (others => '0');
elsif clk'event and clk='1' then
if en_encryp = '1' then
if addr_encryp = 50175 then
addr_encryp <= (others => '0');
else
addr_encryp <= addr_encryp + 1;
end if;
end if;
end if;
end process c_encryp;
addr <= addr_normal when (en_normal = '1') else addr_encryp;
dataout <= datain;
ennormal <= en_normal;
enencryp <= en_encryp;
end Behavioral;