关于PCI EXPRESS的一个问题之基址寄存器
在学习微机原理的时候倒是学过这个东西,但是在这里是怎么一回事。在配置这个ip核的时候,卡在这百思不得其解,很伤心。
我网上搜了搜,实在是难以理解,说的太玄了,一大堆术语,希望有大神能给小弟解惑,最好是用容易理解的话来说,否则,小弟愚笨可能无法理解。
网上都是千篇一律的说法,小弟摘录如下:
PCI设备中,除了配置空间外,还有两个物理空间:内存空间和I/O空间。为了访问这两个地址空间,就必须使用基址寄存器。头标类型0中涉及3种基址寄存器:内存空间基址寄存器、I/O空间基址寄存器和扩展ROM基址寄存器。
这里头,我没有一句话能理解,我总是试图把抽象的说法具体化,但是此时脑袋里一团浆糊。
配置空间,老实说也不是太明白,往具体里想根本不知道是什么东西。假如PCI设备是FPGA,这里的配置空间指的是什么?可以理解成是ip核进行配置用到的寄存器吗?
内存空间和I/O空间,看着没问题,其实根本不懂。现在都是高速串行数据,哪里来的I/O空间,一个通道就用到五根线,哪来的I/O空间。内存空间,FPGA里面有内存吗?
不说了吧,要下泪了。 ------------------老舍
帖子要沉了,大家懂得话给我讲一下吧。实在是真真正正的知识。
帖子要沉了,我觉得还可以抢救一下。
对于一个32bit地址的CPU来说,能够访问的地址空间从0x00000000到0xFFFFFFFF。
每个PCIe设备在这个范围内要占用几块,系统启动的时候,PCIe设备向系统申请,系统根据存储器的使用情况,给这几块范围分配起始地址,BAR中间存放的就是这个。
配置空间就是配置pcie的一些寄存器,比如厂家的id号 pice包的最大长度等等
内存和io空间两者类似,是给用户自定义的,在fpga上相当于ram,pc往相应的bar的地址里写数据,fpga就能从相应的ram地址里读到
两位说的真好。虽然没有完全理解,但是确实解决了我很多的疑问,不再感觉是塌方式的困惑。
再次感谢。
这个论坛真不错,其他的论坛我都不怎么上,每次厚着脸皮多问问,总是有热心的大神帮忙答疑解惑。
