Что подразумевается под выровненной / не выровненной передачей AXI - PullRequest
0 голосов
/ 07 мая 2019

Может кто-нибудь объяснить разницу между выровненной и не выровненной передачей данных

1 Ответ

1 голос
/ 08 мая 2019

Это не ограничивается шинами AXI, это общий термин, который влияет на передачу по шине и оставляет нежелательные результаты (снижение производительности). Но это сильно зависит от общей архитектуры.

Если адреса указаны в байтах, адресуемых байтов, то байты всегда выровнены. Предполагая, что байт равен 8 битам, тогда 16-битная передача будет выровнена, если она находится на границе 16 бит, что означает, что младший бит адреса равен нулю. 16-битное значение, которое охватывает адреса 0x1000 и 0x1001, выровнено и считается по адресу 0x1000 (с прямым или младшим порядковым номером). Но 16-битное значение, которое охватывает адреса 0x1001 и 0x1002, не выровнено, оно считается по адресу 0x1001. 0x1002 и 0x1003 будут выровнены. 32-битное значение двух младших битов адреса должны быть нулевыми, чтобы быть выровненными. 32-битное значение в 0x1000 выровнено, но 0x1001, 0x1002, 0x1003 все будут выровнены.

Память, как правило, не имеет ширины 8 бит с точки зрения интерфейса, а также геометрия, зависит от того, какой тип памяти и где. Кэш в процессоре, который выполняет переходы к медленной драме, вероятно, будет 32 или 64 или больше, некоторая степень 2 или степень 2 с битом четности или ecc (32, 33 бита или 40) - все это скрыт от вас, кроме попаданий, с которыми вы можете столкнуться Если у вас есть память шириной 32 бита, и если я называю 32-битное значение словом, то эта память адресуется словом, адрес 0x123 является адресом слова, его эквивалентный адрес байта равен 0x123 * 4 или 0x48C. Если вы хотите записать 32-битное значение в байтовый адрес 0x48c, который станет одним словом, запишите в эту память по этому адресу памяти 0x123. Но если бы вы делали запись слова в байтовый адрес 0x48E, то вам нужно было бы выполнить чтение слова адреса 0x123 в этой памяти / памяти, чтобы заменить два байта из слова, которое вы пишете. и запишите это измененное слово назад, тогда вам придется прочитать с адреса слова 0x124, изменить два байта и записать измененное слово обратно.

Различные автобусы работают по-разному. некоторые помещают одно слово в шину размером в слово и допускают невыровненные адреса. 32-разрядная ось должна была бы превратить запись слова 0x48E в две передачи осей, одну с двумя включенными полосами байтов в байтовой маске, а вторую передачу с двумя другими включенными полосами байтов. Шина Axi шириной 64 бита. давайте посмотрим .... 10010001110 ... потребуется выполнить две передачи осей: одну передачу с 16 битами данных и вторую с другими 16 битами данных из-за того, где эти 32 бита находятся. Но передача слова по адресу 0x1001 будет / должна быть одной передачей на 64-битной осевой шине с включенными средними четырьмя байтовыми линиями.

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

Хотя технически возможно использовать байтовый адресный драм, поскольку некоторые стандартные детали и шины работают, кеш покупает еще одну вещь: мелкие и невыровненные транзакции могут попасть в более быстрый sram, но чтение и удаление строки кеша оптимизирован для следующей шины или внешней памяти, поэтому доступ к драму, например, для большинства используемых нами систем, всегда можно выровнять по кратным значениям ширины шины (64 или 64 + ecc) для настольных компьютеров и серверов и 32 или 16 бит для встроенных систем. , ноутбуки, телефоны. Две шины и решения могут быть оптимизированы для каждой стороны, при этом кеш является переводчиком.

...