Я использую 64-битный Python на 64-битном процессоре.Один из них на шине AXI этого процессора подключен к FPGA (что позволяет шине и тактовой области переключаться на шину шириной 32 бита).Это устройство не любит 64-битный доступ ...
Я пытаюсь получить доступ к этой FPGA через python mmap следующим образом (в классе):
def __init__(self, base, len):
self.base = base
self.fd = open("/dev/mem", "r+")
self.lw = mmap.mmap(self.fd.fileno(),
len,
mmap.MAP_SHARED,
mmap.PROT_READ | mmap.PROT_WRITE,
offset=base)
def get_U32(self, offset):
s = self.lw[offset:offset+4]
return struct.unpack("<I", s)[0]
Идея состояла в том, чтобычто get_U32()
будет читать 32-битное слово из шины (отсюда смещение + 4 чтения).К сожалению, кажется, что mmap в любом случае выполняет 64-битный доступ к шине (я полагаю, что-то вроде кэширования для оптимизации производительности), а затем выполняет 32-битное «приведение».Базовая ПЛИС недовольна ...
В программе на Си я просто пишу:
data = *((uint32_t *) address);
... и процессор, похоже, аккуратно выполняет 32-битный доступ к своему AXIшина, которую предпочитает базовое оборудование .... (так что сейчас у меня есть (медленный) обходной путь, где python требует, чтобы программа C взаимодействовала с оборудованием через каналы)
Есть ли способ форсировать64-битный Python для выполнения 32-битного доступа, так как предыдущая строка C явно преуспевает с?
Вопрос написан о чтении 32-битных здесь, но, конечно, также необходимо писать 32-битные ...