Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC->NiosII+SDRAM->VGA
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
LAS9891
Имеется проект на NiosII c SDRAM. В SDRAM организован кадровый буфер. Поставлена задача считать данные с АЦП, записать данные в SDRAM и затем отобразить их на мониторе. Возник вопрос каким образом тактировать АЦП и считывать данные с него? Просто через PIO? Какой способ эффективнее для решения такой задачи?
Golikov A.
если у вас есть ниос, то у вас и остальная FPGA имеется. Естественно сделать автономный блок сбора данных с АЦП обычно предпочтительнее чем процом его дергать.
LAS9891
Цитата(Golikov A. @ May 10 2017, 10:35) *
Естественно сделать автономный блок сбора данных с АЦП обычно предпочтительнее чем процом его дергать.

А как данные с автономного блока попадут в Nios и далее в SDRAM? Через чтение PIO?
Realking
Цитата(LAS9891 @ May 10 2017, 09:38) *
А как данные с автономного блока попадут в Nios и далее в SDRAM? Через чтение PIO?


Avalon Master

пишите в SDRAM (типа DMA), выставляете прерывание по окончании записи, а в Nios считываете данные из SDRAM
LAS9891
Цитата(Realking @ May 10 2017, 10:50) *
Avalon Master

пишите в SDRAM (типа DMA), выставляете прерывание по окончании записи, а в Nios считываете данные из SDRAM

Неподскажите пример подобной реализации?
Realking
Цитата(LAS9891 @ May 10 2017, 09:52) *
Неподскажите пример подобной реализации?


думаю разберетесь

только в mm_bridge

s0 - надо export
m0 - на s1 sdram контроллера
Golikov A.
если не надо буфера данных собирать можно и без ДМА просто ниосом читать. Из ниоса выходит системная шина, ее надо поддержать в автономном блоке.
Realking
Цитата(Golikov A. @ May 10 2017, 10:52) *
если не надо буфера данных собирать можно и без ДМА просто ниосом читать. Из ниоса выходит системная шина, ее надо поддержать в автономном блоке.


если АЦП медленный)))
Golikov A.
если автономный блок проводит первичную обработку, фильтрацию и децимацию данных то иногда и для быстрых АЦП ДМА не понадобится.
LAS9891
Цитата(Realking @ May 10 2017, 10:50) *
пишите в SDRAM (типа DMA), выставляете прерывание по окончании записи

Т.е. запись в SDRAM и прерывание нужно производить без участия NIOS?
Realking
Цитата(LAS9891 @ May 10 2017, 11:40) *
Т.е. запись в SDRAM и прерывание нужно производить без участия NIOS?


да, на "железном" уровне

не нужно, а можно))) это как захочется

только не забудь прерывание снимать из NIOS (они там уровневые)
LAS9891
Цитата(Realking @ May 10 2017, 13:15) *
да, на "железном" уровне

Тогда выходит нужно будет ещё и контроллер SDRAM написать в железе
Realking
Цитата(LAS9891 @ May 10 2017, 13:02) *
Тогда выходит нужно будет ещё и контроллер SDRAM написать в железе


нет не надо
я же прикладыва qsys

там все есть
общение из FPGA с SDRAM через mm_bridge (Avalon-MM Pipeline Bridge)

а шина авалон - простейшая
LAS9891
Цитата(Realking @ May 10 2017, 14:14) *
нет не надо
я же прикладыва qsys

там все есть
общение из FPGA с SDRAM через mm_bridge (Avalon-MM Pipeline Bridge)

а шина авалон - простейшая


А теперь все сразу и заново. Есть АЦП, с которого данные считываются автономным блоком, далее автономный блок передает данные в Nios через Avalon Master. Nios через какой-то mm_bridge записывает данные в SDRAM, а потом опять Nios читает данные из SDRAM. Так?
Realking
Цитата(LAS9891 @ May 10 2017, 13:28) *
А теперь все сразу и заново. Есть АЦП, с которого данные считываются автономным блоком, далее автономный блок передает данные в Nios через Avalon Master. Nios через какой-то mm_bridge записывает данные в SDRAM, а потом опять Nios читает данные из SDRAM. Так?


да, но только автономный блок передает данные не в ниос, а сразу в память через авалон бридж
LAS9891
Цитата(Realking @ May 10 2017, 14:32) *
да, но только автономный блок передает данные не в ниос, а сразу в память через авалон бридж

Ага. Есть АЦП, с которого данные считываются автономным блоком, далее автономный блок передает данные через mm_bridge в SDRAM, потом Nios читает данные из SDRAM. Так?
Realking
Цитата(LAS9891 @ May 10 2017, 13:35) *
Ага. Есть АЦП, с которого данные считываются автономным блоком, далее автономный блок передает данные через mm_bridge в SDRAM, потом Nios читает данные из SDRAM. Так?


точно

и передавайте эти данные на дисплей)

только учтите... если у вас прога выполняется из SDRAM вам надо разделить память для программы и данных АЦП

делается это в BSP editor linker script (установите размер sdram меньше), остальная часть под данные АЦП
Golikov A.
Есть автономный блок который читает данные из АЦП в свою внутреннюю память.

Дальше есть варианты:

- ниос может через авалон считать данные из этого блока себе в регистры и работать с ними, в том числе положить в память.
- Либо специальный ДМА контроллер может данные из этого автономного блока положить в память, откуда их может забрать ниос или другие блоки.
Функции ДМА можно встроить в функции блока.
- Можно сделать выделенный банк 2 портовой памяти в который с разных сторон ходят автономный блок и ниос

это все вариации распределения ресурсов в зависимости от задачи.

LAS9891
Цитата(Realking @ May 10 2017, 14:59) *
точно

Для начала как подружить автономным блок с mm_bridge? Вот считал я данные с АЦП, они лежат в каком-то регистре, как их отправить на этот mm_bridge?
Realking
Цитата(LAS9891 @ May 10 2017, 14:02) *
Для начала как подружить автономным блок с mm_bridge? Вот считал я данные с АЦП, они лежат в каком-то регистре, как их отправить на этот mm_bridge?


почитайте про Avalon шину, и все поймете

как написал Golikov A. надо сделать простенький DMA
c одной стороны блок АЦП, с другой Avalon шина
LAS9891
Цитата(Golikov A. @ May 10 2017, 14:59) *
Есть автономный блок который читает данные из АЦП в свою внутреннюю память.

Дальше есть варианты:

- ниос может через авалон считать данные из этого блока себе в регистры и работать с ними, в том числе положить в память.
- Либо специальный ДМА контроллер может данные из этого автономного блока положить в память, откуда их может забрать ниос или другие блоки.
Функции ДМА можно встроить в функции блока.
- Можно сделать выделенный банк 2 портовой памяти в который с разных сторон ходят автономный блок и ниос

это все вариации распределения ресурсов в зависимости от задачи.

Допустим блок есть и читает он данные из АЦП, только что вы подразумеваете под внутренней памятью? АЦП оцифровывает целый кадр изображения размером 800x600 точек и каждый пиксель кодируется 8-ю битами. Внутренней памяти на кадровый буфер не хватит. Поэтому автономный блок должен быстренько считать данные о первом пикселе (один байт), быстренько отправить этот байт в кадровый буфер номер 1 в SDRAM, и заново читать АЦП - уже второй пиксель, и так до конца первого кадра. Затем второй кадр читается уже во второй буфер в SDRAM, а первый кадр выводится на монитор.

Для реализации такого наверно более подходит вариант со специальным ДМА контроллером.

Цитата(Realking @ May 10 2017, 15:10) *
почитайте про Avalon шину, и все поймете

А есть про неё что-нибудь на русском языке?

Цитата(Realking @ May 10 2017, 15:10) *
как написал Golikov A. надо сделать простенький DMA
c одной стороны блок АЦП, с другой Avalon шина

Имеете в виду это: АЦП->автономный блок->Avalon шина->DMA->SDRAM
Realking
Цитата(LAS9891 @ May 10 2017, 14:17) *
Допустим блок есть и читает он данные из АЦП, только что вы подразумеваете под внутренней памятью? АЦП оцифровывает целый кадр изображения размером 800x600 точек и каждый пиксель кодируется 8-ю битами. Внутренней памяти на кадровый буфер не хватит. Поэтому автономный блок должен быстренько считать данные о первом пикселе (один байт), быстренько отправить этот байт в кадровый буфер номер 1 в SDRAM, и заново читать АЦП - уже второй пиксель, и так до конца первого кадра. Затем второй кадр читается уже во второй буфер в SDRAM, а первый кадр выводится на монитор.

