有关TI DSP的两个问题:地址总线不从零开始问题及寻址范围问题

示例芯片:TMS320C6416

EMIF,即ExternalMemoryInterFace ,中文译为外部存储器接口。

EMIF可谓是困扰了我很久的一个接口。当然,相比于SPI,UART,I2C等总线协议来说,EMIF相对来说复杂一些……

========================两个问题============================

切不说EMIF怎么去用,单就表面的两个问题就能让人思考好久,但仍不得其解:

1)6416中共有EMIFA和EMIFB两个EMIF接口,但有一个问题,为什么EMIFA的地址总线是从AEA3到AEA22共20位,EMIFB的地址总线是从BEA1到BEA20共20位,按理来说这种总线都是从0开始的呀,这到底是怎么回事?

2)TI文档《TMS320C6414, TMS320C6415, TMS320C6416 FIXED-POINT DIGITAL SIGNAL PROCESSORS(SPRS146N)》中的表3部分如下所示:

在表3中可以看到,对于EMIFB的每个CE片选空间,共有64MB的寻址空间;对于EMIFA的每个CE片选空间,共有256MB的寻址空间。

但是,请注意问题1中的提到了无论对于EMIFA还是EMIFB均只有20根地址线,我们可以计算一下,2^20=1M的寻址空间,这64MB和256MB到底是指什么呢?

对于高手来说当然弄懂也许是小问题,但对于初次接触这类问题的初学者来说,也许琢磨很久也弄不明白,我就是后者!

========================问题的答案============================

为了解释以下问题,首先明确一个单位度量:字节=8bit,半字=16bit,字=32bit,双字=64bit

解答问题1:

我们再次来理一理EMIF接口:

EMIFA有AEA3~AEA22共20根地址线和AED0~AED63共64根数据线,也就是说数据总结是“双字”的,再注意一下表3中有关寻址范围的单位是BYTES,一个双字等于八个字节,而如果寻址八个字节则需要3位地址线。嗯,这就对了,EMIFA的地址总线无低三位,其实是因为它的数据总线是64位的缘故,即数据总线对数据的操作是以八个字节为单位的,所以根本没必要再包含低三位的地址线了……

同理,对于EMIFB,数据总线为16位,即数据总线对数据的操作是以半字为单位的,所以根本没必要包含最低位地址线了……

当然,虽然EMIFA有64位数据线,我们可以选择使用EMIFA的低32位,或者是低16位,或者是低8位;EMIFB有16位数据线,我们可以只选择使用它的低八位;

以EMIFB使用16位数据总线为例,我们要在DSP中使用EMIFB时,访问的地址是偶数,比如0,2,4等等,再具体点说吧,使用EMIFB的CE2片选的地址范围,我们可以这样在CCS中编程使用EMIFB接口:

*(short int *)(0x68000000)= 0x11;

(short int *)(0x68000000)是将0x68000000强制类型转换成short int型的指针类型,即得到指向地址0x68000000的指针,而地址0x68000000中存是一个16bit的数据(其实是和0x68000001合在一起了吧);

*(short int *)(0x68000000)则是取出地址0x68000000中存储的值;

那么这时EMIFB的地址总线上是什么情况呢?访问地址0,当然20位地址总线都是0了;但若是*(short int *)(0x68000002)呢?注意,这时地址总线是1而不是2,因为地址总线是从BEA1开始的,而不是BEA0!

这时自然就出现了第2个问题,下面我们来解答。

解答问题2:

首先看一个TI官方文档:《TMS320C6000 DSP External Memory Interface(EMIF) Reference Guide【SPRU266E】》,这个文档一开始就讲了很多存储器类型,本来是讲EMIF接口的,讲存储器干吗?

下面看表4-3

注意表中的第一列是memory type,即存储器类型,共有三种,异步静态RAM(ASRAM),可编程同步存储器,同步动态RAM(SDRAM)

然后再注意第三列是maximum addressable bytes per CE space,即每CE片选空间最大可寻址字节数,其中对于前两种类型的存储器都是对应相同的,但对于SDRAM来说则变为了前面两者的32倍!

再看表4-3,对于memory witdth为16和64的请况,我们可以很容易作出如下计算:

20根地址线,寻址范围为2^20=1M;对于EMIFA来说,他的数据总线为双字(8bytes),则它的寻址字节数为1M*8bytes=8MBytes;对于EMIFB来说,它的数据总线为半字(2bytes),则它的寻址范围为1M*2bytes=2MBytes。

