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

день добрый. на время карантина встала задача пересмотреть нашу внутреннюю чебурашку, обозванную системной шиной АКСИ4 лайт, и привести ее в соответствие протоколу. Под наши задачи протокол должен быть АКСИ4. пробежался по спецификации и возникли вопросы...

 

1. такая штука как AWREGION/ARREGION. со своим английским плохо понял этот пункт. если на одной физической шине организована несколько логических с перекрывающимися адресными пространствами, то получается что это поле жестко заданный идентификатор логического интерфейса. который проставляется каждому мастеру на стадии проектирования системы. таким образом мастера с одним мдентификатором образуют один "мемори мап". слэйвы же в этих нескольких мапах могут пересекаться, и задача интерконнекта во-первых состыковать выставляемые мастерами адреса с реальными адресами конкретного слэйва, во-вторых коммутировать ответы слэйва в нужную зону к своему мастеру.

правильно я понимаю суть?

а, и почему именно 4КБ? "The 4-bits of region identifier allows up to sixteen different regions to be uniquely identified. The region identifier provides a decode of higher order address bits. The region identifier must remain constant within a 4kbyte address space"


2. как организуется буферизация с "Bufferable (B) bit, ARCACHE[0] and AWCACHE[0]"? это единый стек по каналу, в который сваливаются запросы от всех мастеров вперемешку? или  буферы для каждого слэйва в отдельности, в которые интерконнект рассовывает уже отсортированные запросы?


3. кэширование нам не нужно, но для общего развития... что означает возможность объединять транзакции записи при кэшиировани? правильно я понимаю что при обращении на запись по определенному адресу интерконнект может пробежаться по кэшу, и если в нем присутствует запись по этому адресу - заменить данные в более раннем запросе на данные из более позднего, и более поздний запрос вообще "удалить" не "обрабатывая" (добавляя в очередь)?


4. как организуется стыковка конвееров по адресам-данным?
• the slave can wait for AWVALID or WVALID, or both, before asserting AWREADY
• the slave can wait for AWVALID or WVALID, or both, before asserting WREADY

получается что и адрес может быть принят раньше данных и данные могут быть приняты раньше адреса.  если слэйв поддерживает этот механизм, то получается что у слэйва должен быть буфер, в который запихивается опережающий канал. какой глубины буфер? под максимально допустимый размер пакета в 1024 бита? плюс логика на выбор источника записи - буфер или напрямую шина. а если учесть что это должен уметь каждый слэйв - не слишком ли это ресурсоемко получается?

 

5. как вообще грамотно организовать интерконнект, чтобы не просадить производительность? это получается один огромный коммутатор... арбитр мастеров на входе, для каждого слэйва в зависимости от битов AWCACHE коммутация буфер/шина, плюс всякие эксклюзивные и приоритетные доступы... попытался посмотреть как делают интерконнект другие. с нулевым результатом - нашел только одну раскодированную корку в которой нифига не понял :).

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


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

1. Это не "расширение адреса", перекрываться адресные пространства не должны. Они нужны для упрощения слейвов. Есть, например, модуль доступа к флешке, в настройках интерконнекта можно выставить адреса 0x0000 - 0x1000 как доступные для записи/чтения, 0x1000 - 0x2000 только для чтения, 0x2000 - 0x7000 запись/чтение, слейву уже в расшифрованном виде через AWREGION передается, можно записывать, или нет. 4КБ потому что это максимальный размер одной транзакции.

2. Как хочется, так и делается, это только подсказки.

3. Возможность объединить запись по разным адресам в одну. Например, запись байта по адресу 0x01 и байта по адресу 0x02 объединить в одну запись сразу двух байт. Поведение при записи по одному адресу зависит от остальных бит, может и каждую запись обязательно проводить, или вообще не проводить, все в кеше оставить.

4. Слейв ничего не обязан, как хочет, так и делает, это мастер обязан держать и адрес, и данные, пока их не примут.

5. :pardon:

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


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

38 minutes ago, Opex said:

4КБ потому что это максимальный размер одной транзакции.

Вовсе нет. Потому что 4кБ - это адресное пространство одного AXI slave. И делать несколько регионов внутри одного слейва нельзя.

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


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

On 4/15/2020 at 8:13 PM, one_eight_seven said:

И делать несколько регионов внутри одного слейва нельзя.

Зачем же эти сигналы передаются, если их использовать нельзя?

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


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

2 hours ago, Opex said:

Зачем же эти сигналы передаются, если их использовать нельзя?

Тому может быть множество причин. Например, один и тот же слейв может быть представлен в нескольких регионах.

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

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


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

On 4/15/2020 at 8:13 PM, one_eight_seven said:

делать несколько регионов внутри одного слейва нельзя

 

8 hours ago, one_eight_seven said:

один и тот же слейв может быть представлен в нескольких регионах

Как-то противоречиво. Приведите, пожалуйста, конкретный пример.

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


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

17 minutes ago, Opex said:

Как-то противоречиво.

Может обратитесь вот к этому пособию, прежде, чем делать такие выводы? https://stalins-bukvar.ru/catalog/samogobrazovanie/logika_uchebnik_dlya_sredney_shkoly/

17 minutes ago, Opex said:

Приведите, пожалуйста, конкретный пример. 

Пример - AXI SLAVE - это SPI контроллера. Но в SoC имеется несколько регионов, которые зеркалируют это устройство. Как простейший пример - для безопасного и небезопасного доступа.

Обычно для этого организуют просто разные регионы в карте памяти. Но AXI 4 позволяет для этого использовать разные регионы, что несколько удобнее. Вот вам один слейв в нескольких регионах. Т.е. адреса ['h0000:'h0fff] в регионе 'h00, те же самые адреса ['h0000:'h0fff] в регионе 'h01, и т.д.

