在小梅哥系列FPGA器件中,有许多开发板都配置有两片的DDR3,如ACX750、ACZ702、ACZ7015等。以ACX750开发板为例,使用的是两片型号为MT41K256M16 RE-125的DDR3存储器件。从型号我们可以推断出单片DDR拥有256M个存储颗粒,每个存储颗粒的位宽为16位。而两片DDR,则可以以并联的方式组成一个位宽为32位,存储深度为256M的存储器件。因此,在进行读写操作时,其内部数据存储类似于下图:
由于是并联的,所以两片DDR地址线共享,用户在进行写操作时,需要将数据的高16位和低16位分开存放。至于单片DDR的使用,我们可以理解为屏蔽掉了其中一个DDR存储器件,在地址不变的情况下,数据位宽变为16,用户写入数据时,直接写入单片DDR中即可。那么这是单片/双片DDR的工作原理,接下来我们再来看看使用时的差异:
对DDR3的读写我们一般通过mig软核或是ZYNQ PS端的DDR控制器实现,这里我们还是以ACX750为例,由于是纯FPGA,因此使用mig实现ddr读写。在进行配置时,差异主要体现在三处:
1.数据位宽,单片DDR数据位宽为16位,两片DDR数据位宽为32位
2.AXI总线位宽,注意这里说的是AXI总线位宽,并非我们说的DDR地址线,这里mig会自动帮我们计算,当然我们也可以手动验算
3.引脚分配,由于两片DDR的地址线共享,数据分开存放,所以两片DDR的dm(数据选通)、dqs(数据同步)、dq(数据总线)信号位宽为单片的两倍,而地址线(addr)位宽相同。
基于以上三点,在实际的代码设计中,就需要根据使用的是单片/双片DDR来调整dm、dqs、dq的信号位宽,以及与mig交互的AXI接口中,araddr、awaddr信号的位宽。
最后是仿真例化,ddr3的仿真模型可以通过mig的例程获取,仿真模型对应单片DDR,因此,在双片DDR的仿真中,我们需要例化两个ddr3_model,然后对dm(数据选通)、dqs(数据同步)、dq(数据总线)信号分别作控制,如下:
|