这与表中是吻合的,但是对于64位数据总线中的256MB的寻址范转和16位数据总线中的64MB的寻址范围是怎么回事呢?

在此不过多说了,只是提一句吧,对于SDRAM来说,它是分行地址和列地址的,即对其进行访问时分行和列之分,如果行地址有10位,列地址有16位,那么相当于寻址范围为2^10 * 2^16 = 2^26 = 64M。

看到这个计算明白了吧……

我们可以得出如下结论:

EMIFA的每个CE片选空间相对于SDRAM来说寻址范围256MB,而相对于其它类型的memory为8MB;EMIFB的每个CE片选空间相对于SDRAM来说寻址范围64MB,而相对于其它类型的memory为2MB。

这里注意一下单位,如果仅就地址总线的寻址范围来说,它的范围就是多少个地址,只有配以数据总线后才能说它的寻址范围为多少字节;比如说仅就20位的地址总线来说它的寻址范围就是1M=2^20个,但如果配上8位的数据总线则寻址范围为1MB,如果是16位的数据总线则寻址范围为2MB,64位数据总线则是8MB……

注:我也是琢磨了好久才琢磨出来了这么一个结果,文中内容都是一些个人理解,只供参考,不作为答案!

TI DSP的EMIF接口的地址总线问题(实际测试)

题目:TI DSP的EMIF接口的地址总线问题(实际测试)

在此博文中,具体谈到了当DSP内部访问EMIF内的某一地址时,地址总线的的数值问题,当时的结果只是从理论上得到的,也没有验证,今天验证了一下,分享出来……

平台:DSP(TMS320C6416T)+FPGA

其中6416的EMIFA与FPGA相连。

试验中,使用EMIFA CE1空间,并将其设置为16位异步接口。在DSP中给某一CE1空间中的地址赋值,即执行写操作;FPGA这边,直接用ChipScope观察地址总线的值。

共试验了几个值:

写地址(16进制)              地址总线值(16进制)

0x90000000+2*0x1                  0x1

0x90000000+2*0x2                   0x2

0x90000000+2*0x2+1              0x2

0x90100000+2*0x2                 0x80002

0x90000000+2*0xFFFFF         0xFFFFF

0x90000000+2*0xFFFFF+2    0x0

由以上的值基本可以得出访问的地址与地址总线值之间的关系:

设访问的地址为ADDR,则址值总线上的值为floor[(ADDR-0x90000000)/2],floor为向下取整。由于此时为异步接口,对于20位的址址总线来说,地址变化最大为1M的范围,即从0~0xFFFFF,因此实际值为floor[(ADDR-0x90000000)/2]%0x100000,%表示取模,0x100000即为1M地址空间。

那么当把接口设置为32位异步接口呢?64位异步接口呢?

针对这个问题,我也试了一下,基本结论是这样的:

设接口位宽为Width,CE空间起始地址为AddrInit,地址最大范围为0~AddrMax-1,访问的地址为ADDR,地址总线上的值为ADDRBUS,则有如下关系:

ADDRBUS=floor[(ADDR-AddrInit)/(Width/8)]%AddrMax

再贴一个清楚一点的公式,呵呵,和上面的完全一样,这样是不是看起来更直接:

例如:

接口位宽Width=16

CE空间起始地址AddrInit=0x90000000

地址最大范围为AddrMax=1M=2^20=0x100000

访问地址ADDR=0x90000005(即0x9000 0000+2*0x2+1  )

ADDRBUS=floor[(0x90000005-0x9000 0000)/(16/8)]%0x100000=2

这与前面的结果是一致的!

补充一个时序问题:

1)DSP写,即FPGA读,在FPGA中检测AWE下降沿且CE为低时,读数据总线即可;

2)DSP读,即FPGA写,在FPGA中当AOE和CE均为低时,写数据总线即可。

到此,搞定DSP与FPGA通过EMIF接口通信问题!

参考文献:

1)《TMS320C6414, TMS320C6415, TMS320C6416 FIXED-POINT DIGITAL SIGNAL PROCESSORS(SPRS146N)》

2)《TMS320C6000 DSP External Memory Interface(EMIF) Reference Guide(SPRU266E)》

3)http://www.hellodsp.com/bbs/forum.php?mod=viewthread&tid=990&highlight=EMIF

4)http://www.hellodsp.com/bbs/forum.php?mod=viewthread&tid=22775&highlight=EMIF

