Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроллер SDRAM
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
RHnd
Я вот думаю, где бы взять готовый контроллер SDRAM? Если кто-нибудь уже сталкивался, не поделитесь?

Кстати, пришла в голову мысля: А если в SOPC собрать ниос с контроллером SDRAM, а потом взять сгенерированный файл контроллера SDRAM, то в нем можно будет разобраться и засунуть в свой проет? Или наткнусь на какую-нибудь бяку?

То же самое и на сет flash-контроллера.
vetal
Сделайте мастера для шины авалон-мм и подключайте к своему устройству. Лишите жизни сразу двух зайцев: и настройки будут делаться в sopc builder и доп. компоненты можно будет повесить.
RHnd
Цитата(vetal @ Apr 26 2007, 22:59) *
Сделайте мастера для шины авалон-мм и подключайте к своему устройству.

спасибо. Пойду попробую. 6)

Так, отставить, не пойду. А где его создавать, этот мастер? В SOPC он только как элемент cpu есть. Его нужно самому писать? Как? Какие мануалы читать? Или я чего-то недопонял? Совсем запутался. sad.gif
CodeWarrior1241
Цитата(RHnd @ Apr 26 2007, 13:52) *
Я вот думаю, где бы взять готовый контроллер SDRAM?

Если по кокой-то причине не хотите пользоватся SOPC Builder, у Altera есть reference design для моста между параллельным портом процессора и SDRAM тут. По предыдущим постом модератора я тоже взглянул на avalon bus master док, и дествительно все выглядит очен просто в выполнение, и есть бесплатная avalon slave -> SDRAM ядро... Когда я писал ядро для PC100 SDRAM interface в уневере для Xilinx, я долго мучался, а здесь с Altera все так просто, и есть исходник с simulink для моделированя. Действительно, для начинающего Altera кажется проще.
Пушкин
Цитата(RHnd @ Apr 26 2007, 23:14) *
Так, отставить, не пойду. А где его создавать, этот мастер? В SOPC он только как элемент cpu есть. Его нужно самому писать? Как? Какие мануалы читать? Или я чего-то недопонял? Совсем запутался. sad.gif

Читайте это http://altera.com/literature/quartus2/lit-qts-sopc.jsp
И в частности это http://altera.com/literature/manual/mnl_avalon_spec.pdf про мастера для авалон мм
Все что нужно к сопк билдеру прикрутите, и сдрам контроллер готовый
RHnd
Ситуация выглядит так: Со скоростью 5 МГц на 10 пинов поступаю пиксели картинки. Сама картинка около 3 мегапикселей. Эту картинку надо записать в память (SDRAM, как мне кажется, - лучший выбор. Я прав?), после чего ниос эту картинку из памяти читает, особым образом обрабатывает и записывает обратно (либо на то же место, либо рядом). После обработки эту картинку надо скинуть на SD. Для начала хотя бы в bmp виде, jpeg буду потом делать. Соответственно, стоит вопрос - как записать в память и как потом скинуть на карточку. Вопрос с карточкой буду решать позже - ниос это будет делать или внешняя схемка, сейчас думаю над записью в SDRAM. Варианта, как мне видится, два: написать модуль для SOPC, что-то типа фифо, к которому при определенном заполнении подключается DMA и гонит данные в память. Второй вариант - записать в память внешней схемкой, а по окончании записи подать сигнал ниосу и переключить память на него.
Так как я в гораздо большей степени программер, чем разработчик цифровых устройств, то мне все равно куда начинать тыкаться - один фик все придется с нуля изучать. Вот и хотелось бы услышать от более опытных людей - какой вариант предпочтительней?

Цитата(Пушкин @ Apr 27 2007, 00:27) *
Читайте это http://altera.com/literature/quartus2/lit-qts-sopc.jsp
И в частности это http://altera.com/literature/manual/mnl_avalon_spec.pdf про мастера для авалон мм
Все что нужно к сопк билдеру прикрутите, и сдрам контроллер готовый

Спасибо, это все пока в очереди на прочтение. В данный момент осваиваю verilog.
Прежде чем я вчитаюсь в эти мануалы, скажите, пожалуйста, правильно ли я понимаю, что создается какой-то модуль для сопк, который внутри сопк является авалон мастером/слейвом, и при этом наружу имеет какие-то входы-выходы для общения с логикой?
Вы уж извините, если надоел. smile.gif
Пушкин
Ну да, примерно так.
Делайте модуль для сопк и не мучайтесь, так все намного проще чем кажется. На одни контакты адрес, на другие данные, на третьи влючить запись. Описал его в билдере и присобачил к шине, вот и все дела. А все это без сопк билдера сделать...это только для мазахистов или из-за каких то причин.
vetal
RHnd: первый вариант лучше. в этом случае надо будет делать только слейва.
Метод приема данный примерно следущий:
1. Копим данные в фифо.
2. по заполнению фифо вырабатываем прерывание.
3. перекачиваем дынные из фифо в озу(источник прерывания в модуле сбрасывается циклом чтения)
4. п.1
mikki
Может я и не втему , но неплохой контроллера сделал для ксилинкса некто D. Vanden Bout.
Рекомендую глянуть.http://www.xess.com/ho03000.html

А я тут благодаря ответам наших знатоков запустил конторллер на микроблэйзе.
Разместил вектора данных там и вроде фурычит. Спаибо нашим пацанам.
Пушкин
Цитата(vetal @ Apr 27 2007, 10:56) *
RHnd: первый вариант лучше. в этом случае надо будет делать только слейва.
Метод приема данный примерно следущий:
1. Копим данные в фифо.
2. по заполнению фифо вырабатываем прерывание.
3. перекачиваем дынные из фифо в озу(источник прерывания в модуле сбрасывается циклом чтения)
4. п.1

