Virtex6 PCIe 超简版基础概念学习(二)

文档版本 开发工具 测试平台 工程名字 日期 作者 备注
V1.0 ise14.7 DBF板 Day4/PCIETest 2016.03.31 lutianfei none
  • 参考资料:

    • Spartan 6 PCIE_V2.4 真教程(一)
    • Spartan 6 PCIE_V2.4 真教程(二)
    • 菜鸟5小时速成FPGA_PCIE设计高手教程.pdf
    • ug671_V6_IntBlock_PCIe.pdf
    • PCI+EXPRESS体系结构导读.pdf

一、PIO模式

  • PIO模式是一种通过CPU执行I/O端口指令来进行数据的读写的数据交换模式。是最早先的硬盘数据传输模式,数据传输速率低下,CPU占有率也很高,大量传输数据时会因为占用过多的CPU资源而导致系统停顿,无法进行其它的操作。数据传输速率从3.3MB/s到16.6MB/s不等。传输速率低下和极高的CPU占有率。
  • PIO模式在No_16_0328 Virtex6 PCIe2.5(一) 仿真学习.md中已经测试过,这里不再赘述。不同的地方在于仿真使用的是v2.5版本ip核,而DMA参考xapp1052方案设计,顾改为1.7版ip核,既不再使用AXI总线设计。

二、PCIe核接口定义

(一) 系统接口

  • sys_reset_n : 输入,异步复位,时间至少大于1500ns
  • sys_clk:输入,可选频率为100Mhz,125Mhz,250Mhz

(二) 事物接口

2.1 通用事物接口
  • trn_clk : 输出, 传输、配置、物理层控制、状态接口操作都与此时钟同步。
  • trn_reset_n : 输出,用户逻辑与传输和配置接口交互时使用此复位恢复到初始状态;与trn_clk同步,与sys_reset_n步。
  • trn_lnk_up_n : 输出,当核与连接对象已连接且准备好交换数据时有效。
  • trn_fc_* : 输出,各种流控制信号
  • trn_fc_sel[2:0] : 输入:选择流控制信息呈现在哪个trn_fc_*上。
2.2 发送事物接口
  • trn_tsof_n : 输入,发送帧开始表示,仅在trn_tsrc_rdy_n信号为时,有效。
  • trn_teof_n : 输入,发送帧结束标志,仅在trn_tsrc_rdy_n信号为时,有效。
  • trn_td : 输入,发送数据接口
  • trn_trem_n : 输入,发送数据余数。仅在trn_teof_ntrn_tsrc_rdy_ntrn_tdst_rdy_n同时为低时有效。
    • 0表示数据在trn_td[63:0]
    • 1表示数据在trn_td[63:32]
  • trn_tsrc_rdy_n : 输入,发送源(用户)准备就绪;用户已将有效数据放入trn_td
  • trn_tdst_rdy_n : 输出,发送目的(核)准备就绪;表示已经准备好接收在trn_td上的数据。当其与trn_tsrc_rdy_n同时有效时表示数据已成功传至trn_td

  • 发送TLP工作流程:

      • trn_tdst_rdy_n拉低
    • 用户
      • trn_tsrc_rdy_ntrn_tsof_n拉低,并与trn_td第一个数据前沿对齐。
      • trn_tsof_n在下个时钟周期即可拉高。
      • 传输结束时,将trn_tsrc_rdy_n,trn_teof_n同时拉低,且与trn_td最后一个数据沿对齐。(trn_trem_n视情况而定)
      • trn_tsrc_rdy_n,trn_teof_n制信号在下个trn_clk同时拉高。

