Как транслировать небольшое видео в spartan 3e fpga?

Используя cosmiac tutorial 13 http://www.cosmiac.org/tutorial_13.html и ISE 10.1 файл pdf показывает, как создать изображение, и вы можете загрузить проект, щелкнув первый файл .zip. В конце проекта написано... Теперь попробуйте передать небольшое видео аналогичным способом. Примечание. Необходимо соответствующим образом изменить файл Matlab, чтобы получить информацию о пикселях и файл reader.vhd в соответствии с используемыми спецификациями видео. Также необходимо получить видео, в котором используются только 8 цветов (которые могут быть представлены платой Spartan-3E), чтобы получить чистый вывод.

Мои вопросы: Если у меня есть файлы matlab .coe (видеокадр), могу ли я использовать однопортовую оперативную память (какой тип оперативной памяти в основном генераторе памяти) для потоковой передачи небольшого видео? и как мне модифицировать читалку ниже?

Допустим, я начинаю с 2 кадров (2 изображения). Я хочу показать их друг за другом, как видео, или 1 поверх другого (проще).

Что нужно помнить .. язык программирования vhdl, Xilinx ise любой версии (могу обновить), 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;

person Joe    schedule 13.07.2011    source источник


Ответы (2)


Вас может заинтересовать проект открытой графики: http://wiki.opengraphics.org/tiki-index.php

Они также используют Xilinx Spartan 3, однако их код — Verilog:

svn co svn://svn.opengraphics.org/ogp
person whoplisp    schedule 03.08.2011

Когда большинство людей говорят о видео, они имеют в виду много данных. Гораздо больше данных, чем младшая 15-летняя FPGA может содержать в виде блочной оперативной памяти. Даже с учетом компрессии. Особенно с учетом сжатия, потому что эта FPGA практически не может декодировать какой-либо эффективный видеокодек.

Поэтому, если вы не пытаетесь сделать что-то очень ретро или экзотическое (или и то, и другое), я не рекомендую хранить видео в BRAM. Ищите FPGA с контроллером DRAM и вместо этого используйте внешнюю память DDR1/2/3/что угодно.

Возвращаясь к вашему вопросу, если вы собираетесь хранить видео в BRAM, вы можете настроить его как ПЗУ с одним портом со значениями по умолчанию, просто добавьте файл coe в графический интерфейс генератора блочной памяти. Вопрос в том, как вы собираетесь выводить видео? У вас подключен монитор RGB/VGA? Или кодер NTSC с аналоговым ТВ? Или HDMI? Вам понадобится контроллер для вывода видео, а в некоторых случаях он может не подходить к вашей ПЛИС.

person hitomi2500    schedule 23.03.2020