EMIF的两个接口EMIFA和EMIFB分析与比较相关推荐

  1. 理解java中的两种接口

    在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...

  2. 使用 spring 的 IOC 解决程序耦合——获取spring的Ioc核心容器,并根据id获取对象、核心容器的两个接口(ApplicationContext、BeanFactory)引发出的问题

    IOC概念和spring中的IOC 明确 ioc 的作用: 削减计算机程序的耦合(解除我们代码中的依赖关系). 使用 spring 的 IOC 解决程序耦合 获取spring的Ioc核心容器,并根据i ...

  3. java电脑类的接口_java 一个类实现两个接口的案例

    直接用英文逗号分隔就可以了,比如:? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 inerface IHello { String sayHello ...

  4. 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样, 那在成绩排序的基础上按照年龄由小到大排序。 姓名(String

    代码 import java.util.*;/*3.分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序.姓名 ...

  5. Spring中IoC两种接口和两种依赖注入方式的比较

    spring是一个开源框架,是为了解决企业应用程序开发的复杂性而创建的,为J2EE应用程序开发提供集成的框架.简单来说,spring是一个轻量级的控制反转IOC和面向切面AOP的容器框架.spring ...

  6. 笔记本无线网卡天线接线柱掉了(AUX和MAIN两个接口)

    在我的不谢努力(作死)下,终于接线柱被我搞掉了,就和下面这样 查了下1号和2号接线柱是干啥的,大致说的就是: main是无线网卡天线主要接口,aux是辅助接口. 平时只有main口起作用,只有当mai ...

  7. Django DRF 两种接口安全机制及其配置

    Django DRF 两种接口安全机制及其配置 接口安全机制,用于设置和管理用户调用接口时的权限问题.此处介绍最常用的两种接口安全机制及其配置. 1 使用之前 先生成接口文档 便于测试 1.1 安装依 ...

  8. mipi两线接口_MIPI CSI-2 接口标准

    现如今处理器到摄像机传感器(processor-to-camera sensor)间的接口带宽,在更高分辨率图像,更深颜色深度和更快的帧率推动下,已经到达了它们的极限.但对于设计人员来说,简单的增加带 ...

  9. C#,两个接口相同名称函数调用时的区分

    在写PPT插件时,遇到了一个问题,如下: ...... public partial class ThisAddIn     {         private Microsoft.Office.In ...

最新文章

  1. 算法------零钱兑换(Java版本)
  2. USTC服务器使用笔记
  3. .net core mvc初级教程(六)
  4. python svn库_python实现svn新老库迁移
  5. java 链接重排序_JAVA中JVM的重排序详细介绍
  6. 面试基础(1)——面向对象/get,post的区别
  7. 快速了解layui中layer的使用
  8. ABBYY Lingvo European for Mac(万能词典)
  9. 亲测可用——PostgresSQL安装教程
  10. redis中hget命令
  11. linux格式化u盘为ntfs格式,Linux上格式化U盘为NTFS格式
  12. 移动安全 第六天-Iot安全
  13. 浅谈对象的深拷贝和浅拷贝
  14. JavaScript实例-文字特效1-文字滚动
  15. 错误: Failed to install 'unknown package' from GitHub: schannel: failed to receive handshake, SSL/TL
  16. 科创、创业板块崛起,天弘科创创业50指数基金缘何备受热捧?
  17. [BZOJ]1933: [Shoi2007]Bookcase 书柜的尺寸 DP
  18. react 生命挂钩_秋田+ React挂钩=耸人听闻的国家管理食谱
  19. web前端期末大作业 基于HTML+CSS+JavaScript学生宿舍管理系统
  20. Android Studio无法下载

热门文章

  1. 从冲撞避让到碾压,竞争模式发生了改变
  2. 2021年春季学期-信号与系统-第五次作业参考答案-第四小题
  3. 微信小程序图标不支持html,微信小程序实现自定义加载图标功能
  4. linux c语言 malloc动态分配指针,C语言malloc函数为一维,二维,三维数组分配空间...
  5. mysql 修复_mysql修复表的三个方法
  6. eltable刷新整个表格方法_Word表格函数计算怎么做?都在这篇!
  7. jsp中如何运行java_从上帝视角看Java如何运行
  8. 清除浏览器缓存之后为什么还是显示旧的html页面_Web缓存知识
  9. 非线性调频 matlab,非线性调频信号
  10. java实现单词替换_java – 正则表达式将空格和单词替换为单词的toFirstUpper