я пытаюсь сделать свою собственную карту pcie. Я использую плату xilinx spartan 6 sp605 с интегрированным блоком spartan 6 для pci express. моя целевая система — Ubuntu 16.04. Мой компьютер видит карту pcie, когда я делаю lspci, но у меня проблемы с чтением памяти с карты pcie. я использую этот инструмент, который я нашел для чтения памяти с устройства без необходимости делать драйвер,
https://github.com/billfarrow/pcimem/blob/master/README
Я использую пример кода, который поставляется с интегрированным блоком Spartan 6 для записи в память с карты pcie, используя следующий код
wire [31:0] data_reg;
wire [10:0] add_reg;
assign add_reg = 11'b00000000000;
assign data_reg = 32'b00001111111111111111111111111111;
PIO_EP_MEM_ACCESS EP_MEM (
.
.
.
// Memory Write Port
.wr_addr_o(add_reg), // O [10:0]//wr_addr
.wr_be_o(wr_be), // O [7:0]
.wr_data_o(data_reg), // O [31:0]//wr_data
.wr_en_o(wr_en), // O
.wr_busy_i(wr_busy) // I
);
затем я использую ./pcimem pciesystemfile / resource0 0 w
чтобы проверить, что 00001111111111111111111111111111 записан в память, но его там нет, я вместо этого читаю 11111111111111111111111111111111
любая помощь с тем, что я могу делать неправильно, будет принята с благодарностью
заранее спасибо!
Хорошо! Я понял это после некоторого возни.
так что это не правильное место для чтения и записи данных в память pci
// Memory Write Port
.wr_addr_o(add_reg), // O [10:0]//wr_addr
.wr_be_o(wr_be), // O [7:0]
.wr_data_o(data_reg), // O [31:0]//wr_data
.wr_en_o(wr_en), // O
.wr_busy_i(wr_busy) // I
);
очевидно, на этом этапе в коде данные разбиваются на байты, где каждый байт в общем слове переворачивается; данные, которые я читал в исходном вопросе, который я разместил, должны были быть неправильно истолкованы мной.
Спасибо за помощь!
Других решений пока нет …