реклама на сайте
подробности

 
 
> Разделение внешней памяти между NIOS и HDL-модулем, Обработка видеоизображения процессором
altlogic
сообщение Jun 30 2012, 05:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Здравствуйте!

Необходимо создать систему обработки видеоизображений с применением софт-процессора NIOS II. Задача такая: записать изображение с CMOS-камеры в оперативную память и произвести над ним некоторую обработку при помощи процессора.

Аппаратное обеспечение: стенд DE2-115 (Cyclone 4), плата с камерой TRDB-D5M.
Нашел пример от альтеры DE2_115_CAMERA, в котором реализовано на верилоге примерно следующая система:
захват изображения->декодер->контроллер SDRAM->ТВ-деодекодер

Подумал, что всего-то делов - подключить к этой системе NIOS и забрать данные из SDRAM. Не тут-то былоsm.gif Задачу решаю уже не первый день...

Мои варианты решения задачи:

1. Решил отказаться от идеи расшаривания SDRAM. Решил писать картинку в SRAM, и расшарить её. От SDRAM отказался по следующим соображениям: не понимаю, может ли быть в одной системе два контроллера памяти - один у HDL, другой - у NIOS. Если такое возможно, то как будет происходить разделение шины между ними, и самое главное - какой из контроллеров будет заниматься регенерацией памяти. SRAM подключил через Avalon MM Tristate Bridge ( по инструкции http://naliwator.narod.ru/les/les_nios_sram_00.html). В Top-level дизайн проекта DE2_115_CAMERA добавил соответсвенно свою систему из сопц-билдера. Софт-процессор с памятью SRAM заработал. Когда я попытался подключить шину моста SRAM к декодеру изображения - ничего не получилось. От ошибки разделения пинов

Цитата
Error: The pin "SRAM_ADDR[1]" has multiple drivers due to the non-tri-state driver "nios:u9|bridge_2_sram_avalon_slave_arbitrator:the_bridge_2_sram_avalon_slav
e|bridge_2_sram_address[1]"
не смог избавиться. Точнее для шины данных ошибку смог побороть, а для шины адреса - нет(?). Пришёл к выводу, что таким образом Расшарить SRAM у меня не получится. Подключение HDL-дизайна к выводам FPGA (assign SRAM_ADDR[19:0] = rSRAM_ADDR[19:0]wink.gif приводит к описанной выше ошибке.

2. Создание в SOPC-Builder компонента на основе HDL описания всей камеры целиком. То есть создать такой компонент в который запихать всё - и блок захвата, и блоки обработки и контроллер SDRAM. Как управлять этим монстром - не понятно. Не ясно что делать с разнородными интерфейсами модуля - там и Conduit и Memory Mapped. Предлагаемый подход я нашёл в реализации "Nios II CRC Acceleration Example Design v2.2.0"(http://www.altera.com/support/examples/nios2/exm-crc-acceleration.html). Но там компонент попроще - всего лишь генератор CRC.

3. Создание в SOPC-Builder компонента на основе HDL модуля контроллера SDRAM. Придётся перенести SDRAM-контроллер с HDL в процессор. Возможно самый правильный подход. Пока не рассматривал.

В итоге вопрос, как же обмениваться данными между HDL и NIOS так и повис в воздухе. Видел советы по использованию в подобных ситуациях SGDMA, DMA... Но мне не дает покоя мысль, что всё должно быть гораздо проще. Какой путь более правильный и менее трудозатратный в моем случае? Подскажите пожалуйста.

top-level по первому варианту решения - в приложении. Ниже приведен отрывок топ-левела, где к выводам NIOS подключен HDL код инициализации SRAM памяти.

...
nios u9(
.clk_0 (CLOCK_50),
.reset_n (reset_n),
.bridge_2_sram_address (SRAM_ADDR),
.bridge_2_sram_byteenablen ({SRAM_UB_N, SRAM_LB_N}),
.bridge_2_sram_data (SRAM_DQ),
.bridge_2_sram_writen (SRAM_WE_N),
.in_port_to_the_sw (in_port_to_the_sw),
.out_port_from_the_led (out_port_from_the_led),
.rxd_to_the_uart (rxd_to_the_uart),
.txd_from_the_uart (txd_from_the_uart)
);
...
always@(posedge CLOCK_50 or negedge iRST)
begin
if(!iRST)
begin
writen_pixel <= 0;
nDW <= 1'b1;
end
else
begin
if (writen_pixel < 400*300)
begin
nDW <= 1'b1;
writen_pixel <= writen_pixel + 1;
rSRAM_ADDR[19:0] <= writen_pixel;
rSRAM_CE_N <= 1'b0;
rSRAM_DQ[15:0] <= 16'h5555;
rSRAM_LB_N <= 1'b0;
rSRAM_OE_N <= 1'b0;
rSRAM_UB_N <= 1'b1;//сташий байт не используется
rSRAM_WE_N <= 1'b0;
end
else
begin
rSRAM_ADDR[19:0] <= 20'hZZZZZ;
rSRAM_CE_N <= 1'bz;
rSRAM_DQ[15:0] <= 16'hZZZZ;
rSRAM_LB_N <= 1'bZ;
rSRAM_OE_N <= 1'bZ;
rSRAM_UB_N <= 1'bZ;//сташий байт не используется
rSRAM_WE_N <= 1'bZ;
nDW <= 1'b0;
end
end //else (nRST==1)
end

assign SRAM_DQ = rSRAM_DQ;
assign SRAM_ADDR[19:0] = rSRAM_ADDR[19:0];
assign SRAM_CE_N = rSRAM_CE_N;
assign SRAM_LB_N = rSRAM_LB_N;
assign SRAM_OE_N = rSRAM_OE_N;
assign SRAM_UB_N = rSRAM_UB_N;
assign SRAM_WE_N = rSRAM_WE_N;
...
Прикрепленные файлы
Прикрепленный файл  camera.v ( 10.78 килобайт ) Кол-во скачиваний: 510
 


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
altlogic
сообщение Jul 2 2012, 22:28
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 2-12-06
Из: г. Хабаровск
Пользователь №: 23 035



Цитата(barabek @ Jul 2 2012, 11:59) *
Есть система с Nios. В ней есть контроллер памяти (SRAM или SDRAM), который является slave...

То есть вы предлагете выбросить из существующего проекта контоллер памяти, написанный на Verilog, и заменить его контроллером SOPC-Builder'а? Я боюсь, всплывут подводные камни по настройке контроллера и подгонке его под VGA-контроллер. Эти два блока тесно связаны между собой в сущесвтующем проекте.


Цитата(Shivers @ Jul 2 2012, 14:37) *
...наружу интерфейс как у SDRAM. И подключить к сгенерированному контроллеру SDRAM.

То есть всё-таки варинат с двумя контоллерами SDRAM имеет право на жизнь?


Цитата(Petr_I @ Jul 3 2012, 02:58) *
Пишите к своему модулю камеры только интерфейс Avalon-ST.

Много сигналов. И не для всех понятно соответсвие шине Avalon... Но если это правильный путь, то тогда нужно идти имsm.gif


--------------------
С уважением, Вячеслав
Go to the top of the page
 
+Quote Post
barabek
сообщение Jul 3 2012, 02:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 540
Регистрация: 16-08-07
Из: Владивосток
Пользователь №: 29 831



Цитата(altlogic @ Jul 3 2012, 08:28) *
То есть вы предлагете выбросить из существующего проекта контоллер памяти, написанный на Verilog, и заменить его контроллером SOPC-Builder'а? Я боюсь, всплывут подводные камни по настройке контроллера и подгонке его под VGA-контроллер. Эти два блока тесно связаны между собой в сущесвтующем проекте.


Можно оставить и Ваш контроллер памяти, добавив в удобном месте прослойку из авлоновских миастера и слейва.


Цитата
То есть всё-таки варинат с двумя контоллерами SDRAM имеет право на жизнь?


Скорее нет. Или это будет такой геморой что ну его.


Цитата
Много сигналов. И не для всех понятно соответсвие шине Avalon... Но если это правильный путь, то тогда нужно идти им sm.gif


Может Вам действительно написать прослойку от шины авалон внутрь Вашего модуля.


При любом раскладе не забудьте добавить арбитр. Просто в сопц он добавляется автоматически и расшаривание памяти там легко реализовать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 15:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016