Перейти к содержанию
    

Функции DSP на ПЛИС

Реально ли сделать на ПЛИС обработку изображений(изображение поступает непостоянным потоком порядка 5МГц).Написал предварительный алгоритм - моделируется как надо, вот с синтезом проблемы.

 

Некоторый операции(деление) заменил пока для простоты на сложение.

 

Синтез в FPGA Express (Xilinx 4.2 Edition) выдает ошибку памяти, и на этом останавливается.

Xilinx 7.1 пытался просинтезировать алгоритм больше суток, в итоге так и ничего не получилось.

 

Собственно вопросы -

 

1)Как можно сделать чтобы правильно записывать в регистр REGW значения? Если писать в разных процессах, то при моделировании записываются неопределенные состояния.Писать для всего регистра разрешающую функцию? Или есть более простые решения для этого?

 

Проблема в if (signal1'event and signal1 = 1) ......

elsif (signal2'event and signal2 = 1) ....

 

Все сигналы меняются в разные моменты времени, поэтому паралельный доступ к регистру не нужен.

 

На данном этапе не особо важно во что синтезируется эта конструкция, оптимизация будет потом.

 

type zv_mem_type is array (1 to 25) of STD_LOGIC_VECTOR (33 downto 0);
type reg_mem_type is array (1 to 16) of zv_mem_type;
signal REGW: reg_mem_type;
------------

EDIT_REG : process(create, add, delete)
variable tem3, tem4: integer;
begin
tem3 := CONV_INTEGER(REGST(p)(4 downto 0)) + 1;
tem4 := CONV_INTEGER(LINEI) - CONV_INTEGER(REGW(p)(1)(10 downto 0));

if (create'event and create = '1') then    
    
    for i in 1 to 16 loop
        if zv_reg_sost(i)= 0 then 
            zv_reg_sost(i) <= 1;
            REGW(zv_reg(i))(1) <= DATAI & COLUMNI & LINEI;
            exit;
        end if;
    end loop;
    
elsif (add'event and add = '1')     then 
    
    REGW(p)(tem3) <= DATAI & COLUMNI & LINEI;

elsif (delete'event and delete = '1') then
    for ir in 1 to 25 loop    
    REGW(pras)(ir) <= "0000000000000000000000000000000000";
    end loop;
    zv_reg_sost(pras)<= 0;
end if;

end process;

 

2) Есть ли смысл писать тяжелые алгоритмы на ПЛИС вообще, или неоправданная потеря времени?

Примерный код в файле, если нужно нарисую схему самого алгоритма

 

ЗЫ: Не бейте очень сильно)Хотя чуствую стеба будет много.На vhdl пишу недавно совсем.

ver1.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработку изображений на ПЛИС сделать реально, выбрав соответствующий тип кристала. На мой взгляд такие вещи как фильтрация сами просяться быть уложенными в ПЛИС, при этом на основной проц при необходимости можно возложить лишь функции управления коэффициентами. Примеры обработки можно найти, к примеру, в Xilinx System Generator для матлаба.

 

Процесс EDIT_REG приведенный в приложенном Вами файле описан несомненно правильней и, если не вдаваться в подробности алгоритма, должен работать с REGW нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процесс EDIT_REG приведенный в приложенном Вами файле описан несомненно правильней и, если не вдаваться в подробности алгоритма, должен работать с REGW нормально.
Не будет. Описаны трехклоковые триггеры. Таких в FPGA нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработку изображений на ПЛИС сделать реально, выбрав соответствующий тип кристала. На мой взгляд такие вещи как фильтрация сами просяться быть уложенными в ПЛИС, при этом на основной проц при необходимости можно возложить лишь функции управления коэффициентами. Примеры обработки можно найти, к примеру, в Xilinx System Generator для матлаба.

Спасибо, обязательно расмотрю такой вариант

 

Не будет. Описаны трехклоковые триггеры. Таких в FPGA нет.

Тогда не скажете, каким способом можно правильно работать с REGW, без написания разрешающей функции?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не будет. Описаны трехклоковые триггеры. Таких в FPGA нет.

Тогда не скажете, каким способом можно правильно работать с REGW, без написания разрешающей функции?

Вопрос о записи в регистр по фронтам двух (а вот теперь и трех) разных сигналов всплывает постоянно. Поискав, вы наверняка найдете несколько подобных тем.

Надо использовать высокочастотный клок, а сигналы, по которым изменяется состояние регистра, использовать как разрешающие (clock enаble). Примерно так:

process(Reset, Clk)
begin
        if (Reset = '1') then
          ...
        elsif (rising_edge(Clk)) then
              if (create = '1') then
                 ...
              elsif (add = '1') then
                 ...
              elsif (delete = '1') then
                 ...
              end if;
        end if;
end process;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый andrew_b, предложенная вами конструкция повторяет то, что описано в приложенном к первому сообщению lamination файле ver1.txt (поправьте, если ошибаюсь). Именно ее я имел ввиду когда писал :

 

Процесс EDIT_REG приведенный в приложенном Вами файле описан несомненно правильней и, если не вдаваться в подробности алгоритма, должен работать с REGW нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо использовать высокочастотный клок, а сигналы, по которым изменяется состояние регистра, использовать как разрешающие (clock enаble).

У меня прикрепленном файле(который пытался синтезировать), так и сделано) просто мне показалось что это не совсем корректно, думал есть еще способы.

 

 

Что может быть причиной "зависания" синтезатора? у меня он работает в течении 2-х суток и ничего не выдает - это он входит в пустой цикл или все же дать ему поработать неделю?средний UART синтезируется буквально сразу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что может быть причиной "зависания" синтезатора? у меня он работает в течении 2-х суток и ничего не выдает - это он входит в пустой цикл или все же дать ему поработать неделю?средний UART синтезируется буквально сразу

 

Думаю ждать не стоит. Обратите внимание на процессы: MAIN, HOLD, HOLDras, RASCHET. Вы пытаетесь работать на разных клоках, сигналы проходят в другие клоковые зоны, что вызовет нестабильность. Сигналы delete, create, add и др. Вы пытаетесь изменять в разных процессах это тоже не есть хорошо.

Думаю также стоит лучше описать обращения к памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемый andrew_b, предложенная вами конструкция повторяет то, что описано в приложенном к первому сообщению lamination файле ver1.txt (поправьте, если ошибаюсь). Именно ее я имел ввиду когда писал :

 

Процесс EDIT_REG приведенный в приложенном Вами файле описан несомненно правильней и, если не вдаваться в подробности алгоритма, должен работать с REGW нормально.

Прошу прощения...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...