L-tile和H-tile Avalon® 存储器映射 Intel® FPGA IP PCI Express* 用户指南

ID 683667
日期 11/11/2021
Public
文档目录

9.4. 使用CRA接口读写BAR0的实例

可使用CRA接口发送TLP请求。TLP Header的Fmt和Type字段提供了用于确定TLP Header剩余部分大小所需的信息,以及数据包是否包含随着该Header而加载的数据。

图 67. TLP头格式

CRA接口使用地址为0x2000和0x2004的寄存器发送TLP,并使用地址为0x2008和0x200C的寄存器查看Completion状态。请参阅表格“根端口TLP数据寄存器”了解有关这些寄存器的更多详细信息。

以下是如何使用Type 0配置TLP从BAR0读取并对其写入的实例。
  1. 使用CRA接口,通过如下格式的Type 0 配置TLP读取一个未初始化的BAR0:
    要使用CRA接口发送TLP,请按如下步骤:
    1. 将0x0400_0001写入CRA接口地址0x2000。
    2. 将0x0000_0001写入CRA接口地址0x2004 (数据包开头)。
    3. 将0x0000_170F写入CRA接口地址0x2000。
    4. 将0x0000_0000写入CRA接口地址0x2004(继续)。
    5. 将0x0100_0010写入CRA接口地址0x2000。
    6. 将0x0000_0000写入CRA接口地址0x2004(继续)。
    7. 将0x0000_0000写入CRA接口地址0x2000(虚数据 以实现对齐)。
    8. 将0x0000_0002写入CRA接口地址0x2004(数据包结尾)。

    查看使用CRA接口相应的Completion。Completion TLP有4个双字,首3个双字(如下所示),紧接着是未初始化的BAR0值(为0xFFEF0010,如下图)的一个双字。

    要使用CRA接口读取Completion,请按照以下步骤:
    1. 保持读取CRA接口地址0x200C直到位[0] = 0x1(显示Completion数据包已到达,您可在下一步骤中接收SOP)。
    2. 读取CRA接口地址0x2008。本实例中读数据值为0x4A00_0001。
    3. 读CRA接口地址0x200C。本实例中,位[1:0] = 0,表示下一步骤中读取的值仍然位于数据包当中。
    4. 读CRA接口地址0x2008。读数据值是0x0100_0004。
    5. 读CRA接口地址0x200C。本实例中,位[1:0] = 0,表示下一步骤中读取的值仍然位于数据包当中。
    6. 读CRA接口地址0x2008。读数据值是0x00001700。
    7. 读CRA接口地址0x200C。本实例中,位[1:0] = 2,表示下一步骤中读取的值是数据包的EOP。
    8. 读CRA接口地址0x2008。读数据值是BAR0的未初始化值0xFFEF0010。
  2. 使用CRA接口,通过如下格式的Type 0配置TLP初始化具有0xFFFF_FFFF的BAR0:
    要使用CRA接口发送TLP,请按照以下步骤:
    1. 将0x0400_0001写入CRA接口地址0x2000。
    2. 将0x0000_0001写入CRA接口地址0x2004(数据包开头)。
    3. 将0x0000_110F写入CRA接口地址0x2000。
    4. 将0x0000_0000写入CRA接口地址0x2004(继续)。
    5. 将0x0100_0010写入CRA接口地址0x2000。
    6. 将0x0000_0000写入CRA接口地址0x2004(继续)。
    7. 将0xFFFF_FFFF写入CRA接口地址0x2000。
    8. 将0x0000_0002写入CRA接口地址0x2004(数据包结尾)。

    使用CRA接口查看相应的完成。Completion TLP

    有三个双字,显示如下:

    要使用CRA接口读取Completion, 请按照以下步骤:
    1. 保持读取CRA接口地址0x200C直到位[0] = 0x1(表示Completion数据包已到达,您可在下一个步骤接收SOP)。
    2. 读CRA接口地址0x2008。读数据值为0x0A00_0000。
    3. 读CRA接口地址0x200C。本实例中,位[1:0] = 0,显示为下一步骤中读取的值仍然在数据包当中。
    4. 读CRA接口地址0x2008。读数据值为0x0100_0004。
    5. 读CRA接口地址0x200C。本实例中,位[1:0] = 0,表示下一步骤中读取的值仍然在数据包当中。
    6. 读CRA接口地址0x2008。读数据值是0x00001100。
    7. 读CRA接口地址0x200C。本实例中,位[1:0] = 2,表示下一步骤中读取的值是数据包的EOP。
    8. 读CRA接口地址0x2008。读数据值是BAR0的大小。

将0xFFFF_FFFF写入其中后,可重复步骤1读取BAR0,并重复步骤2配置BAR0地址空间。

使用相同方法配置BAR1,BAR2,BAR3,BAR4和BAR5。