This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[PCIE]关于Application Report “PCIe Use Cases for KeyStone Devices”上的疑问

我想问一下文档中的这两个PCIe address怎么理解? 它们两个的区别是什么?或者说分别代表的是什么?

  • Assume the DDR destination buffer is located at: 0x8912_5678~0x89D2_5677 (12 MB)

    CMD_STATUS[OB_XLT_EN] = 1 (outbound address translation enabled)
    Assume OB_SIZE=8 MB (bits [27:23] decide which translation region being used)

    Because buffer size (12 MB) is larger than OB_SIZE (8 MB), we must choose two
    contiguous translation regions (2*8 MB=16 MB>12 MB) for the transfer. But there is
    no limit for which two regions are chosen.

    For example, if we choose Region 18 and Region 19 for the translation.
    Bits [27:23] = 18 = 10010b --> 0x6900_0000;
    Bits [27:23] = 19 = 10011b --> 0x6980_0000;

    OB_OFFSET_INDEX18 = 0x7000_0001 (bit [0]=1 enables this region)
    (0x7000_0000 is the PCIe address, which can be chosen randomly)
    OB_OFFSET18_HI = 0x1234_5678 (64-bit addressing)

    OB_OFFSET_INDEX19 = 0x7080_0001
    (make Region 19 offset consistent as Region 18, with 8 MB spacing)
    OB_OFFSET19_HI = 0x1234_5678

    We can use EDMA to do the transfer.
    srcAddr = 0x6900_0000;
    dstAddr = 0x8912_5678;
    dataSize = 12 MB;

    The translated address = bits[63:23] of 0x12345678_70000000 + bits[22:0] of
    0x6900_0000 = 0x12345678_70000000

    Then the data packets with PCIe address
    0x12345678_70000000~0x12345678_70BFFFFF (12 MB) will be transferred to the
    internal DDR location as 0x8912_5678~0x89D2_5677. The other PCIe device over the
    link whose BAR window (64-bit) including this PCIe address range will be the target to
    be read from.

  • 0x7000_0000 is the PCIe address是初始定义的一个PCI地址,PCIe address 0x12345678_70000000是经过translated后的PCI地址,在EP端要读取这段地址的话,需要设置BAR在这段地址范围内。
x 出现错误。请重试或与管理员联系。