Почему данные не могут быть записаны по базовому адресу 1 на ASB

#protocols #amba

#протоколы #амба

Вопрос:

Я работаю над своим проектом по протоколу AHB.

Что я делаю, так это создаю IP-блоки с системой AHB и записываю / считываю данные с помощью SDK (Vitis).

Базовому адресу присваивается значение 0x43C0_0000.

Если я записываю данные на базовый адрес с помощью Xil_Out, это работает.

Однако, когда я передаю 0x43C0_0000 1 в Xil_Out, это не работает.

Методом проб и ошибок я обнаружил, что работает только адрес на 0x43C0_0000 4 *n .

Почему запись данных не в этом диапазоне не работает?

Ответ №1:

Большинство компьютерных схем адресации утверждают, что смещение адреса 1 означает доступ к одному байту информации. Если в вашем проекте шина AHB имеет 32-битный доступ для записи со смещением адреса 1, ваши данные должны быть помещены в D [15: 8] бит, предполагающих режим с малым порядком следования в шине AHB. В мире AMBA, который принял Xilinx, такой доступ называется узким доступом, что означает, что 8 бит меньше, чем полные 32 бита. Следовательно, запись одного байта должна оставлять оставшиеся 24 бита в этой ячейке памяти нетронутыми. Обычно это достигается путем выбора байтов, которых нет у шины AHB, в то время как у ее двоюродного брата AXI есть: https://developer.arm.com/documentation/ddi0243/c/AHB-Components/Bus-matrix/Signal-descriptions

Весьма вероятно, что дизайн Xilinx не поддерживает узкие обращения к AHB, в то время как вы все равно можете записывать целые 32 бита со смещением (-ами) адреса 4 * n, как вы выяснили экспериментально. Тем не менее, я бы предпочел не проводить эксперименты и просто согласиться с одним типом компьютерной шины, но мы, люди, редко соглашаемся. Просто посмотрите, что мы делаем или не делаем с масками для лица во время пандемии COVID-19.