Перейти к содержанию
    

Увеличение адрессного пространства в Zynq

Дооброго времени суток.

Читал я тут соседние темы на форуме и вспомнилась старая задача для проекта на Zynq. А именно как можно увеличить адресное пространство (в Address Editor BD) с одного гигабайта до хотя бы двух. В спецификации указано что из 32х бит адресного пространства 3 Гб зарезервировано под внутренние нужды ARM и только 1 Гб доступен для адрессации "периферии" в PL.

Один из вариантов - это сделать переключатель по какому-то адресу и свитчить выходные адреса старшим/младшим виртуальным битом. В таком случае проблема вылазит в конфигурации карты и сложность в обратоном чтении от устройств (их около 2х десятков).

Второй вариант - подключить несколько устройств на одинаковые адреса, но управлять сигналом разрешения работы (нет необходимости работать паралельно). Проблема конфигурации карты остаётся ну и частичнаф сложность в реализации.

Собственно какой вариант лучше/использовался юзерами. Или же есть ещё какой-то способ проще/лучше

p.s. Раздумия над AXI передачей наводят на мысль, что собственно адреса "раздаёт" AXI Interconnect, при том, что вся остальная перифферия особо то ничего и не знает что и где лежит (отсюда и требование подключения одной связки master-slave). Насколько данная мысль правильная? Может есть какой-то способ "обмануть" или конверизировать адреса в Interconnect'е, тогда задача решится сама собой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что за такие "2 десятка устройств" что им не хватает 1 Гбайта для адресации регистров?

Какой смысл делать такие большие регистровые пулы на медленной шине? Временные затраты на передачу таких объемов по AXI lite несовместимы со здравым смыслом.

Если нужно скидывать с устройств большие объемы данных процессору (или заливать в них из ддр-а проца), то в них нужно делать мастера AXI и лить на AXI слэйвы в/из ддр проца - их там 4 штуки шириной 64 бита каждый и с тактами до 250 МГц.

Изменено пользователем fguy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 и их всех мы задействовали

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 для переноса данных с ваших слэйвов в слэйвы хп на проце. Таким образом вы впишитесь и в регистровый пул и получите большую скорость по переносу данных в ддр проца.

Изменено пользователем fguy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил. Ну или плохо искал :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 minutes ago, Nick_K said:

А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил.

 

AXI.jpg

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, Nick_K said:

А есть это гда-то одним куском в даташите, а то я вроде бы просматривал, но ничего такого не находил. Ну или плохо искал

В trm ug585 hp описаны там же где и gp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@blackfin Ясно, получается они чистые слейвы. Немножко не то что я хотел, но это не тупик абсолютно

4 minutes ago, fguy said:

В trm ug585 hp описаны там же где и gp 

Ага, спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А разве в акси нет режима работы шины в бурсте с константным адресом? Типа FIFO Вся память видится через один адрес, начальный адрес памяти задать через регистры. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 minutes ago, des00 said:

А разве в акси нет режима работы шины в бурсте с константным адресом? Типа FIFO Вся память видится через один адрес, начальный адрес памяти задать через регистры. 

Бурст есть, но адресация "внутри" шини всё равно просизводится побайтово. То есть один Slave имеет адресс, указанный в старших битах, а вся его память "размазана" по младшим битам адресса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, Nick_K said:

То есть один Slave имеет адресс, указанный в старших битах, а вся его память "размазана" по младшим битам адресса.

А вам нужен именно рандомный доступ "по младшим битам адреса" каждого слейва?

Или нужно просто закачать в слейв большой массив данных по последовательным адресам?

Если второе, то счетчик адресов можно сделать в самом слейве, а в PS использовать FIXED bursts.

Ну и здравый смысл подсказывает, что не царское это дело процессором записывать массивы такого размера.

Для этого существует DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, blackfin said:

А вам нужен именно рандомный доступ "по младшим битам адреса" каждого слейва?

Или нужно просто закачать в слейв большой массив данных по последовательным адресам?

Если второе, то счетчик адресов можно сделать в самом слейве, а в PS использовать FIXED bursts.

Ну и здравый смысл подсказывает, что не царское это дело процессором записывать массивы такого размера.

Для этого существует DMA.

Рандомный доступ не нужен, но размер выкачиваемых данных может отличаться (теоретически от одного значения, до 2^n, но может и вправду можно будет увеличить минимальное слово) в зависимости от режима работы.

По поводу "не царского дела" тут увы никак. Возможно придётся делать какие-то вычисления на лету или выборку (основная задача проекта), так что только через процессор. Но если вдруг появятся задачи связанные с простого перемещения, тогда будем подымать DMA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

55 minutes ago, des00 said:

А разве в акси нет режима работы шины в бурсте с константным адресом?

Режим то такой на шине  есть но если TC  использует из M_AXI_GP* из CPU (программно читая/записывая) то он не может управлять режимом burst (если я не ошибаюсь в этом случае всегда increment burst).  Да и медленно все же будет программный доступ к такому объему  данных. Такое смысл делать если можно не спеша в фоне пережевывать данные из внешних источников без необходимости копировать в системную память. А если так то страничный/FIFO доступ в периферии погоды уже не испортит. 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 minutes ago, RobFPGA said:

А если так то страничный/FIFO доступ в периферии погоды уже не испортит.

Ессно, не испортит.. :)

Внутри PL памяти такого размера (20*128 МБ) нету просто физически. Значит, все 20 слейвов должны стоять снаружи Zynq'а.

Но вывести наружу 20 отдельных 27-ми битных шины адреса и 20 отдельных 32-х битных шины данных не даст корпус Zynq'а.

Потому как для этого нужно 20*(27+32) = 1180 проводов..

Значит, снаружи все слейвы придется сажать на общую шину, а значит мультиплексирование и постраничный доступ из PS неизбежны.. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...