Для реализации такого наверно более подходит вариант со специальным ДМА контроллером.


А есть про неё что-нибудь на русском языке?


Имеете в виду это: АЦП->автономный блок->Avalon шина->DMA->SDRAM


АЦП->автономный блок->FIFO->DMA->Avalon шина->mm_bridge->SDRAM

FIFO лучше сделать с байтовым входом и 32битным выходом

P.S. на русском такие доки лучше не читать
LAS9891
Цитата(Realking @ May 10 2017, 15:22) *
АЦП->автономный блок->FIFO->DMA->Avalon шина->mm_bridge->SDRAM


А в роли FIFO выбрать Avalon-ST Dual Clock FIFO Core ?
Golikov A.
Ну при таком раскладе только DMA,
FIFO авалоновское наверное не обязательно, если только его будет легче подружить с DMA контроллером, он тоже готовый имеется в системе ниос. Но я не думаю, что будет легче. Потому что для пихания в FIFO придется авалон поддержать в том же объеме что и для работы с ДМА.
Kapsik
Цитата(LAS9891 @ May 10 2017, 08:25) *
Имеется проект на NiosII c SDRAM. В SDRAM организован кадровый буфер. Поставлена задача считать данные с АЦП, записать данные в SDRAM и затем отобразить их на мониторе. Возник вопрос каким образом тактировать АЦП и считывать данные с него? Просто через PIO? Какой способ эффективнее для решения такой задачи?

Доброе утро!
Тему прочитал, но не совсем понял в каком месте необходим НИОС? Там у вас какая-то обработка? Или задача стоит просто как
Цитата(LAS9891 @ May 10 2017, 08:25) *
Поставлена задача считать данные с АЦП, записать данные в SDRAM и затем отобразить их на мониторе.
Если так, то попробуйте взглянуть тут https://habrahabr.ru/post/283488/ . Тут чисто "аппаратно" реализовано Камера ->SDRAM(два буфера один пишем, другой читаем)->VGA.
LAS9891
Цитата(Kapsik @ May 11 2017, 11:27) *
Тему прочитал, но не совсем понял в каком месте необходим НИОС?

Решил использовать ниос, потому что там есть готовый контроллер SDRAM и на данный момент вывод изображения из буфера SDRAM уже работает.
Golikov A.
так SDRAM контроллер есть и без ниоса, он то тут причемsm.gif
LAS9891
Цитата(Golikov A. @ May 12 2017, 00:13) *
так SDRAM контроллер есть и без ниоса, он то тут причемsm.gif

В MegaWizarde видел только для DDR SDRAM, или вы имеете ввиду где нибудь скачать?
Flip-fl0p
Цитата(LAS9891 @ May 12 2017, 09:10) *
В MegaWizarde видел только для DDR SDRAM, или вы имеете ввиду где нибудь скачать?

Могу поделиться самым примитивным SDR SDRAM контроллером. Проверялся на памяти SDRAM MT48LC4M16A2-75 Micron. Правда он написан на VHDL мною пол года назад, и скорее всего написан очень криво с кучей недостатков и непонятно как он вообще работает. Однако он работает laughing.gif
IL-76
У Альтеры был бесплатный контроллер SDR SDRAM, вроде даже с исходниками. Плюс, описание в аппноте. Поищите на сайте или на фтп.
Burenkov Sergey
В наборе кор университетской программы Альтеры есть бесплатные видео модули
ftp://ftp.altera.com/up/pub/Intel_Materia...Video/Video.pdf
DMA Controller for Video - то что вам скорее всего подойдет. На вход даете поток от ацп, а контролер сам складывает в память. Но учтите, что в этом контроллере нет поддержки burst транзакций на avallon шине, поэтому на хоть сколько нибудь серьезные разрешения и fps не приходится рассчитывать
Aldec
Цитата(Realking @ May 10 2017, 07:50) *
Avalon Master

пишите в SDRAM (типа DMA), выставляете прерывание по окончании записи, а в Nios считываете данные из SDRAM


Можно выходы развести едитором или в Custom Instructions настроить

www.xilinx.com/support/documentation/sw_manuals/help/iseguide/mergedProjects/fpga_editor/whgdata/whnvt30.htm
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.