Nick_K 0 17 февраля, 2020 Опубликовано 17 февраля, 2020 · Жалоба Дооброго времени суток. Читал я тут соседние темы на форуме и вспомнилась старая задача для проекта на Zynq. А именно как можно увеличить адресное пространство (в Address Editor BD) с одного гигабайта до хотя бы двух. В спецификации указано что из 32х бит адресного пространства 3 Гб зарезервировано под внутренние нужды ARM и только 1 Гб доступен для адрессации "периферии" в PL. Один из вариантов - это сделать переключатель по какому-то адресу и свитчить выходные адреса старшим/младшим виртуальным битом. В таком случае проблема вылазит в конфигурации карты и сложность в обратоном чтении от устройств (их около 2х десятков). Второй вариант - подключить несколько устройств на одинаковые адреса, но управлять сигналом разрешения работы (нет необходимости работать паралельно). Проблема конфигурации карты остаётся ну и частичнаф сложность в реализации. Собственно какой вариант лучше/использовался юзерами. Или же есть ещё какой-то способ проще/лучше p.s. Раздумия над AXI передачей наводят на мысль, что собственно адреса "раздаёт" AXI Interconnect, при том, что вся остальная перифферия особо то ничего и не знает что и где лежит (отсюда и требование подключения одной связки master-slave). Насколько данная мысль правильная? Может есть какой-то способ "обмануть" или конверизировать адреса в Interconnect'е, тогда задача решится сама собой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 19 февраля, 2020 Опубликовано 19 февраля, 2020 (изменено) · Жалоба Что за такие "2 десятка устройств" что им не хватает 1 Гбайта для адресации регистров? Какой смысл делать такие большие регистровые пулы на медленной шине? Временные затраты на передачу таких объемов по AXI lite несовместимы со здравым смыслом. Если нужно скидывать с устройств большие объемы данных процессору (или заливать в них из ддр-а проца), то в них нужно делать мастера AXI и лить на AXI слэйвы в/из ддр проца - их там 4 штуки шириной 64 бита каждый и с тактами до 250 МГц. Изменено 19 февраля, 2020 пользователем fguy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 7 minutes ago, fguy said: Что за такие "2 десятка устройств" что им не хватает 1 Гбайта для адресации регистров? Каждое устройство имеет, к примеру, регистр команд и память данных. Последняя может достигать 128-256 MB (128*20 = 2,5 GB). Соответственно все данные не получится вычитать при условии, что адресовать можно до 1 ГБ данных. 11 minutes ago, fguy said: Какой смысл делать такие большие регистровые пулы на медленной шине? Временные затраты на забор таких объемов по AXI lite несовместимы со здравым смыслом. А где написано, что AXI Lite? Я пользуюсь полным AXI за исключением устройств с минимальными объёмами памяти. 12 minutes ago, fguy said: Если нужно скидывать с устройств большие объемы данных процессору, то в них нужно делать мастера AXI и лить на AXI слэйвы в проц - их там 4 штуки шириной 64 бита каждый и с тактами до 250 МГц. 4 штуки это в каком чипе? Zynq'и до 20-го семейства содержат только 2 порта AXI и их всех мы задействовали Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба Приветствую! On 2/17/2020 at 2:13 PM, Nick_K said: В спецификации указано что из 32х бит адресного пространства 3 Гб зарезервировано под внутренние нужды ARM и только 1 Гб доступен для адрессации "периферии" в PL. Если мы говорим о Zynq 7000 то вроде для M_AXI_GP0 / M_AXI_GP1 выделено 2 диапазона по 1GB для каждого. То есть вот вам уже 2 GB. Хотите объединяйте их в PL через interconnect - хотите раздельно распределяйте по устройствам. Суетится для еще одного гига IMHO как бы смысла нет - лучше пересмотреть структуру системы и слать данные из/в PL через S_AXI_HP* с помощь. DMA. Ну а если хочется все делать через M_AXI_GP* то тут только вводить страничную организацию непосредственно в вашей периферии. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 19 февраля, 2020 Опубликовано 19 февраля, 2020 (изменено) · Жалоба 1 hour ago, Nick_K said: А где написано, что AXI Lite? Я пользуюсь полным AXI за исключением устройств с минимальными объёмами памяти. GP Master только 32 бита на Zenq. Их обычно используют для управления периферией - записать/прочитать несколько регистров. 1 hour ago, Nick_K said: 4 штуки это в каком чипе? Zynq'и до 20-го семейства содержат только 2 порта AXI и их всех мы задействовали HP Slave 32/64 бита 4 штуки на любом Zynq в т.ч. и обрубках S. Вы задействовали мастера - задействовать хп слэйвы нужно постараться несколько больше. Пропускная способность будет в 4 раза выше без внесения проблем управлением другой периферией на шине GP. Организуйте вашу память данных в каждом устройстве как отдельную шину слэйв AXI и поставьте ядро DMA для переноса данных с ваших слэйвов в слэйвы хп на проце. Таким образом вы впишитесь и в регистровый пул и получите большую скорость по переносу данных в ддр проца. Изменено 19 февраля, 2020 пользователем fguy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 27 minutes ago, RobFPGA said: Если мы говорим о Zynq 7000 то вроде для M_AXI_GP0 / M_AXI_GP1 выделено 2 диапазона по 1GB для каждого. То есть вот вам уже 2 GB. Да извиняюсь, действительно только 2 ГБ зарезервировано для внитренних нужд проца и 1 ГБ мы использовали под внутренние команды. Так что 1 ГБ остаётся как и было заявлено изначально, просто оговорочка вышла. 10 minutes ago, fguy said: HP Slave 32/64 бита 4 штуки на любом Zynq в т.ч. и обрубках S. Вы задействовали мастера - задействовать хп слэйвы нужно постараться несколько больше. Пропускная способность будет в 4 раза выше без внесения проблем управлением другой периферией на шине GP. А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил. Ну или плохо искал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 8 minutes ago, Nick_K said: А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил. UG585, стр. 40: Quote • AXI_HP, four high performance/bandwidth master ports on the PS AXI interconnect ° 32-bit or 64-bit data master interfaces (independently programmed) • AXI_GP, four general purpose ports ° Two, 32-bit master interfaces ° Two, 32-bit slave interfaces Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 5 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 7 minutes ago, Nick_K said: А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил. Ну или плохо искал В trm ug585 hp описаны там же где и gp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба @blackfin Ясно, получается они чистые слейвы. Немножко не то что я хотел, но это не тупик абсолютно 4 minutes ago, fguy said: В trm ug585 hp описаны там же где и gp Ага, спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба А разве в акси нет режима работы шины в бурсте с константным адресом? Типа FIFO Вся память видится через один адрес, начальный адрес памяти задать через регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 9 minutes ago, des00 said: А разве в акси нет режима работы шины в бурсте с константным адресом? Типа FIFO Вся память видится через один адрес, начальный адрес памяти задать через регистры. Бурст есть, но адресация "внутри" шини всё равно просизводится побайтово. То есть один Slave имеет адресс, указанный в старших битах, а вся его память "размазана" по младшим битам адресса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 15 minutes ago, Nick_K said: То есть один Slave имеет адресс, указанный в старших битах, а вся его память "размазана" по младшим битам адресса. А вам нужен именно рандомный доступ "по младшим битам адреса" каждого слейва? Или нужно просто закачать в слейв большой массив данных по последовательным адресам? Если второе, то счетчик адресов можно сделать в самом слейве, а в PS использовать FIXED bursts. Ну и здравый смысл подсказывает, что не царское это дело процессором записывать массивы такого размера. Для этого существует DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 14 minutes ago, blackfin said: А вам нужен именно рандомный доступ "по младшим битам адреса" каждого слейва? Или нужно просто закачать в слейв большой массив данных по последовательным адресам? Если второе, то счетчик адресов можно сделать в самом слейве, а в PS использовать FIXED bursts. Ну и здравый смысл подсказывает, что не царское это дело процессором записывать массивы такого размера. Для этого существует DMA. Рандомный доступ не нужен, но размер выкачиваемых данных может отличаться (теоретически от одного значения, до 2^n, но может и вправду можно будет увеличить минимальное слово) в зависимости от режима работы. По поводу "не царского дела" тут увы никак. Возможно придётся делать какие-то вычисления на лету или выборку (основная задача проекта), так что только через процессор. Но если вдруг появятся задачи связанные с простого перемещения, тогда будем подымать DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 30 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба Приветствую! 55 minutes ago, des00 said: А разве в акси нет режима работы шины в бурсте с константным адресом? Режим то такой на шине есть но если TC использует из M_AXI_GP* из CPU (программно читая/записывая) то он не может управлять режимом burst (если я не ошибаюсь в этом случае всегда increment burst). Да и медленно все же будет программный доступ к такому объему данных. Такое смысл делать если можно не спеша в фоне пережевывать данные из внешних источников без необходимости копировать в системную память. А если так то страничный/FIFO доступ в периферии погоды уже не испортит. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 19 февраля, 2020 Опубликовано 19 февраля, 2020 · Жалоба 17 minutes ago, RobFPGA said: А если так то страничный/FIFO доступ в периферии погоды уже не испортит. Ессно, не испортит.. :) Внутри PL памяти такого размера (20*128 МБ) нету просто физически. Значит, все 20 слейвов должны стоять снаружи Zynq'а. Но вывести наружу 20 отдельных 27-ми битных шины адреса и 20 отдельных 32-х битных шины данных не даст корпус Zynq'а. Потому как для этого нужно 20*(27+32) = 1180 проводов.. Значит, снаружи все слейвы придется сажать на общую шину, а значит мультиплексирование и постраничный доступ из PS неизбежны.. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться