微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > PCIE的地址如何映射到DDR3中

PCIE的地址如何映射到DDR3中

时间:10-02 整理:3721RD 点击:
大家好,最近在研究如何把PCIE和DDR3连起来,产生了一些疑问,我的PCIE IP核产生的地址是11位的,而DDR3的地址是30位的。我想请问一下应该如何映射呢?

1, 最简单地,你把BAR地址设大点就行了,BAR地址设大只是地址空间变大,在系统上挂载时有这么大的空间让你去访问,并不实质上增加什么资源。
2, 如果你的设置无法扩大,可以采用地址复用的方式,比如访问超过4G的DDR,但是你的地址只有32bit,那可以先发一个前多少bit的数值过来,保存在寄存器里,然后再发后面的地址段。如果是同一个前面的基地址,就只用后面的地址改变就行了,如果换了基地址,得先放前面的基地址值过来。在变化不是很频繁的情况下,这样的效率并不低。


感谢您的回复!



   还有个问题想请教你,我用ip核自带的demo仿真,发现EP_RX收到的TLP头标与文档中的标准结构不同,   例如数据是wr_data  <= #TCQ m_axis_rx_tdata[63:32];
   地址是wr_addr <= #TCQ {region_select[1:0], m_axis_rx_tdata[10:2]};
   我又查看了RP_TX中的TASK,发现其TLP头标是按照文档中的标准结构来的,我觉得十分疑惑,到底是怎么一回事呢?

一个完整的package是由几个DW组成的,DW是32 bit你应该知道,如果总线上传来的是64位,是把两个32bit的拼在一起,先读低32位,再读高32位,如此而已。



   谢谢你的回答!我刚才把EP_RX代码翻出来看了一下,上面有注释说这个TLP头标是从右端开始的,所以会和RP_TX发送的刚好相反。并且我还发现EP_RX解析头标的时候,地址是仅截取了发送过来的32位地址的第2到第10位,并且在高位增加2位片选位组成的。如果我想要将其与DDR3的30位地址空间映射,可以直接修改EP_RX,将发送来的32位地址截取30位,这样就刚刚好了。不知道这个想法是否正确?

做个DMA控制器就不用映射了,收到的数据直接往FIFO里写就行了 映射累不累

PCIe对你来说,其实是个点对点的东西,你这边怎么回应它,是你自己安排的

用DMA吧

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top