pcie 学习

什么是BAR寄存器
BAR寄存器是基地址寄存器。
BAR寄存器的作用:
通过BAR寄存器,我们首先知道这个基址对应的空间属性,然后给这段空间分配一个基址(这个基址只是用来路由寻址用的,不能和存储器空间的地址搞混,很多软件实现上会把两个地址设置成一样,但是本质上没有任何关系,只是TLP寻址的时候用的!)。这样的话,TLP就能根据地址被路由到对应设备的BAR空间中去。比如说现在有一个mem read request,如果路由地址(地址信息包含在TLP中)是0x71000000,而有一个设备func0的mem空间范围是0x70000000~0x80000000,那么这个TLP就会被这个func处理。从func0的0x71000000对应的地址读取相应数据。

设备在系统的PCI地址空间里申请一段来用,所申请的空间基址和大小保存在BAR寄存器里。
BAR里的只是PCI域的地址空间,需要映射到IO地址空间里或者内存地址空间里之后软件才能使用。映射到IO空间的话,用IO读写指令和函数去访问设备;映射到内存空间的话,首先得到的是物理地址,映射到虚拟地址后就可以像用指针那样访问。

 1,BAR寄存器的数据格式,BAR寄存器表示的设备存储类型有memory space BAR和IO space BAR两种,

          对于memory space BAR,数组格式如下面所示

          31-----------------------------------4 |        3           |     2-1     |       0

          16-Byte aligned Base Adress   prefetchable    Type   always 0

--bit0 为 0表示 memory,为 1 表示  IO

--bit2-1  为10 表示 64 bit decode,为00 表示 32 bit decode

--bit3 为1 表示 prefetchable    ,为0 表示 non-prefetchable     

           对于IO space BAR,数组格式如下所示

           31-----------------------------------2 |      1      |     0

           4-Byte Aligned Base Address    reserve   always 0

           对于memory space BAR的16-Byte aligned Base Address 这里的Base Address代表的是16个byte数据的地址

          对于IO space BAR的4-Byte aligned Base Address这里的BaseAddress代表的是4个byte数据的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值