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

 
 
8 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> NIOS II, программирование ниос2 на СИ
doom13
сообщение Jan 28 2015, 08:33
Сообщение #61


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 28 2015, 11:31) *
Чтение производится готовым блоком, что именно там я не знаю, но оно читает со скоростью 2 Мбайта/с и нужно выводить последние 1.2 МБайта данных

Т.е. это кусок этой же ПЛИС, который имеет доступ к этой же памяти (DDR2).
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 08:35
Сообщение #62


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 28 2015, 11:33) *
Т.е. это кусок этой же ПЛИС, который имеет доступ к этой же памяти (DDR2).


нет, там уже вроде другая плиска или МП
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 28 2015, 08:58
Сообщение #63


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 28 2015, 11:35) *
нет, там уже вроде другая плиска или МП

Что-то мне кажется, что сначала Вам нужно разобраться с чтение/записью DDR2, а там можно будет дальше строить систему.
Пока вижу, данные пишутся в DDR с частотой 15 МГц при 32-х разрядной шине DDR2-контроллера (8bit*60MHz = 32bit*15MHz), а читаются из DDR2 с частотой 0.5 MHz (8bit*2MHz = 32bit*0.5MHz). Думаю, DDR2-контроллер потянет. У Вас критична только скорость записи (данные не хотите терять), вот и делайте её приоритетной, а читать будете в свободные от записи моменты (контроллер DDR2 тут сам всё разрулит). Ваш DDR2 контроллер при поступлении новых данных пишет их в память (на максимальной для него скорости), по запросу вычитываете данные. Прочитанные данные, чтобы согласовать скорость с внешним интерфейсом (2 МБ/с) складываете в фифо, а он пусть из него и читает.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 28 2015, 08:59
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



БЛИН!

Ну пипец эта ваша альтера - это так чтобы doom13'а позлитьsm.gif..

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

Берете контроллер памяти DDR присоединяете его к DDR. А выход этого контроллера присоединяете к блоку который делает вот что.
0 такт он читает или пишет из первого адреса
1 такт он читает или пишет из второго адреса
и так по кругу. Получаете обычную 2 портовую память с равномерным распределением шины. Да вы теряете 50% пропускной способности памяти, но если память изначально может пропустить через себя в несколько раз больше чем вы в нее пихаете - то проблем нет.

Именно так вашу систему и надо реализовать, поделите память между 2 потоками одни который в нее пишет, другой который из нее читает.
Дальше идет оптимизация, можно писать - читать не по 1 слову, а по нескольку потому что память пишет быстрее чем выходит на режим, допустим делаете запись от 1 до 4 слов, на входе обоих каналов ставите FIFO в N слов, и ничего гарантированно не потеряется. Когда будет такт доступа очередного канала, он из фифо сольет от 1 до 4 слов, в зависимости от того сколько туда напихают.

Можно раздать приоритеты, то есть 1 канал сливает всегда все фифо, сколько бы там ни было слов, а 2 канал сливает не больше К слов, а фифо на 1 канале сровняет паузы.


Если же скорость записи ДДР меньше скорости поступления + чтения данных, то хоть убейтесь ничего не выйдет, даже на ксалинксе, не то что на альтере - ну это тоже чтобы дума позлитьsm.gif
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 09:03
Сообщение #65


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 28 2015, 11:58) *
Что-то мне кажется, что сначала Вам нужно разобраться с чтение/записью DDR2, а там можно будет дальше строить систему.
Пока вижу, данные пишутся в DDR с частотой 15 МГц при 32-х разрядной шине DDR2-контроллера (8bit*60MHz = 32bit*15MHz), а читаются из DDR2 с частотой 0.5 MHz (8bit*2MHz = 32bit*0.5MHz). Думаю, DDR2-контроллер потянет. У Вас критична только скорость записи (данные не хотите терять), вот и делайте её приоритетной, а читать будете в свободные от записи моменты (контроллер DDR2 тут сам всё разрулит). Ваш DDR2 контроллер при поступлении новых данных пишет их в память (на максимальной для него скорости), по запросу вычитываете данные. Прочитанные данные, чтобы согласовать скорость с внешним интерфейсом (2 МБ/с) складываете в фифо, а он пусть из него и читает.


на картинке параметры DDR2.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 28 2015, 09:11
Сообщение #66


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Golikov A. @ Jan 28 2015, 11:59) *
БЛИН!
Ну пипец эта ваша альтера - это так чтобы doom13'а позлитьsm.gif..

