我正在试着做我自己的PCIe卡。我正在使用xilinx spartan6PCI express集成模块的xilinx spartan6 sp605板。我的目标系统是ubuntu 16.04。当我执行lspci时,我的计算机可以检测到PCIe卡,但我无法从PCIe卡读取内存。我正在使用我发现的这个工具来读取设备的内存,而不需要制作驱动程序。
https://github.com/billfarrow/pcimem/blob/master/README
我正在使用spartan6集成块附带的示例代码,使用以下代码从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
为了验证000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
对我可能做错的任何帮助都将不胜感激。
在进阶时谢谢!
发布于 2017-05-24 09:53:26
好的!我花了些心思才弄明白这一点。
因此,这不是向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
);显然,在代码的这个阶段,数据被分成字节,其中整个字中的每个字节都是颠倒的,我在我发布的原始问题中读取的数据一定是被我读错了。
谢谢你的帮助!
https://stackoverflow.com/questions/43670408
复制相似问题