Но при этом В пределах адреса этого слейва - нашего SPI контроллера, - не будет нескольких регионов.

 

Вот другой вид на то же самое.

SPI контроллер, как таковой имеет адреса регистров ['h0 : 'h5f]

Если этот контроллер оформлен в SoC как целый AXI SLAVE, то его адрессация в рамках абстракции подсистемы будет ['h0000 : 'h0fff]

При этом нельзя делать чтобы адреса ['h0:'h5f] имели одно значение AxREGION, а адреса ['h0060:'h0fff] имели другое значение AxREGION - это запрет на то, чтобы внутри одного слейва было несколько регионов.

 

Но такие вещи лучше осознавать в общем виде, а не на конкретных примерах.

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

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


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

41 minutes ago, one_eight_seven said:

Пример - AXI SLAVE - это SPI контроллера. Но в SoC имеется несколько регионов, которые зеркалируют это устройство. Как простейший пример - для безопасного и небезопасного доступа.

Обычно для этого организуют просто разные регионы в карте памяти. Но AXI 4 позволяет для этого использовать разные регионы, что несколько удобнее. Вот вам один слейв в нескольких регионах. Т.е. адреса ['h0000:'h0fff] в регионе 'h00, те же самые адреса ['h0000:'h0fff] в регионе 'h01, и т.д.

Но при этом В пределах адреса этого слейва - нашего SPI контроллера, - не будет нескольких регионов. 

['h0000:'h0fff] - это локальная адресация слейва, или глобальные адреса? Из примера совсем не понятно, зачем нужны регионы. У вас они, можно подумать, используются просто как дополнительные старшие адреса

 

 

41 minutes ago, one_eight_seven said:

Вот другой вид на то же самое.

SPI контроллер, как таковой имеет адреса регистров ['h0 : 'h5f]

Если этот контроллер оформлен в SoC как целый AXI SLAVE, то его адрессация в рамках абстракции подсистемы будет ['h0000 : 'h0fff]

При этом нельзя делать чтобы адреса ['h0:'h5f] имели одно значение AxREGION, а адреса ['h0060:'h0fff] имели другое значение AxREGION - это запрет на то, чтобы внутри одного слейва было несколько регионов.

А если у слейва адреса ['h0000:'h7fff] ?

 

 

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


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

1 hour ago, Opex said:

А если у слейва адреса ['h0000:'h7fff] ?

Это невозможно, размер AXI слейва - это 4к. В вашем случае - это восемь AXI Slave-ов.

Quote

 

это локальная адресация слейва, или глобальные адреса?

 

Это неважно.

Мне кажется, вам нужно немножко вернуться к истокам и понять, что такое абстрагирование.

 

Quote

Из примера совсем не понятно, зачем нужны регионы.

Так это прямо указано в стандарте - чтобы организовать несколько разных областей памяти, в которые отображаются одни и те же устройства. В моём примере - это тоже имеется:

2 hours ago, one_eight_seven said:

имеется несколько регионов, которые зеркалируют это устройство. Как простейший пример - для безопасного и небезопасного доступа.

 

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


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

Если шина адреса 32-разрядная, это миллион слейвов получается? Как тогда организуется доступ к гигабайту памяти?

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


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

4 hours ago, Opex said:

Если шина адреса 32-разрядная, это миллион слейвов получается? Как тогда организуется доступ к гигабайту памяти? 

Да, а ещё это 4 миллиарда байт получается! А доступ к ним организуется, по большому счёту, использованием той самой шины адреса.

или аж 32 миллиарда бит! Но побитового доступа нет...

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


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

В 20.04.2020 в 23:12, one_eight_seven сказал:

Это невозможно, размер AXI слейва - это 4к. В вашем случае - это восемь AXI Slave-ов

а если у слэйва объем, допустим 256К? если это большая память?

 

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


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

14 minutes ago, GAYVER said:

а если у слэйва объем, допустим 256К? если это большая память?

 

Советую вам научиться читать.

AXI SLAVE - это 4k.  ни больше, ни меньше.
Хотите - засовывайте несколько устройств в один AXI SLAVE, хотите, делайте устройство, распространяющееся на несколько AXI Slave-ов. Но на определения, актуальные именно для AXI, это не повлияет никак.

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

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

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


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

1 hour ago, one_eight_seven said:

AXI SLAVE - это 4k.  ни больше, ни меньше.

А можете привести конкретную цитату из стандарта ARM IHI0022E где бы это было явно прописано?..

Да, в стандарте явно указано, что адресное пространство слейва должно быть кратно 4КБ, но чтобы оно в точности равнялось 4КБ, вот этого я что-то не вижу..

Не умею читать? :)

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


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

7 minutes ago, blackfin said:

А можете привести конкретную цитату из стандарта ARM IHI0022E где бы это было явно прописано?..

Да, в стандарте явно указано, что адресное пространство слейва должно быть кратно 4КБ, но чтобы оно в точности равнялось 4КБ, вот этого я что-то не вижу..

Не умею читать? :)

Да. Не умеете.

The AXI protocol is burst-based. The master begins each burst by driving control information and the address of the first byte in the transaction to the slave. As the burst progresses, the slave must calculate the addresses of subsequent transfers in the burst.A burst must not cross a 4KB address boundary.

Note

This prevents a burst from crossing a boundary between two slaves. It also limits the number of address increments that a slave must support.

 

Я, правда, тоже плохо читаю, slave можно сделать и так, что он не может обработать адресное пространтсво в 4k, но на практике я этого никогда не видел.

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

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


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

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

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

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

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

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

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

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

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

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