Virtex6 PCIe 超简版基础概念学习(一)_bar空间与dma空间连接-程序员宅基地

技术标签: 事物层  fpga  TLP包头解析  FPGA  virtext6  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


(一) 常见接口速度



(二)事务处理层协议理解

2.1 事物层空间说明

  • 1、PCI配置空间 :主要用于向系统提供设备自身的基本信息,并接受系统对设备全局状态的控制和查询。
  • 2、I/O空间 :主要包括设备控制寄存器状态寄存器,一般用于控制和查询设备的工作状态以及少量数据的交换。
  • 3、存储器空间:主要包括内存、显存、扩展ROM、设备缓冲区等,一般用于存放大量数据和进行数据块交换。
  • 4、消息空间 : 传递消息的时间信号机制空间。


2.2 配置空间概述

  • PCI设备只有在系统软件初始化配置空间之后,才能够被其他主设备访问。当PCI设备的配置空间被初值化之后,该设备在当前的PCI总线树上将拥有一个独立的PCI总线地址空间,即BAR(Base Address Register)寄存器所描述的空间。
2.2.1 配置空间寄存器说明

  • Vendor ID : 代表PCI设备的生产厂商
  • Device ID : 代表PCI厂商所生成的具体设备
  • Revision ID : 记录PCI设备的版本号,可以看成Device ID寄存器的扩展。
  • Class Code :供系统软件识别当前PCI设备的分类。
    • Base Class Code : 将PCI设备分类为显卡、网卡、PCI桥等设备
    • Sub Class Code : 对这些设备进一步细分
    • Interface : 编程接口
  • Header Type:有8位,其中
    • 7位:为1表示PCI设备为多功能设备,为0表示单功能设备。
    • 6~0位:0PCI Agent 设备的配置空间(普通PCI都此设置);1PCI桥使用的配置空间
  • Subsystem IDSubsystem Vendor ID:与Device ID 、Vendor ID功能类似,但是进一步细分了。
  • Capabilities Pointer : PCIe设备必须支持此寄存器,存放一些与PCI设备相关的扩展配置信息。
  • Interrupt Pin :PCI通过了4个中断引脚INTA#,INTB#,INTC#,INTD#
  • Base Address Register0~5 : 保存PCI设备使用的地址空间的基地址,该基地址保存的是该设备在PCI总线域中的地址。
  • Command:PCI设备的命令寄存器,在初始化时,值为0,此时该PCI设备只能够接受配置请求总线事物外,无法接受任何存储器或者I/O请求。系统软件需要合理设置该寄存器之后,才能访问该设备的存储器或I/O空间。(寄存器具体功能查看《PCI+EXPRESS体系结构导读》p49)
  • Status :绝大多数是只读位,保存PCI设备的状态。


2.2.2 PCI总线配置概述
  • Type00配置请求:与HOST主桥或PCI桥直接相连的PCI Agent设备或PCI桥。
  • Type01配置请求:至少穿越一个PCI桥,访问没有与其直接相连的PCI Agent设备或PCI桥。


2.3 BAR空间概述

  • PC启动后,BIOS探测搜有的外设。对PCIe(PCI)设备来说,BIOS检测到板卡有多少个BAR空间,每个空间有多大,然后对应为这些BAR空间分配地址。对PCI设备来说,它能“看”到PCIe板卡的空间只有BAR空间,也只能访问这些BAR空间。
  • 板卡可以发送合法的 PCIe TLP 包,并得到 PC 端的响应;但是 PC 端访问板卡被局限在 BAR 空间内。
2.3.1 BAR空间与DMA空间映射关系例子


2.4 事物处理层概述

TLP(Transaction Layer Sepcification) 有三部分组成,帧头数据摘要(或者称 ECRC)。 TLP 头标3 或者 4 个 DW,格式和内容随事物类型变化;数据端为 TLP 帧头定义下的数据段,如果该 TLP 不携带数据,那该段为空。 Digest段( Optional)是基于头标、数据字段计算出来的 CRC,成为 ECRC,一般 Digest 段由 IP 核填充。所以, PCIe 的处理在用户层表现为处理 TLP 中头标数据段

