0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文详解PCIe内存空间到AXI内存空间的转换

Hx 作者:工程师陈翠 2018-07-04 02:02 次阅读

UltraScale系列芯片包含PCIe的Gen3 Integrated Block IP核在内的多种不同功能的IP核都会有一页设置为PCIe:BARs,设置IP核的Base address register 的相关参数,如图1所示:

一文详解PCIe内存空间到AXI内存空间的转换

图1 PCIe:BARs 配置图

一般来说在FPGA中使用PCIe核都是Endpoint mode,我们的PC主机端是Rootpoint mode,一般会有一个Root Complex的混合管理器,来管理接入PCIe总线的端点设备。对于PC机来说,当PC机识别该PCIe设备后便会识别到BAR n相对应的基地址和地址空间(不过该基地址是PC机的Root Complex主动分配的,还是PCIe设备内部固定的还有疑问)。设别基本配置信息后,PC机便可以对PCIe的内存空间进行读写操作了。

而PCIe IP核本身能够引出AXI总线接口,该AXI接口是memory map 型的,所以就肯定存在自己的地址空间,本文所提的PCIe to AXI Translation便是PCIe的地址空间到AXI的地址空间的转换。

这里就图1中的BAR0来说明下PCIe to AXI Translation的转换过程。BAR0的配置为:64bit数据位宽、32kilobytes地址范围、PCIe to AXI Translation为0x0000000012340000。此时的PCIe IP核的BAR0是拓展连接到外部的AXI总线的,该总线连接到另外一个DDR4 MIG IP核,如图2所示。图中重点标注的AXI总线便是PCIe核引出的AXI总线。

一文详解PCIe内存空间到AXI内存空间的转换

图2 PCIe核拓展AXI接口

假设PC机设别到的PCIe BAR0的基地址为0x0000000000000000,在FPGA内部DDR4的AXI基地址为0x0000000012340000。现在PC机想要往FPGA内部的DDR4地址空间的0x000000001234000F地址写入数据,那么PC机应该对PICe内存空间的0x000000000000000F写入数据,然后由PCIe to AXI Translation的关系,便会把0x000000000000000F转换到0x000000001234000F上实现对AXI总线的操作,进而实现对DDR4的写入操作。图3可以看出具体的转换操作。

一文详解PCIe内存空间到AXI内存空间的转换

图3 PCIe to AXI Translation 转换图

既然有PCIe to AXI Translation,那相应的也有AXI to PCIe Translation了,图4是AXI to PCIe Translation的转换图,不过这种操作应用不多,原理也跟PCIe to AXI Translation差不多,这就不再赘述了。

一文详解PCIe内存空间到AXI内存空间的转换

图4 AXI to PCIe Translation 转换图

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCIe
    +关注

    关注

    13

    文章

    1083

    浏览量

    80801
  • AXI
    AXI
    +关注

    关注

    1

    文章

    126

    浏览量

    16285
收藏 人收藏

    评论

    相关推荐

    请教高手,安卓智能手机的内存空间不够问题

    各位高手:我用的是安卓手机,OS是4.1的,手机内存显示是1G,SD卡显示的是16G,可是我不管我默认的内存是SD卡还是ROM,每次年手机内存只有用了不到300M,然后再下软件安装就显示,内存
    发表于 05-05 14:46

    Linux内存点滴 用户进程内存空间

    文件VM分配与释放“内存总是被进程占用”,这句话换过来可以这么理解:进程总是需要内存。当fork()或者exec()个进程的时候,系统内核就会分配定量的VM给进程,作为进程的
    发表于 08-14 16:23

    请问66ak2h内存空间申请如何实现

    请问,在66ak2h的应用中,需要动态申请比较多的16kbyte的内存空间共需要100MB左右的缓冲空间),如何实现。准备采用sys/bios运行。或者有实现方法,裸代码也可以!
    发表于 08-06 07:27

    在MPFS2件之前预留内存空间的最佳方法是什么?

    的协调:它运行。对这个地址进行偏移,在MPFS2数据与Microchip TCP/IP协议栈之间的内存组织兼容之前保留内存空间。介绍这种偏移的最佳方法是什么?…我想我必须改变MPSfSUnter
    发表于 11-20 15:21

    SigmaStudio Delay模块把MAX设置为1500时占用了6000的data32的内存空间

    在使用SigmaStudio 3.9的DELAY模块时,当把MAX设置为1500时,合理应该就是占用1500的data32 ram空间,但现在在编译输出结果中却看到是占用了6000的data32 的内存空间,为什么会有这样的问题呢?应该如何解决?谢谢!取样率设置为48K。
    发表于 03-06 06:13

    DM8127使用SWOSD_TI_alloc()分配内存空间怎么加大?

    DM8127使用SWOSD_TI_alloc()分配内存空间不够,请问在什么文件里怎样修改加大内存空间???
    发表于 04-16 10:56

    如何与ctypes库创建的数组共享内存空间

    。那么,如何使用ctypes库定义个与numpy共享内存空间的数组变量呢?仍以上面的例子,定义个uint8类型的数组b,与a数组共享内存区域,可使用下面的代码:b = (c_uin
    发表于 01-15 16:01

    stm32 使用u*** host库占用内存空间很大!!!

    如何解决stm32 使用u*** host库占用内存空间很大的问题呢???
    发表于 01-22 16:44

    怎样在Linux内核中预留一部分内存空间作特殊用途呢

    有时我们需要在 Linux 内核中预留一部分内存空间用作特殊用途(给安全模块使用,给其它处理器使用,或是给特定的驱动程序使用等),在 Device Tree 中有提供两种方法对预留内存进行配置
    发表于 12-29 07:16

    RTThread的动态内存空间该如何去分配呢

    关于rtt的动态内存空间分配,想问下以下我的几点理解是对的吗1、我看RTT NANO和MASTER版本的动态内存分配好像不太样,我的理解是MASTER版本的动态
    发表于 08-31 14:34

    在stm32f429上的轻量级算法运行时所用的内存空间要怎么得到呢?

    在stm32f429上跑了几个轻量级算法,相比较下他们的性能,所以向研究下算法运行时占据的内存空间,这个内存空间要怎么得到呢
    发表于 03-14 10:38

    MCU中怎么申请段固定地址的内存空间

    MCU中怎么申请段固定地址的内存空间
    发表于 10-09 07:35

    freertos怎么释放任务的内存空间

    freertos怎么释放任务的内存空间
    发表于 10-12 07:20

    C51程序中两种对内存空间地址写数据的方法说明

    本文档的主要内容详细介绍的是C51中两种对内存空间地址写数据的方法说明。
    发表于 08-01 17:34 1次下载
    C51程序中两种对<b class='flag-5'>内存空间</b>地址写数据的方法说明

    如何让你的手机省出内存空间

    大家都知道,手机使用久了就会变得很卡顿,除了手机本身“老化”之外,还有一个重要的原因就是内存堆积的太多了。事实上占用手机内存的无非就是照片、视频、微信等等,如果好好处理一下这几个方面的问题,相信你的手机一定能省出不少内存空间,下
    的头像 发表于 02-13 14:07 3789次阅读