fpga与dsp的emif接口通信

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

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

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

信号说明:

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

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 存储空间映射图如下:

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

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

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

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

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

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

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

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

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

寄存器说明:

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

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模块中

所须包含的头文件:


   
   
  1. #include <csl_emifa.h>
  2. #include <cslr_dev.h>

CE4空间首地址的定义:

#define EMIFA_CE4_BASE_ADDR    (0xC0000000u)
   
   

存储器类型的定义:


   
   
  1. #define EMIFA_MEMTYPE_ASYNC 0
  2. #define EMIFA_MEMTYPE_SYNC 1

定义EMIF实例句柄:

CSL_EmifaHandle    hEmifa;
   
   

使能EMIF:

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

定义同步存储器参数:


   
   
  1. #define CSL_EMIFA_SYNCCFG_RLTNCY_PARAMETER 2//读延时2周期
  2. #define CSL_EMIFA_SYNCCFG_SBSIZE_PARAMETER 2//32位数据总线
  3. #define CSL_EMIFA_SYNCCFG_READEN_PARAMETER 1//同步读使能
  4. 定义CE4CFG寄存器参数宏:

   
   
  1. #define CSL_EMIFA_SYNCCFG_PARAMETER {\
  2.     (Uint8)CSL_EMIFA_SYNCCFG_READBYTEEN_DEFAULT, \
  3.     (Uint8)CSL_EMIFA_SYNCCFG_CHIPENEXT_DEFAULT, \
  4.     (Uint8)CSL_EMIFA_SYNCCFG_READEN_PARAMETER, \
  5.     (Uint8)CSL_EMIFA_SYNCCFG_WLTNCY_DEFAULT, \
  6.     (Uint8)CSL_EMIFA_SYNCCFG_RLTNCY_PARAMETER, \
  7.     (Uint8)CSL_EMIFA_SYNCCFG_SBSIZE_PARAMETER \
  8. }

相关变量定义:


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

配置CE4CFG寄存器:


   
   
  1. syncVal.ssel = EMIFA_MEMTYPE_SYNC;
  2. syncVal.async = NULL;
  3. syncVal.sync = &syncMem;

   
   
  1. hwSetup.ceCfg[ 0] = NULL; //对应CE2
  2. hwSetup.ceCfg[ 1] = NULL; //对应CE3
  3. hwSetup.ceCfg[ 2] = &syncVal; //对应CE4
  4. 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);

   
   













 

 

 

 

 

 

 

  • 4
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值