2.4.1 存储器读、写请求TLP包头格式

  • Fmt与Type:规定事物类型、头标长度和是否有数据载荷。

  • Posted与Non-Posted

    • Non-posted :即请求需要返回completion的响应包;
    • Posted:即不需要completion返回响应包。例如上面的存储器写入请求包和Message包都隶属于posted包。
  • ** Length : 1~1024DW,当值为**0:表示1024DW

  • DW BE:

  • Requester ID : 包含“生成这个TLP报文”的PCIe设备的总线号(Bus Number)设备号(Device Number)功能号(Function Number)

  • Tag:Requester ID、Tag合起来组成Transaction ID,在同一时间段内,PCIe设备发出的每一个Non-Posted数据请求TLP,其Transaction ID必须唯一。也就是Tag必须唯一。


2.4.2 完成包报文头格式


* Byte0~3 与存储器、配置请求报文对应字段含义一致。
* Completer ID:该字段存放“发送完成报文”的PCIe设备的ID号。
* Byte Count 记录源设备还需要从目标设备中获得多少字节的数据就能完成全部数据传递。
* Lower Address:接收端必须使用存储器读写完成TLP的Low Address 字段,识别一个TLP中包含数据的起始地址。


2.3.3 配置读写请求报文头格式

  • 配置请求TLP第0~7字节与存储器请求类似,第8~11字节中的BUSDeviceFunction Number中存放该TLP访问的目标设备的相应号码。
  • Ext RegisterReigister Number存放寄存器号。
  • 配置请求报文的其他字段必须为一下值:


2.4.4 消息请求报文头格式

  • PCIe总线规定了一下几类消息报文:

    • INTx Interrupt Signaling INTx中断信息包
    • Power Management 电源管理机能。
    • Error Signaling错误信息包
    • Locked Transaction Support 锁住交易的支持
    • Slot Power Limit Support插槽电源限制的支持
    • Vendor-Defined Messages制造商自行定义信息
  • INTx 中断消息报文


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lutianfeiml/article/details/51025557

智能推荐

874计算机科学基础综合,2018年四川大学874计算机科学专业基础综合之计算机操作系统考研仿真模拟五套题...-程序员宅基地

文章浏览阅读1.1k次。一、选择题1. 串行接口是指( )。A. 接口与系统总线之间串行传送,接口与I/0设备之间串行传送B. 接口与系统总线之间串行传送,接口与1/0设备之间并行传送C. 接口与系统总线之间并行传送,接口与I/0设备之间串行传送D. 接口与系统总线之间并行传送,接口与I/0设备之间并行传送【答案】C2. 最容易造成很多小碎片的可变分区分配算法是( )。A. 首次适应算法B. 最佳适应算法..._874 计算机科学专业基础综合题型

XShell连接失败:Could not connect to '192.168.191.128' (port 22): Connection failed._could not connect to '192.168.17.128' (port 22): c-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏15次。连接xshell失败,报错如下图,怎么解决呢。1、通过ps -e|grep ssh命令判断是否安装ssh服务2、如果只有客户端安装了,服务器没有安装,则需要安装ssh服务器,命令:apt-get install openssh-server3、安装成功之后,启动ssh服务,命令:/etc/init.d/ssh start4、通过ps -e|grep ssh命令再次判断是否正确启动..._could not connect to '192.168.17.128' (port 22): connection failed.

杰理之KeyPage【篇】_杰理 空白芯片 烧入key文件-程序员宅基地

文章浏览阅读209次。00000000_杰理 空白芯片 烧入key文件

一文读懂ChatGPT,满足你对chatGPT的好奇心_引发对chatgpt兴趣的表述-程序员宅基地