2.3 接收事物接口
  • trn_rsof_n : 输出,接收帧开始标志,仅在trn_rsrc_rdy_n时有效。
  • trn_reof_n : 输出,接收帧结束标志,仅在trn_rsrc_rdy_n时有效。
  • trn_rd : 输出,接收到的数据,仅在trn_rsrc_rdy_n时有效。
  • trn_rrem_n: 输出,接收数据余数。仅在trn_reof_ntrn_rsrc_rdy_ntrn_rdst_rdy_n同时为低时有效。
    • 0表示数据在trn_rd[63:0]
    • 1表示数据在trn_rd[63:32]
  • trn_rerrfwd_n : 输出,表示收到错误数据。
  • trn_rsrc_rdy_n: 输出,表示接收源(核)准备就绪。表示,核将数据传至trn_rd
  • trn_rdst_rdy_n : 输入,表示接收目的(用户)准备就绪。表示,用户准备好接收来自trn_rd的数据。
  • trn_rsrc_dsc_n : 输出,表示核将当前包丢掉。
  • trn_rnp_ok_n : 输入,表示用户准备好接收一个Non-Posted TLP包。
  • trn_rbar_hit_n[6:0] : 输出,表示当前包在哪个BAR空间,在trn_rsof_ntrn_reof_n有效
    • trn_rbar_hit_n[0]: BAR0
    • trn_rbar_hit_n[1]: BAR1
    • trn_rbar_hit_n[2]: BAR2
    • trn_rbar_hit_n[3]: BAR3
    • trn_rbar_hit_n[4]: BAR4
    • trn_rbar_hit_n[5]: BAR5
    • trn_rbar_hit_n[6]: Expansion ROM Addres

  • 接收TLP工作流程:

    • 用户

      • trn_rdst_rdy_n
      • trn_rsof_ntrn_rsrc_rdy_n拉低,并与trn_rd第一个数据前沿对齐。
      • trn_rsof_n拉高,并继续输出数据
      • trn_rsrc_rdy_ntrn_reof_n拉低,并与trn_rd最后一行数据前沿对齐。(trn_rrem_n视情况而定)
      • 在下一个时钟,将trn_rsrc_rdy_ntrn_reof_n拉高。

2.4 中断事物接口
  • cfg_interrupt_n : 输入,中断请求信号,用户将此信号拉低,来告诉PCIe核所选择的中断信息。此信号必须保持到cfg_interrupt_rdy_n后。
  • cfg_interrupt_rdy_n : 输出,中断确认信号,当此信号与cfg_interrupt_n信号同时为时表示PCIe核成功传输了中断信息。
  • cfg_interrupt_assert_n : 输入,传统中断置有效无效选择。
    • 1表示有效
    • 0表示无效
  • cfg_interrupt_di[7:0] : 输入,对于传统中断,只支持INTA,所以时钟填00h
  • 板卡发送中断过程说明:

  • 用户
    • cfg_interrupt_ncfg_interrupt_assert_n,请求中断。cfg_interrupt_di[7:0]始终置为00h
    • cfg_interrupt_rdy_n
  • 用户
    • 下一个时钟周期,将cfg_interrupt_n置为无效。
  • :将中断产生消息发送出去。(保证PCI Command寄存器的Interrupt Disable位置0)
  • 用户:中断请求被接受时
    • cfg_interrupt_assert_n置无效,同时将cfg_interrupt_n
    • cfg_interrupt_rdy_n拉低置有效,表示接受中断取消信号。
  • 用户
    • 在下一个时钟,将cfg_interrupt_n拉高。
    • 发送中断取消消息
  • 板卡接收中断说明:

    • 中断置位TLP:0x3400_0000_0100_0020, 0x0000_0000_0000_0000

      • Fmt 为 2’b01,Type 为 5’b10100,是消息请求
      • Message Code:8‘b0010_0000中断( INTx)消息
      • assert_inta 拉高表示收到中断INTA#。

    • 中断撤销TLP:0x3400_0000_0100_0024, 0x0000_0000_0000_0000,
      • Fmt 为 2’b01, Type 为 5’b10100,是消息请求,
      • Message Code 为 8’b0010_0100,是中断( INTx)撤销消息
      • received_deassert_inta 为 1,收到 INTA#中断撤销消息


三 、PCIe DMA模式

  • PCI设备与存储器直接进行数据交换的过程被称为DMA。

(一) 数据从FPGA搬移到PC

  • 1 . PC申请物理地址连续的一段内存空间。
  • 2 . FPGA准备好发送数据后向PC发送中断,通知PC读取这些数据。
  • 3 . PC接收并分析该中断,向BAR0空间内寄存器,写如下命令:物理地址的起始地址空间大小,并且 启动DMA
  • 4 . FPGA 内的 DMA 引擎接收到启动** DMA 的命令后,主动将数据组织成**MWr包发送到 PC。DMA 引擎会自动填充 TPL 包逐一增加的地址等信息,直到达到用户设定的长度。在此过程完成后,FPGA向主机发送一个中断
  • 5 . PC 接收到中断后,然后读取 BAR0 空间状态寄存器判断中断类型,然后做相应的判断。将这段物理地址的数据拷贝到用户程序能够访问的空间中,然后回到步骤 2

