Part Number:TMS320C6748
EMIFA按照SDRAM的接法接了FPGA,目前是想让FPGA模仿SDRAM的行为,将其用作同步外储
在DSP程序中对EMIFA接口的设置如下:
(第一个设置的是Self refresh mode,按照TRM文档18.3.2.1.1的说明,应先ENTER,再配置PLL,最后EXIT,由于我在GEL配置了PLL,把EMIFA的时钟配置为25M,所以直接EXIT. 中间三个关于我认为对时序的影响不大,所以就随意配了。)
我的访问方法是,定义一个数组emif_buf,通过链接脚本,配置到EMIFACS0的地址空间中,即 .far:.common:emif_buf > EMIFACS0,编译完成后在Memory Allocation的对应信息如下图所示。在主程序里,直接对这个数组进行操作,比如emif_buf[i] = (short)(i)
在FPGA端,采集到了一些信号,但我不明白应该如何处理。举个例子:
主程序中,对数组循环赋值:
在DEBUG模式下,expression窗口显示如下:
此窗口中显示的地址和数组下标是两倍的关系,我觉得这里能够对上RAM按字节存储,每单个地址对应一个字节,short是两个字节
FPGA采到的信号如下:command是对照TRM文档Table18-5设置的,11对应REFR,12对应PRE,13对应ACTV,14对应WRT,(15对应READ,下图没有READ命令),16对应BT,17对应NOP。clkin是时钟线,dqmnin是DQMn[0],addrin是地址总线,datain是数据总线,都是DSP引脚的信号
上图一共显示了两个burst
第一个13(ACTV)下面的0x005是row address,14(WRT)下面的0x144是column address,然后在16(BT)之前有两个数据,分别是WRT下的0x5544和NOP下的0x0000,分别对应的DQMn[0]是0和1
第二个13(ACTV)下面的0x005是row address,14(WRT)下面的0x144是column address,然后在16(BT)之前有两个数据,分别是WRT下的0x8000和NOP下的0x5545,分别对应的DQMn[0]是1和0
问题:
1:PIN脚的信号是否即TRM文档18.2.4.11提到的逻辑地址,此逻辑地址是否与物理地址一一对应?
如,这里设置IBANK=0, PAGESIZE=2, 对照Table18-13,由上图信息可以得到4个逻辑地址,依次是0x2A88, 0x2A89, 0x2A89, 0x2A88。 那么这四个逻辑地址能否依次对应上EMIFACS0的物理地址0x40002A88,0x40002A89,0x40002A89,0x40002A88?
2:逻辑地址和数据是如何对应的?DQMn[0]为1时,写入高字节?为0时写入低字节?
如,第一个burst,先在地址0x2A88写入WRT下0x5544的低字节0x44,再在地址0x2A89写入NOP下的0x0000的高字节0x0?第二个brust,先在地址0x2A89写入WRT下0x8000的高字节0x80,再在地址0x2A88写入NOP下的0x5545的低字节0x45?可是这样的解释说明往同一地址写入了两个不同数据。
3:emif_buf[i]这种直接数组访问有没有问题?而且这样是访问单个数据,此时看时序图,在burst进行两轮之后就被BT命令截断了,根据文档,C6748的burst size最大为8,如何访问,burst长度会为8?
Nancy Wang:
我已将你的帖子转给相关专家,请等待回复。