Целых два дня и две ночи Вы не спали - думали, что ответить.
Хотелось бы узнать, как там обстоят дела у Xilinx с DDR на логике и железе? Может быть за столь долгий час Вы произвели сравнительный анализ девайсов от обсуждаемых производителей? biggrin.gif
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 09:13
Сообщение #67


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 28 2015, 11:58) *


Уточнил кое какую деталь: пользователь нажимает 1 кнопку, тем самым просит зафиксировать 1.2 МБайта данных в DDR2. Нажимает 2 кнопку, просит эти данные считать. Следовательно DDR2 надо разделить на 2 области, т.е. циклически пишем в первую половину, как сработала кнопка 1, сохраняем все данные и пишем во 2 половину памяти DDR2.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 28 2015, 10:32
Сообщение #68


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Golikov A. @ Jan 28 2015, 11:59) *
Берете контроллер памяти DDR присоединяете его к DDR. А выход этого контроллера присоединяете к блоку который делает вот что.

В Qsys-систему его добавляете и на Avalon-MM вешаете, даёте доступ к контроллеру памяти Nios II, DMA-контроллерам (при необходимости). Пробуете писать/читать данные либо Ниосом либо DMA, должно всё получиться.

Цитата(x66 @ Jan 28 2015, 12:13) *
Уточнил кое какую деталь: пользователь нажимает 1 кнопку, тем самым просит зафиксировать 1.2 МБайта данных в DDR2. Нажимает 2 кнопку, просит эти данные считать. Следовательно DDR2 надо разделить на 2 области, т.е. циклически пишем в первую половину, как сработала кнопка 1, сохраняем все данные и пишем во 2 половину памяти DDR2.

Пробуйте DDR2-контроллер запустить и на максимальной скорости.

Цитата(Golikov A. @ Jan 28 2015, 11:59) *
Если же скорость записи ДДР меньше скорости поступления + чтения данных, то хоть убейтесь ничего не выйдет, даже на ксалинксе

и даже с хардовым контроллером
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 28 2015, 10:35
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Целых два дня и две ночи Вы не спали - думали, что ответить.
Хотелось бы узнать, как там обстоят дела у Xilinx с DDR на логике и железе? Может быть за столь долгий час Вы произвели сравнительный анализ девайсов от обсуждаемых производителей? biggrin.gif


не, я работал. У меня сейчас тематика без ПЛИС. Но вижу тема вас задеваетwink.gif

Про контроллеры памяти на ПЛИС вентилях я уже сказал выше, видать надо разжевать. Спартан 6, -2 грейда скорости боле менее сложный блок тянет на частоте около 100 МГц, хорошая ли это частота для DDR3 памяти? По мне так не особо, C железным блоком спартан 6 тянет DDR до 400 МГц это и ответ... Все вопрос частоты.



Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 10:37
Сообщение #70


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 28 2015, 13:17) *
В Qsys-систему его добавляете и на Avalon-MM вешаете, даёте доступ к контроллеру памяти Nios II, DMA-контроллерам (при необходимости). Пробуете писать/читать данные либо Ниосом либо DMA, должно всё получиться.


Пробуйте DDR2-контроллер запустить и на максимальной скорости.


А что если взять два on-chip memory. Сначала закидываем от АЦП в один on-chip memory, а потом скидываем в DDR2, при этом записывая во второй on-chip memory, и так меняя их
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 28 2015, 10:45
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Уточнил кое какую деталь: пользователь нажимает 1 кнопку, тем самым просит зафиксировать 1.2 МБайта данных в DDR2. Нажимает 2 кнопку, просит эти данные считать. Следовательно DDR2 надо разделить на 2 области, т.е. циклически пишем в первую половину, как сработала кнопка 1, сохраняем все данные и пишем во 2 половину памяти DDR2.


У вас процессор еще хоть что-то делает или только данные из памяти в память перекидывает? Просто если так, то все эти коллизии можно решить программно в проце. Вам надо FIFO для входных данных, и пусть процессор его постоянно мониторит, если есть данные складывает их в циклический буфер в DDR. При это просто размещаете буффер в ДДР области памяти и даже не думаете как оно там происходит.

По запросу пользователя, переключаете буфер, и начинаете маленькими порциями выдавать данные пользователю из 1 буфера. Так чтобы на выдачу данных тратилось времени не больше чем на заполнения половины буфера входными данными.

Таким образом арбитраж у вас сделает процессор, данные не потеряются из - за фифо, доступ к памяти организует контроллер. Мне кажется вы усложняете задачу



