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

 
 
> Cyclone3, DDR2 и АЦП, Проблема
djhall
сообщение Aug 2 2013, 09:03
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Здравствуйте,
возникла у меня довольно странная проблема.
Есть плата собственного производства, на ней установлены Cyclone3, память DDR2 и АЦП. Задача - по нажатию кнопки в программе на компьютере сохранить данные от АЦП в памяти и затем передать их в компьютер. Это реализовано с использованием прямого доступа к памяти и FIFO. Работает хорошо, но сделано это было в Quartus 9.0 и Nios IDE, т.е. без eclipse.
Сейчас использую Quartus 12.1sp1. Открываю старый проект перегенерю систему в SOPC Builder, компелирую в Quartus, компелирую программу в Eclipse, прошиваю - не работает. А точнее всё запускается, програма переходит в нужную подпрограмму и зависает в ожидании окончания DMA.
Причём проделал такой эксперимент взял старый старые и новые .sof и .elf и попытался перекомбинировать старое с новым, чтобы понять где ошибка (т.к. базовые адреса в SOPC не менялись я подумал, что так можно делать). Результат - хорошо работает только старые .sof и .elf любые другие комбинации работаю плохо и либо зависают при первом же нажатии на кнопку получения данных или через короткое время.

В чём может быть проблемма? Может какие нибудь особенности нового Quartus или Eclipse и они как-то по другому компилируют?

P.S. Т.е. получается, что на старой прошивке ПЛИС новая программа работает плохо. Т.е. дело в компиляторе программы. Хотя это тоже очень странно ведь программа только инициализирует DMA и запускает приём данных, а далее данные записываются в память минуя процессор. Так почему же он зависает ведь прошивка старая - работающая?

Сообщение отредактировал djhall - Aug 2 2013, 10:03
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
djhall
сообщение Aug 9 2013, 05:30
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата
Этот DMA компонент так и работает - читает во внутренний буфер 1 такт, потом записывает -2 такт.

Давным давно отлаживал систему с DMA и лично видел, что запись была по каждому фронту. Правда это было очень давно.
В DMA есть FIFO поэтому она должна (а точнее я хочу, чтобы DMA так делала) читать несколько циклов и потом записывать несколько циклов. Конечно если чтение и запись идут в одну и туже память то без разделения по времени ни чего не получится, а вот если чтение идёт из переферийного устройства, а запись в память, то казалось бы нет необходимости разделения по времени и запись может идти по каждому такту. Надо поэкспериментировать, но у меня остаётся надежда заставить DMA работать по каждому такту.

Цитата
У DMA read и write на разных шинах?

Не совсем понял вопрос. DMA read и DMA write это отдельные мастеры и соответственно разные шины. Они оба подключены к контроллеру DDR памяти и некоторым другим компонентам в системе, а к моему компоненту получения данных от АЦП подключен только DMA read.

Цитата
1.SG-DMA

Всегда недолюбливал SG DMA. Надо наверное с ним хорошенько разобраться.
SG DMA содержит четыре мастера, т.е. два дополнительных мастера для дискрипторов. Если всё это подключить к контроллеру DDR памяти то минимум к нему будет подключено шесть мастеров и плюс мои собственные. Мне почему-то кажется что это очень плохо для производительности и для разводки по кристалу. Видимо шины для дискрипторов лучше подключать к внутренней памяти ПЛИС.
Но как же мне передать большой объём данных ведь в дискрипторе поле для длинны передачи всего 16 бит, т.е. 65536 байт? Увеличивать количество дескрипторов? Так до какой степени, в ПЛИС же память не слишком большая?

Цитата
2. перенос DMA и FIFO в клоковый домен памяти.

Уже сделано.
Go to the top of the page
 
+Quote Post
Konst_777
сообщение Aug 9 2013, 18:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 1-06-05
Пользователь №: 5 644



Цитата(djhall @ Aug 9 2013, 08:30) *
... Видимо шины для дискрипторов лучше подключать к внутренней памяти ПЛИС...

Лучше разработать IP контроллера дескрипторов для SG-DMA и подключить шины для дескрипторов к нему. Nios II процессор будет однократно программировать контроллер дескрипторов и далее SG-DMA будет выполнять самостоятельно все пересылки данных. К контроллеру дескрипторов можно подключить внешние сигналы, управляющие очередностью (приоритетом) пересылок данных...

Подумайте в этом направлении wink.gif Ощутите, какие открываются перспективы cool.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:19
Рейтинг@Mail.ru


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