文章浏览阅读475次。2023年初,“ChatGPT”一词在社交媒体上引起了热议,人们纷纷探讨它的本质和对社会的影响。就连央视新闻也对此进行了报道。作为新传专业的前沿人士,我们当然不能忽视这一热点。本文将全面解析ChatGPT,打开“技术黑箱”,探讨它对新闻与传播领域的影响。_引发对chatgpt兴趣的表述

中文字符频率统计python_用Python数据分析方法进行汉字声调频率统计分析-程序员宅基地

文章浏览阅读259次。用Python数据分析方法进行汉字声调频率统计分析木合塔尔·沙地克;布合力齐姑丽·瓦斯力【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)035【摘要】该文首先用Python程序,自动获取基本汉字字符集中的所有汉字,然后用汉字拼音转换工具pypinyin把所有汉字转换成拼音,最后根据所有汉字的拼音声调,统计并可视化拼音声调的占比.【总页数】2页(13-14)【关键词】数据分析;数据可..._汉字声调频率统计

linux输出信息调试信息重定向-程序员宅基地

文章浏览阅读64次。最近在做一个android系统移植的项目,所使用的开发板com1是调试串口,就是说会有uboot和kernel的调试信息打印在com1上(ttySAC0)。因为后期要使用ttySAC0作为上层应用通信串口,所以要把所有的调试信息都给去掉。参考网上的几篇文章,自己做了如下修改,终于把调试信息重定向到ttySAC1上了,在这做下记录。参考文章有:http://blog.csdn.net/longt..._嵌入式rootfs 输出重定向到/dev/console

随便推点

uniapp 引入iconfont图标库彩色symbol教程_uniapp symbol图标-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏12次。1,先去iconfont登录,然后选择图标加入购物车 2,点击又上角车车添加进入项目我的项目中就会出现选择的图标 3,点击下载至本地,然后解压文件夹,然后切换到uniapp打开终端运行注:要保证自己电脑有安装node(没有安装node可以去官网下载Node.js 中文网)npm i -g iconfont-tools(mac用户失败的话在前面加个sudo,password就是自己的开机密码吧)4,终端切换到上面解压的文件夹里面,运行iconfont-tools 这些可以默认也可以自己命名(我是自己命名的_uniapp symbol图标

C、C++ 对于char*和char[]的理解_c++ char*-程序员宅基地

文章浏览阅读1.2w次,点赞25次,收藏192次。char*和char[]都是指针,指向第一个字符所在的地址,但char*是常量的指针,char[]是指针的常量_c++ char*

Sublime Text2 使用教程-程序员宅基地

文章浏览阅读930次。代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大、灵活的编辑器,相信你和我一样,都不会例外。我用过的编辑器不少,真不少~ 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号。它小巧绿色且速度非

对10个整数进行按照从小到大的顺序排序用选择法和冒泡排序_对十个数进行大小排序java-程序员宅基地

文章浏览阅读4.1k次。一、选择法这是每一个数出来跟后面所有的进行比较。2.冒泡排序法,是两个相邻的进行对比。_对十个数进行大小排序java

物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)_网络调试助手连接阿里云连不上-程序员宅基地

文章浏览阅读2.9k次。物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)其实作者本意是使用4G模块来实现与阿里云物联网平台的连接过程,但是由于自己用的4G模块自身的限制,使得阿里云连接总是无法建立,已经联系客服返厂检修了,于是我在此使用网络调试助手来演示如何与阿里云物联网平台建立连接。一.准备工作1.MQTT协议说明文档(3.1.1版本)2.网络调试助手(可使用域名与服务器建立连接)PS:与阿里云建立连解释,最好使用域名来完成连接过程,而不是使用IP号。这里我跟阿里云的售后工程师咨询过,表示对应_网络调试助手连接阿里云连不上

<<<零基础C++速成>>>_无c语言基础c++期末速成-程序员宅基地

文章浏览阅读544次,点赞5次,收藏6次。运算符与表达式任何高级程序设计语言中,表达式都是最基本的组成部分,可以说C++中的大部分语句都是由表达式构成的。_无c语言基础c++期末速成