Jump to content

    

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Edited by fguy

Share this post


Link to post
Share on other sites
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 и их всех мы задействовали

Share this post


Link to post
Share on other sites

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

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.

Share this post


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

Edited by fguy

Share this post


Link to post
Share on other sites
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:

Share this post


Link to post
Share on other sites
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

 

Share this post


Link to post
Share on other sites
7 minutes ago, Nick_K said:

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

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

Share this post


Link to post
Share on other sites

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

4 minutes ago, fguy said:

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

Ага, спасибо

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
9 minutes ago, des00 said:

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

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

Share this post


Link to post
Share on other sites
15 minutes ago, Nick_K said:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
14 minutes ago, blackfin said:

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

55 minutes ago, des00 said:

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

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

Удачи! Rob.

Share this post


Link to post
Share on other sites
17 minutes ago, RobFPGA said:

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now