(二) 数据从 PC 搬移到FPGA的过程

  • 1 . PC 申请物理地址连续的一段内存空间。
  • 2 . FPGA 准备好接收数据后向* PC* 发送中断,通知 PC 发送数据。
  • 3 . PC 接收并分析该中断,写 BAR0 空间内寄存器,包含上述物理地址的起始地址空间大小,然后启动 DMA
  • 4 . FPGA 内的 DMA 引擎接收到启动 DMA 的命令后,主动组织Mrd包发送到 PCDMA 引擎会自动填充 TPL 包逐一增加的地址等信息,直到达到用户设定的长度。PC 收到读请求,会自动将上述物理空间的数据组织成* Completion TLPs* 回送给 FPGAFPGA 接收分析后按顺序存放在相应的缓冲内。在此过程完成后,FPGA 向主机发送一个中断
  • 5 . PC 接收到中断后,然后读取 BAR0 空间状态寄存器判断是中断类型,然后做相应的判断。将这段用户程序中新的数据拷贝到物理空间中,然后回到步骤 2

(三) DMA控制逻辑

  • TX_Engine 用于组织和传输转发事务非转发事务完成事务的数据包。在这个设计中,TX_Engine 可以产生存储器写转发的请求(MWr) 、非转发的读请求(MRd)带数据的完成(CplD) 。产生的数据发送到 TRN 接口。
  • RX_Engine 用于从 TRN 接口中接收数据,并根据事务的种类,将对应的数据放在 Ingress FIFO 中或控制和状态寄存器中。RX Engine 也通过 Read Request Wrapper 通知TX Engine 还未发送的请求。RX Engine 支持完成事务存储器读事务存储器写事务
  • DMA Control and Status Wrapper 该模块是和 CPU 通讯的主要模块,也是 DMA 控制的主要模块,包含内部状态控制模块Internal Control BlockDMA 控制/状态寄存器 DMA Control/Status Register 内部状态解析 CPU 的命令,并作出相应的执行。DMA 控制/状态寄存器被映射到 PCI 的地址空间中,同时也和其他的用户逻辑相连接。CPU 通过读写这些寄存器达到控制其他逻辑的运行。
  • Egress Data Presenter 此模块提供外部不同来源不同位宽的数据到 TX Engine 的通道。
  • Read Request Wrapper 用于 TX EngineRX Engine通讯TX Engine尚未发送非转发事务信息发送给 RX Engine。这个信息存储在 32 位位宽的双端口 RAM 中。
  • Egress/Ingress FIFO 和其他数据来源连接。接口为 Xilinx 标准 FIFO接口,可方便的集成用户自定义的外设。

四 XAPP1052 DMA设计

(一) FPGA –> PC 数据传输具体实现
  • 1、复位Initiator

    • PC向BARO空间 DCR1(0x0)地址,写0x1值,表示对PCIe 初始化复位。
  • 2、清除Initiator的复位
    • PC向BARO空间 DCR1(0x0)地址,写0x0值,表示清除对PCIe 初始化复位。
  • 3、填写DMA寄存器相关信息,在此之前需要PC先申请一块物理地址连续的缓冲区。
    • DMA目的起始地址PC向BARO空间 WDMATLPA(0x008)地址,写 DMA目的起始地址。
    • TLP包大小 : PC向BARO空间 WDMATLPS(0x00c)地址,写 TLP包大小。
    • TLP包个数 : PC向BARO空间 WDMATLPC(0x010)地址,写 TLP包个数。
  • 4、启动DMA
    • PC向BARO空间 DCR2(0x4)地址,写0x1值,表示对开启DMA传输。
  • 5、处理DMA完成
    • DMA传输完成后FPGA会给PC发送完成中断,PC接到FPGA发来的中断信号后检查自定义寄存器,判断是否为DMA写完成中断。

(二) PC –> FPGA 数据传输具体实现
  • 过程与上述类似

时间: 2024-08-04 13:29:27

Virtex6 PCIe 超简版基础概念学习(二)的相关文章

