目录
XDMA引荐
XDMA是Xilinx系列FPGA中官方自带的PCIE“高级”IP,所谓的“高级”指的就是他的操作层面比较“高级”,其操作层面主要在“应用层”,简单来说,在FPGA例化配置完以后基本上就不需要FPGA在逻辑层面上进行过多的操作了,FPGA只需要对HOST主机进行中断触发操作即可,所有的DMA操作完全由HOST主机通过PCIE配置XDMA的寄存器来实现。
以上就是对XDMA调试的总结,节目到此结束了……如果你对PCIE体系了解的话……当然如果你不了解,听了上面的话还是云里雾里,或者你还想继续了解一下HOST主机是怎样去配置XDMA,或者你是HOST驱动编写者的话,后面可以继续看一看……
PCIE介绍
首先如果你对PCIE这个接口体系不算了解的话,我建议你可以看看SSDfans里面老男孩关于PCIE的知识体系讲解,或者你更有耐心的话也可以研习一下PCIE的协议手册……或者你可以简单看看下面我这两段话有个大体的了解。
历史渊源
PCIE呢源自于PCI总线,全称自己百度去……PCIE与PCI的区别,字面就很明显就是PCI EXpress,就是PCI特快专线的意思,哈哈哈。通过什么方式实现呢?其实就是物理层降维打击PCI是并行总线,PCIE是高速串行数据总线,PCI一般是几十兆或者一百多兆的数据速率,当然32位的话总的算下来,最高也有有两三个G的bps,但是PCIE1x的最低速率也有2.5G,所以很快的。
PCIE的高层次操作逻辑其实是对PCI的功能性扩容得来的。其拓扑结构呢就是一个root节点挂若干个endpoint,root节点一般就是对应我们pci上的host端,endpoint就是我们的板卡或者设备端,当然FPGA里的pcie也可以配置为root模式作为host,将另外的设备挂载在上面。
通信拓扑结构
一般的PCIE通信模式就是host需要数据或者host被通知数据到达时,host通过配置endpoint端DMA寄存器,然后DMA通过PCIE将数据由endpoint端搬运至HOST端的过程,当host需要发送数据给endpoint时,则通过配置endpiont端的DMA寄存器将数据通过PCIE由host端搬运至endpoint端,这里你可能有个疑问为什么host不自己搬呢?当然他是可以自己搬得host可以用cpu去读写endpoint端,自己也有DMA辅助读写endpoint端,但是当有多个endpoint设备的时候可能就忙不过来了,既然每个endpoint都有自己的DAM,反正闲着也是闲着,不剥削白不剥削……
地址映射与管理
好了了解完上面的操作逻辑后,你又该问了,DMA怎么知道从哪里搬到哪里呢?这个就要讲PCIE的地址空间管理了,PCIE通过BAR空间映射将设备端的地址空间映射到主机里的一段地址空间,这样在主机端直接操作对应的BAR空间就是在操作endpoint里面的地址空间了,而这种映射关系就需要主机在驱动加载的过程中,去配置对应endpoint的BAR空间寄存器去分配地址空间和长度。
加载与初始化过程
好了说了这么多,也没有个图,接下来咱们捋一下:从上电开始说起,我们的电脑就是HOST端,我们的板卡就是EP端;上电后双方各自加载各自的软件,EP加载完后等着电脑(电脑比较慢,也需要他慢),HOST在上电后先初始化自己的PCIE设备,然后扫描PCIE总线上的EP设备(这一部分在HOST驱动完成),如果EP在物理层上与HOST端LINK上了,那HOST就会给EP分一个设备号,并且获取EP的PCIE的header寄存器(一般存储了PCIE设备的ID,和其他的能力属性),将这些信息暂存。当系统启动末期在加载设备驱动的时候PCIE总线驱动会匹配驱动程序的ID与上面暂存的ID,如果匹配成功,加载设备的驱动程序,在设备驱动里完成EP的BAR空间分配,中断分配等工作。那这个通信链路就算搭建完成了……
解释一下上面的两个驱动一个是HOST端驱动,指的是运行在HOST主机上,去配置HOST端PCIE设备的驱动,然后EP设备驱动,指的的是也运行在HOST主机上但是通过PCIE去配置EP设备的驱动,两者是不一样的,我们通常所做的一般都是EP设备驱动,HOST端驱动一般系统里面已经集成了……
总结
好了,说了这么多,你听明白了么?听不明白的欢迎在下方讨论,下一篇,咱们研究一下XDMA里面的对应着本篇里边的那些设置……
今天的文章fpga pci_pciex4能插pciex1吗[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/79073.html