DSP EMIF 与FPGA 双口BRAM

为实现DSP与FPGA之间实现交换数据,通常采用DSP的EMIF外部存储器借口与FPGA 片内的BRAM,

BRAM 采用双口BRAM ,一个端口给DSP EMIF接口,另一个端口给 FPGA 片内逻辑。

FPGA 片内逻辑对BRAM 的读写在上一文中以实现,本文主要实现DSP 对 BRAM 的读写。

DSP 片内EMIF 接口信号如下图:

DSP EMIF 与FPGA 双口BRAM_第1张图片

信号说明:

————————————————共用信号——————————————————

ECLKIN             EMIF外部输入时钟

ED[63:0]            EMIF 数据总线

EA[19:0]             ENIF 地址总线

BA[1:0]               当EMIF 配置为8位或是16为时,低两位地址线

BE[7:0]              字节使能

CE2                  CE2空间片选使能 ,低有效

CE3                  CE3空间片选使能  ,低有效               

CE4                  CE4空间片选使能 ,低有效

CE5                  CE5空间片选使能 ,低有效

————————————————异步信号——————————————————

ARDY               异步Ready输入信号

R/W                  异步读写信号

AOE                  异步输出使能信号

AWE                 异步写选通信号

————————————————同步信号——————————————————

ECLKOUT      EMIF输出时钟

SOE                 同步输出使能

SADS/SRE      当寄存器CEnCFG中的R_ENABLE为1时,该信号为同步读使能信号

                          当寄存器CEnCFG中的R_ENABLE为0时,该信号为同步地址选通信号

SWE                 同步写使能信号

————————————————保持信号——————————————————

HOLD              总线保持请求信号

HOLDA            应答请求信号

BUSREQ         总线请求信号

 

 

对于TMS320C6455的EMIF 存储空间映射图如下:

DSP EMIF 与FPGA 双口BRAM_第2张图片

从上图可看出,每个存储空间有8M 的空间,都可以配置为同步和异步接口

由于这里FPGA内部的双口RAM 采用了同步模式,并将BRAM挂接在CE4空间下,所以EMIF 的CE4 配置为同步模式

采用同步模式,首先是时钟,将ECLKOUT 与双口RAM 的时钟引脚相连

使能信号与双口RAM 的时钟引脚相连

读写信号与双口RAM 读写相连,地址总线,数据总线。

由上面的分析,FPGA 与DSP 之间的连接如下图:

DSP EMIF 与FPGA 双口BRAM_第3张图片

其中,FPGA 对双口RAM 的读写上一篇中一实现,下面实现DSP对RAM 读写的实现

DSP 的配置,以实现EMIF 的CE4空间配置为同步模式,由于BRAM 挂接在CE4空间,所以要配置CE4CFG寄存器

先来看看该寄存器的说明,如下图:

DSP EMIF 与FPGA 双口BRAM_第4张图片

寄存器说明:

——————————————————————————————————

SSEL                  寄存器选择,1同步存储器,0异步存储器

RD_BE_EN      为1时在同步存储器读期间被驱动,为0时,在同步存储器读期间一直为高,

                            这个一般情况下都为0,也就是读取是每个字节都有效

CE_EXT             外部同步存储器片选,为1

R_ENABLE       同步存储器读使能模式,为1时选择ASRE,即同步读使能信号,为0时同步地址选通,所以这里为1

W_LTNCY         为0时,0时钟周期写延时

                            为1时,1时钟周期写延时

                            为2时,2时钟周期写延时

                            为3时,3时钟周期写延时,从上一篇文中FPGA 内部双口RAM 可知写延时为0,这里配置为0

R_LTNCY         为0时,0时钟周期读延时

                           为1时,1时钟周期读延时

                           为2时,2时钟周期读延时,从上一篇文中FPGA  内部双口RAM 可知读延时为2,这里配置为2

SBSIZE             为0时,数据位宽为8

                           为1时,数据位宽为16                          

                           为2时,数据位宽为32

                           为3时,数据位宽为64

——————————————————————————————————

如何实现上述寄存器的配置,在DSP下,通常采用CSL(片上支持库)

使用CSL配置EMIFA模块时,主要的步骤如下:

 1. 使能设备EMIFA模块
 2. 配置CEnCFG寄存器
 3. 初始化EMIFA模块
 4. 打开EMIFA模块
 5. 把2中配置的参数设置到打开的EMIFA模块中

所须包含的头文件:

#include 
#include 

CE4空间首地址的定义:

#define EMIFA_CE4_BASE_ADDR    (0xC0000000u)

存储器类型的定义:

#define EMIFA_MEMTYPE_ASYNC    0
#define EMIFA_MEMTYPE_SYNC     1

定义EMIF实例句柄:

CSL_EmifaHandle    hEmifa;

使能EMIF:

 CSL_FINST(((CSL_DevRegs*)CSL_DEV_REGS)->PERCFG1, DEV_PERCFG1_EMIFACTL, ENABLE);

定义同步存储器参数:

#define CSL_EMIFA_SYNCCFG_RLTNCY_PARAMETER  2//读延时2周期
#define CSL_EMIFA_SYNCCFG_SBSIZE_PARAMETER  2//32位数据总线
#define CSL_EMIFA_SYNCCFG_READEN_PARAMETER 1//同步读使能
定义CE4CFG寄存器参数宏:
#define CSL_EMIFA_SYNCCFG_PARAMETER {\
    (Uint8)CSL_EMIFA_SYNCCFG_READBYTEEN_DEFAULT, \
    (Uint8)CSL_EMIFA_SYNCCFG_CHIPENEXT_DEFAULT, \
    (Uint8)CSL_EMIFA_SYNCCFG_READEN_PARAMETER, \
    (Uint8)CSL_EMIFA_SYNCCFG_WLTNCY_DEFAULT, \
    (Uint8)CSL_EMIFA_SYNCCFG_RLTNCY_PARAMETER, \
    (Uint8)CSL_EMIFA_SYNCCFG_SBSIZE_PARAMETER \
}

相关变量定义:

    CSL_EmifaObj           emifaObj;
    CSL_Status             status;
    CSL_EmifaHwSetup       hwSetup;
    CSL_EmifaHandle        hEmifa;
    CSL_EmifaMemType       syncVal;
    CSL_EmifaSync          syncMem = CSL_EMIFA_SYNCCFG_PARAMETER;//将上述参数填入存储器变量 

配置CE4CFG寄存器:

    syncVal.ssel  = EMIFA_MEMTYPE_SYNC;
    syncVal.async  = NULL;
    syncVal.sync  = &syncMem;
    hwSetup.ceCfg[0] = NULL; //对应CE2  
    hwSetup.ceCfg[1] = NULL; //对应CE3
    hwSetup.ceCfg[2] = &syncVal; //对应CE4
    hwSetup.ceCfg[3] = NULL; //对应CE5

初始化EMIFA模块:

status = CSL_emifaInit(NULL);

打开EMIFA模块:

hEmifa = CSL_emifaOpen(&emifaObj,CSL_EMIFA,NULL,&status);

将配置的参数设置到打开的EMIFA模块中:

status = CSL_emifaHwSetup(hEmifa,&hwSetup);













 

 

 

 

 

 

 

你可能感兴趣的:(FPGA,DSP)