А зачем прерывание?И куда оно идет то?
По-моему надо так...
1. Копим данные в фифо.
2. По достижению некоторого количества байт в фиво, начинаем писать в озу, а фифо параллельно получает еще данные(чтоб записать сразу несколько байт в сдрам, а не по одному, быстрее будет)
3. п.1
RHnd
Цитата(Пушкин @ Apr 27 2007, 21:33) *
А зачем прерывание?И куда оно идет то?
По-моему надо так...
1. Копим данные в фифо.
2. По достижению некоторого количества байт в фиво, начинаем писать в озу, а фифо параллельно получает еще данные(чтоб записать сразу несколько байт в сдрам, а не по одному, быстрее будет)
3. п.1

Я ни в коем случае не отвечаю за Vetal, но мое видение таково: Там же в сопк еще и ниос соберется (он один фик нужен будет для оброаботки изображения), вот в ниос прерывание и поступит, а он по этому прерыванию активизирует dma.
С нетерпением жду ответа Vetal - интересно, правильно ли я идею уловил. smile.gif
vetal
Цитата
А зачем прерывание?И куда оно идет то?

Цитата
Вопрос с карточкой буду решать позже - ниос это будет делать или внешняя схемка, сейчас думаю над записью в SDRAM.

Оно идет на то, что будет эти данные обрабатывать и записывать на SD.
В сопс билдере есть средства, позволяющие решить этот вопрос минимальными усилиями - контроллер ПДП(DMA)

Цитата
С нетерпением жду ответа Vetal - интересно, правильно ли я идею уловил.

Да, правильно. опередили немного)))
Пушкин
У вас же вся картинка в фифо не влезет, а значит вырабатывать прерывание ниосу надо не каждый раз по заполнению фифо, а когда вся картинка будет записано в озу.
RHnd
Цитата(Пушкин @ Apr 28 2007, 10:06) *
У вас же вся картинка в фифо не влезет, а значит вырабатывать прерывание ниосу надо не каждый раз по заполнению фифо, а когда вся картинка будет записано в озу.

Так, теперь я снова запутался. После того, как фифо почти заполнится, но картинка пришла еще далеко не вся, нам нужно срочно информацию из фифо перекинуть в сдрам, а делать это лучше всего дма. Пока вроде все понятно. Далее: когда я читал Nios II Reference Manual и Altera: Embbeded Periphery, у меня сложилось ощущение, что подключить дма и настроить его можно только из ниоса. Соответственно, надо подавать прерывание ниосу, дабы он включал дма. Это так? Или дма можно задействовать каким-то другим способом? Или предлагается переписать фифо -> сдрам другим способом?
vetal
Цитата
У вас же вся картинка в фифо не влезет, а значит вырабатывать прерывание ниосу надо не каждый раз по заполнению фифо, а когда вся картинка будет записано в озу.

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

Цитата
оответственно, надо подавать прерывание ниосу, дабы он включал дма. Это так?

Да,так. Это наиболее простой способ.

RHnd: нарисуйте на бумаге структурную схему. Вам станет намного проще понимать что должна будет делать ваша система.
Пушкин
Цитата(vetal @ Apr 28 2007, 11:15) *
Вся картинка и не должна в фифо влезать - фифо это промежуточный буфер перед озу, размер которого определяется скоростью поступления данных и скоростью записи в память + накладные расходы.

Да это понятно. Я к тому, что прерывание надо вырабатывать после зварешения приема картинки и записи её в озу, а не каждый раз при заполнение буфера, по-моему так лучше.

А автору я еще раз посоветую скачать с альтеры пример и посмотреть как там все устроено-проще будет.
RHnd
Цитата(Пушкин @ Apr 28 2007, 22:54) *
Да это понятно. Я к тому, что прерывание надо вырабатывать после зварешения приема картинки и записи её в озу, а не каждый раз при заполнение буфера, по-моему так лучше.
А автору я еще раз посоветую скачать с альтеры пример и посмотреть как там все устроено-проще будет.

А как переписывать из фифо в память не подавая перывания ниосу? Кто будет дма включать каждый раз?
Пушкин
Почитали бы вы как сдедует соответствующие документы. А то мы тут предлагаем каждый своё, а вы, не понимая как все работает, только путаетесь. Код за вас все-равно никто не напишет smile.gif
RHnd
Цитата(Пушкин @ Apr 30 2007, 13:03) *
Почитали бы вы как сдедует соответствующие документы. А то мы тут предлагаем каждый своё, а вы, не понимая как все работает, только путаетесь. Код за вас все-равно никто не напишет smile.gif

Хорошо, Я через недельку-другую зайду. smile.gif
khach
А кто-нибудь встречал контроллер со встроенной фунуцией чтение-модификация-запись? Например надо быстро к массиву данных добавить константу и записать обратно в память. Вчитывать каждое слово в процессор времени нет. Или матричные операции. Существующие контроллеры как-то тормозно переключают режим чтение-запись.
Alexander_
Цитата(khach @ Apr 30 2007, 14:21) *
А кто-нибудь встречал контроллер со встроенной фунуцией чтение-модификация-запись? Например надо быстро к массиву данных добавить константу и записать обратно в память. Вчитывать каждое слово в процессор времени нет. Или матричные операции. Существующие контроллеры как-то тормозно переключают режим чтение-запись.


Динамическая память быстро работает только в burst-режиме, и приличного быстродействия можно достичь только работая блоками данных в одном адресном пространстве (когда не требуется активировать другую строку памяти). Если работать с одиночными данными, то чтение-модификация-запись будет выполняться долго на уровне внутреннего контроллера SDRAM.
Т.е. для максимального быстродействия операции должны выглядеть так: чтение блока – модификация блока – запись блока.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.