Virtex6 PCIe 超简版基础概念学习(一)

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 ise14.7 DBF板 Day2/PCIETest1 2016.03.31 lutianfei none 参考资料: Spartan 6 PCIE_V2.4 真教程(二) 菜鸟5小时速成FPGA_PCIE设计高手教程.pdf v6_pcie_ug517.pdf PCI+EXPRESS体系结构导读.pdf xapp1052.pdf 一 常见接口速度 二事务处理层协议理解 1 事物层空间说明 2 配置空间概述 21 配置空间寄存器

PCIe物理层逻辑部分基础(二)

Mux会对来自数据链路层的数据(TLP&DLLP)插入一些控制字符,如下图所示.这些控制字符只用于物理层之间的传输,接收端的设备的物理层接收到这些数据后,会将这些控制字符去除,在往上传到其数据链路层. 当然,除了STP.SDP和END之外,还有一些其他的控制字符,如EDB(前面的文章详细介绍过).SKIP.COM等.如下图所示: Ordered Sets主要用于链路训练等.每一个Ordered Set都是DW对齐(即四个字节),且Ordered Set开头是一个叫做Comma(COM)的K字符(

【铜】第131篇 融合一对一canvas视频录制到备份上(二)简版做成及追加图片过程周四

关键词:一对一canvas视频录制, 简版做成,追加图片过程 一.一对一视频录制 1.1 往备份上布录制-----------------bug处理 现在不知道,网页录制都依赖哪些文件,现在需要一个一个的去除.现在去除差不多了,如下: 经过整理发现,仅仅需要两个文件,就能实现录制.如下: 简版访问地址如下: http://localhost:9001/record-canvas-drawings.html#no-back-button 二.追加图片过程 2.1 学生端追加拍照 <li><

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(二)(网内首发超详细版)

2.4 ssl方式部署apache 2.4.1安装apache ./configure --prefix=/usr/local/apache2 --enable-dav --enable-ssl--enable-so --enable-mods-shared=all make && make install 2.4.2安装svn 安装apr-1.4.6.tar.gz.apr-util-1.5.1.tar.gz.neon-0.29.6.tar.gz同2.2章节部分 unzip sqlite-

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

目录结构如下: 目录 1说明及环境介绍3 1.1说明3 1.2环境准备及格式约定4 2 Linux下apache搭建svn服务器4 2.1 apache安装部署4 2.2 svn安装部署5 2.3整合svn和apache6 2.4 ssl方式部署apache7 2.4.1安装apache7 2.4.2安装svn7 2.4.2 部署认证8 3 Linux下svn独立服务器方式部署9 3.1安装SVN9 3.2 配置环境10 3.3 权限配置样例11 3.4 启动SVN服务器12 3.5 访问方式1

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)

3.3 权限配置样例 注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义. * 对权限配置文件的修改立即生效,不必重启svn. 用户组格式: [groups] = , 其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔. 版本库目录格式: [<版本库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限> 其中,方框号内部分可以有多种写法: [/],表示根目录及以下,根目录是svnserve启动时指定的,我们

安全技能树简版(转)

Expand - Collapse 安全技能树简版 说明 V1 By @余弦 201706 联系我:[email protected] 更新动态关注微信公众号:懒人在思考 工欲善其事必先利其器 世界之大总有一款利器适合你 https://github.com/Hack-with-Github/Awesome-Hacking  这份技能树最适合走向安全工程化之路的人 高效习惯 正则表达式 调试工具 Kodos RegexBuddy https://regexper.com/ 正则表达式30分钟入门

puppet基础学习(二)

puppet基础学习(二) 六.ResourceOrdering(资源定序) 使用变化参数before , require , notify , subscribe catalog是对一个给定的系统的所有资源及关系的编译,在编译catalog时,除非我们指定资源的执行顺序,不然puppet是以其自己的顺序管理,大多数时候puppet指定适当的方式,例如puppet管理用户gigabyte应该存在和文件夹/home/gigabyte/bin应该存在并属于用户gigabyte时,puppet会自动指

HBase框架基础(二)

* HBase框架基础(二) 上一节我们了解了HBase的架构原理和模块组成,这一节我们先来聊一聊HBase的读写数据的过程. * HBase的读写流程及3个机制 HBase的读数据流程: 1.HRegionServer保存着meta表以及表数据,要访问表数据,首先Client先去访问zookeeper,从zookeeper里面获取meta表所在的位置信息,即找到这个meta表在哪个HRegionServer上保存着. 2.接着Client通过刚才获取到的HRegionServer的IP来访问M