ФИФО как раз строиться на блочной памяти, только с ним работать удобнее, не надо писать алгоритм циклического буфера, Просто пишите с одного конца и читаете с другого, а порядок следования данных реализуется сам собой

кстати никто не мешает каскадировать ФИФО, выход одного подавать на вход другого, и тема самым увеличивать длину, правда там надо маленький автоматик сделать который данные будет прокидывать и учитывать задержку появления данных на число блоков фифо.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 28 2015, 10:47
Сообщение #72


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Golikov A. @ Jan 28 2015, 13:35) *
Про контроллеры памяти на ПЛИС вентилях я уже сказал выше, видать надо разжевать. Спартан 6, -2 грейда скорости боле менее сложный блок тянет на частоте около 100 МГц, хорошая ли это частота для DDR3 памяти? По мне так не особо, C железным блоком спартан 6 тянет DDR до 400 МГц это и ответ... Все вопрос частоты.

Я приводил характеристики DDR3-контроллера для Altera Cyclone 5, там чётко видна разница между железным блоком и блоком на логике (400 МГц и 300 МГц соответственно, думаю, это не смертельно, во многих задачах оно себя оправдает). О каких 60 МГц говорили Вы - Вам виднее.
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 10:53
Сообщение #73


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(Golikov A. @ Jan 28 2015, 13:45) *
У вас процессор еще хоть что-то делает или только данные из памяти в память перекидывает? Просто если так, то все эти коллизии можно решить программно в проце. Вам надо FIFO для входных данных, и пусть процессор его постоянно мониторит, если есть данные складывает их в циклический буфер в DDR. При это просто размещаете буффер в ДДР области памяти и даже не думаете как оно там происходит.

По запросу пользователя, переключаете буфер, и начинаете маленькими порциями выдавать данные пользователю из 1 буфера. Так чтобы на выдачу данных тратилось времени не больше чем на заполнения половины буфера входными данными.

Таким образом арбитраж у вас сделает процессор, данные не потеряются из - за фифо, доступ к памяти организует контроллер. Мне кажется вы усложняете задачу



ФИФО как раз строиться на блочной памяти, только с ним работать удобнее, не надо писать алгоритм циклического буфера, Просто пишите с одного конца и читаете с другого, а порядок следования данных реализуется сам собой

кстати никто не мешает каскадировать ФИФО, выход одного подавать на вход другого, и тема самым увеличивать длину, правда там надо маленький автоматик сделать который данные будет прокидывать и учитывать задержку появления данных на число блоков фифо.


Я программно начал делать так: задал min и max адреса в DDR, для каждой половины. Проверяю условия от пользователя провожу запись в блоки. Когда приходит сигнал от пользователя фиксирую конечный адрес и вычитаю до адреса начала этих 1.2МБ, при этом переключаюсь на вторую половину DDR. А вот при чтении из DDR я планировал данные от АЦП передавать на on-chip memory, и выводить данные пользователю (пока ориентировался примерно на 4кбайт), затем скидывать с on-chip memory в DDR то что накопилось.
Go to the top of the page
 
+Quote Post
doom13
сообщение Jan 28 2015, 10:54
Сообщение #74


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(x66 @ Jan 28 2015, 13:37) *
А что если взять два on-chip memory. Сначала закидываем от АЦП в один on-chip memory, а потом скидываем в DDR2, при этом записывая во второй on-chip memory, и так меняя их

Вы можете так сделать, использовать RAM либо FIFO (это на ваш выбор), данные в DDR2 перекладывать/считывать Ниосом, но лучше разобраться с DMA (SgDMA/mSgDMA).

UP
Ниос работает на 100MHz?
Go to the top of the page
 
+Quote Post
x66
сообщение Jan 28 2015, 11:05
Сообщение #75


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 7-05-10
Пользователь №: 57 122



Цитата(doom13 @ Jan 28 2015, 13:54) *
Вы можете так сделать, использовать RAM либо FIFO (это на ваш выбор), данные в DDR2 перекладывать/считывать Ниосом, но лучше разобраться с DMA (SgDMA/mSgDMA).


Можете посоветовать литературу по DMA, где толково расписано.

Цитата(doom13 @ Jan 28 2015, 13:54) *
Вы можете так сделать, использовать RAM либо FIFO (это на ваш выбор), данные в DDR2 перекладывать/считывать Ниосом, но лучше разобраться с DMA (SgDMA/mSgDMA).

UP
Ниос работает на 100MHz?


Да, на 100
Go to the top of the page
 
+Quote Post

8 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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