Ясно. Спасибо.
Никто не мерил какую скорость можно выжить при передачи данных от ПЛИС через ARM в Ethernet и насколько сильно этот обмен на полной скорости грузит процессор ?
Не понимаю почему если всё, кроме резета и то опционально, работает синхронно, то почему работает пример поставляемый с платкой... Сдается мне что запись и чтение все же происходит по ARM_WE... Запутался...
если сделать побайтовое заполнение, а не при помощи mempcy, то процент ошибок возрастает до 48%, что-то с таймингами
Вопрос:
а ведь CLC это 50 МГц, по даташиту на BRAM я вижу что во всех примерах-таймингах все операции чтения и записи происходят именно в момент срабатывания тактов... вот я и думаю что такое дикое количество ошибок у меня возникает как раз по этой причине, хотя вижу что пример который идет с платкой как раз тестирует всю BRAMмину и успешно
Я сейчас бьюсь с чтением данных от ПЛИСины, честно тянул до последнего прежде чем написать пост...
Вот что делаю и какие проблемы:
1) прежде всего написал специальный класс (библиотека Qt), который более удобным мне способом реализует функционал той программы что идет с платкой, и без лишних строк
2) написал простой проект для ПЛИСины, который просто передает значения первых 16-ти бит адреса на шину данных - мой класс успешно прочитал это и я увидел счетчик - т.е. нормально, а ранее просто выставил на шину данных константу в ПЛИСине - тоже успешно
3) далее, подцепил пока что однопортовую BRAMину - и вот тут проблема: простой тест, где я записываю случайные данные из программы в ПЛИСовую BRAMину и затем вычитываю и сверяю - так вот на небольших несколько десятков байт - процент ошибок около 5%, а когда блоки еще больше - то процент до 75%
на самом деле происходит запись и чтение из BRAMины
ЗЫ
Потом планирую сделать эту BRAMину двух портовой чтобы записывать в нее свои данные, а уже потом считывать.
Сделаю несколько управляющих/статусных регистров по второму CS1...
Есть такое страшное явление под названием - метастабильность, которое является причиной кошмарных снов начинающих FPGA дизайнеров, с чем Вы и столкнулись ...
В идеале, для синхронизации шин разных клоковых доменов (WE как раз попадает под это определение), нужно использовать двухпортовую память, но это влечет за собой усложнение автомата (да и памяти, как всегда, не хватает).
То как подключена блочная память в демонстрационном проекте к ARM, не совсем правильный вариант подключения, но отсутствия ошибок мне было вполне достаточно, кстати, цена этому - увеличение длительности стробов.
В свое время, приходилось доходить до такого - данные записываются в двойной сдвиговый регистр (по основному клоку с управлением записью по WE) на всю щину, а на вход автоматов идет значение, если оно равно в обоих словах регистров.
кхекхе, начинающий...
Ну так и вижу что-то не так, клок-домены разные и это очевидно, не понятно почему работает.
У меня вопрос, на какой частоте работает SMC (static memory controller если не ошибаюсь)? В руководстве пользователя написано лишь про частоту процессора, а какая именно частота работы шины ARM-FPGA?
"увеличение длительности стробов" - как это сделать, как настроить? Вроде перенес все настройки регистров. Вижу что у меня во время ошибки считываются часто значения которые были предыдущими на шине.
Или решение - повысить тактовую на clka раза в три, до 150 МГц, там вроде BRAMины быстродействующие.
BRAMины они изначально двухпортовые в современных спартанах (если не ошибаюсь), именно в таком режиме я и планирую их использовать.
т.е. речь именно про ARM-FPGA, на 133 МГц меняются там данные на шинах ARM_Data и ARM_Addr?
очень большая скорость... я вот думаю, как же извлечь такты для clka у брамины
посмотрю тайминги в доках на SAM9G45, может эти все сигналы появляются там каждое слово на шине данных и возможно из этого можно будет извлечь такты и подать на clka
ЗЫ
а как залить на этот форум приложение к посту? я хочу приложить свой пример работы ARM-FPGA когда его доделаю
очень жаль что нет вывода MCK из процессора на эту шину EBI1 и чтоб прямо в ПЛИС, кажется это возможно (давно когда-то на ARM7 еще баловался, не сложно было вывести тактовую MCK на ножку)... это крайне усложняет работу как со встроенными BRAM ввиду их чисто синхронной архитектуры, так и для организации своих как-бы регистров внутри - тоже собственно отсутствие внятных тактов усложняет жизнь, мозг взрывается
P.S.
отлаживал с помощью ChipScope Pro, почему-то вижу будто импульсы MCK какие-то неравномерные, это сложно объяснить стробоскопическим эффектом, ибо я сэмплировал на частоте 200 МГц, а еще увидел что посылки как бы кучкуются по 16 слов (будь то 8 или 16-ти битный режим)
в общем, удалось добиться работы с такими настройками, причем NCS раньше был одновременно c NWR или NRD, но путем изучения документации не сложно было найти как сделать так же как в их красивых таймингах в доках на SAM9G45
всего 6 тактов MCK на весь цикл, получилось 140 мегабит/с туда-сюда