工具/软件:TI-RTOS
您好!
我有一个66ak2h14、运行 TI RTOS、作为根复合体运行、通过 PCIe 连接到 Virtex-6。
我正在运行 PCIe 示例的修改版本、该版本被写入以在两个评估卡之间传输数据。 在本例中、我们将 PCIe 缓冲地址写入 Virtex、它会将大约1K 的数据突发传输到我们提供的 PCIe 存储器地址。 我们修改了该示例、使其仅为根复合体。
一切都很好,但我对入站映射有疑问。
我们使用的设置与测试程序使用的设置类似。 我们将 RC (TI)上的 BAR1设置为0x9000_0000。 测试软件中使用的 BAR1掩码仍然为0x00ff_FFFF。 我们更改入站映射、以便将0x9000_0000映射到缓冲区地址、在本例中为0x8005_4700。 这工作正常。
但是,在相同的设置下,如果我们将 Virtex 配置为将数据传输到地址0x8000_1000而不是0x9000_0000,则数据确实会保存在内存中的0x8000_1000处。 根据我的理解、这不在根控制器上的 BAR1范围内。 我还可以将 Virtex 设置为传输到0x8005_4700 (入站映射之前的实数缓冲器地址)、并将数据写入实数缓冲器。 当我这么做时、数据会被存储在实际缓冲区中。 请注意、后两个地址(0x8000_1000和0x8005_4700)不在 BAR1范围内、SOC 接受传输并将数据写入 SDRAM 中、而不转换地址。
FPGA 中的 Chipscope 验证三个测试用例的目标地址分别为0x9000_0000、0x8000_1000和0x8005_4700。
我的预期是、由于这些地址超出了 BAR1的范围、因此根本不会发生传输。
请注意、MEMSPACE 全为零、因为它在 PCIe 示例程序中。
Bar1设置为0x9000_0000、RC_MODE、非预取、TYPE32、MEM。
问题:
1)当突发传输到超出条范围(例如0x8000_1000)的地址时、我希望 RC 不接受数据、但它会将数据直接传输到该地址处的 SDRAM 中、而不会因入站转换而改变。 我们如何将入站传输的地址范围限制为 BAR1定义的范围?
2) 2)文档不清楚当 MEMACE 寄存器全为零时会发生什么情况:
a)这意味着什么都翻译、什么也不翻译?
b) MEMACE 中的存储器限制和基址是否为"之前"的转换值?
c)限制值是否包含在内? 也就是说、如果 MEMSPACE 为0xa0008000、这是定义0x8000_0000到0xAFFF_FFFF 还是0x9FFF_FFFF 之间的空间?
从0x2180_1000开始的寄存器值: (XXXXXXXX =无关/未记录)
21801000: XXXXXXXX xxxxxxxx xxxxxxxx xxxx00010000
21801010: 00000000 90000000 00000000 00000000
21801020: 00000000 00000000 00000000 00000000
21801030: 00000000 00000040 00000000 000001ff
谢谢!
Tim