软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 系统运维 -> Virtex6PCIe超简版基础概念学习(二) -> 正文阅读

[系统运维]Virtex6PCIe超简版基础概念学习(二)


文档版本 开发工具 测试平台 工程名字 日期 作者 备注
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

[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/56593746.jpg
[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/29663751.jpg
  • 发送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同时拉高。

[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/42219849.jpg
[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/26341923.jpg
[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/38302844.jpg
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

[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/89006463.jpg
[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/62513074.jpg
  • 接收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拉高。

[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/61743111.jpg
[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/47171749.jpg
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


  • 板卡发送中断过程说明:
    [img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/97586535.jpg
    [img]http://7xrgfx.com1.z0.glb.clouddn.com/16-4-1/2075776.jpg

  • 用户
    • 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#。
        [img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/287127.jpg

    • 中断撤销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#中断撤销消息
        [img]http://7xrgfx.com1.z0.glb.clouddn.com/16-4-1/53567372.jpg


三 、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控制逻辑


[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-3-31/46660919.jpg

  • 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写完成中断。

[img]http://7xrgfx.com1.z0.glb.clouddn.com/16-4-1/36194435.jpg
(二) PC –> FPGA 数据传输具体实现
  • 过程与上述类似
    [img]http://7xrgfx.com1.z0.glb.clouddn.com/16-4-1/30986764.jpg

......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-01 16:57:15  
系统运维 最新文章
linux新进程的创建
Muduo网络库源码分析(一)EventLoop事件循
Linux系统分区
haproxylvsnginx负载均衡的比较
PeopleSoft介绍
win7+iis7+asp+.net+php环境配置
执行系统命令并且将输出写到指定日志文件的
linux批量替换多个文件中的字符串
makefile中=、:=和+=的区别
Linux服务器不关机新增硬盘的方法
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 14:51:00
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --