仅对英特尔可见 — GUID: mmb1487360540772
Ixiasoft
10.5.1. ebfm_barwr规程
10.5.2. ebfm_barwr_imm处理过程
10.5.3. ebfm_barrd_wait处理过程
10.5.4. ebfm_barrd_nowt处理过程
10.5.5. ebfm_cfgwr_imm_wait处理过程
10.5.6. ebfm_cfgwr_imm_nowt处理过程
10.5.7. ebfm_cfgrd_wait处理过程
10.5.8. ebfm_cfgrd_nowt处理过程
10.5.9. BFM配置处理过程
10.5.10. BFM共享存储器访问处理过程
10.5.11. BFM日志和消息处理过程
10.5.12. Verilog HDL格式化函数
仅对英特尔可见 — GUID: mmb1487360540772
Ixiasoft
8.1. 读DMA实例
该实例将3个数据块从PCIe地址空间(系统存储器)移动到Avalon-MM地址空间。
注: 自17.1发布起, Intel® Quartus® Prime Pro Edition软件根据您使用参数编辑器指定的参数动态生成设计实例。因此, Intel® Quartus® Prime Pro Edition安装目录不再为 Intel® Stratix® 10器件提供静态设计实例。静态设计实例适用于较早的器件系列,包括 Intel® Arria® 10和 Intel® Cyclone® 10器件。
图 59. Intel® Stratix® 10 Gen3 x8 Avalon-MM DMA集成Platform Designer

下图说明PCIe和 Avalon® -MM地址空间中数据块的位置和大小,以及描述符列表格式。此实例中,RD_TABLE_SIZE的值为127。
图 60. 使用Read DMA从PCIe传送到Avalon-MM地址空间的数据块。
描述符列表包含128个条目。在存储器中状态列表优先于可变量描述符。Read和Write Status,以及Descriptor Table分别位于Read Descriptor Base Register和Write Descriptor Base Register中的指定地址。
图 61. PCIe* 系统存储器中的描述符列表
- 软件为Read Descriptor Status列表和Descriptor列表分配 PCIe* 系统存储器内存。存储器分配需要进行如下计算:
- 读状态列表中每个条目为4字节。128个读取条目需512字节内存。
- 每个描述符为32字节。3个描述符需96字节内存。
注: 为避免可能出现上溢的情况,请根据RD_TABLE_SIZE支持的描述符数量而不是描述符的初始数量进行所需内存的分配。
软件必须为状态和描述符列表分配的总存储大小为608字节。该实例中已分配内存的起始地址是0xF000_0000。将该地址写入Read Descriptor Controller Read Status and Descriptor Base寄存器。 - 从Read Status and Descriptor Base偏移0x200开始烧写Read Descriptor Controller列表。该偏移与图 60中显示的地址相匹配。数据的3个块需要3个描述符。
- 根据描述符状态列表中的起始地址烧写Read Descriptor Controller Read Status and Descriptor Base寄存器。
- 通过片上描述符列表FIFO的起始地址编写Read Descriptor Controller Read Descriptor FIFO Base。也是Platform Designer中rd_dts_slave端口的基地址。本实例中,该地址为0x0100_0000。
图 62. 片上Read FIFO的地址
- 要更新每个描述符的状态,请使用0x1编写Read Descriptor Controller RD_CONTROL寄存器。该步骤为可选。
- 使用值3编程Read Descriptor Controller寄存器RD_DMA_LAST_PTR。编程该寄存器会触发Read Descriptor Controller描述符列表取得进程。因而,写该寄存器必须是设置DMA传送的最后一步。
- 主机等待MSI中断。完成最后一个描述符后,Read Descriptor Controller将MSI发送到主机。Read Descriptor Controller也会写Update。
- 如果要移动其他块,请完成下列步骤以设置其他传送。
- 从存储器地址0xF000_0200 +(<previous last descriptor pointer> * 0x20)开始编程描述符列表。该情况下,描述符指针为3。
- 使用previous_value (3 in this case) + number of new descriptors编程Read Descriptor Controller寄存器RD_DMA_LAST_PTR。编程该寄存器会触发Read Descriptor Controller描述符列表读取进程。因而,编程寄存器必须是设置DMA传送的最后一个步骤。
注: 当RD_DMA_LAST_PTR开始处理RD_TABLE_SIZE时,请确保使用等于RD_TABLE_SIZE的值编程RD_DMA_LAST_PTR。这样就可确保第一个描述符在最低偏移出现(本实例中为0xF000_0200)处翻转。请参阅Read DMA Descriptor Controller Registers中RD_DMA_LAST_PTR的说明部分获取更多关于编程RD_DMA_LAST_PTR寄存器的信息。
相关信息