有关TI_DSP的EMIF接口的两个问题

上传人:豆浆 文档编号:31158445 上传时间:2018-02-05 格式:DOCX 页数:7 大小:186.25KB
返回 下载 相关 举报
有关TI_DSP的EMIF接口的两个问题_第1页
第1页 / 共7页
有关TI_DSP的EMIF接口的两个问题_第2页
第2页 / 共7页
有关TI_DSP的EMIF接口的两个问题_第3页
第3页 / 共7页
有关TI_DSP的EMIF接口的两个问题_第4页
第4页 / 共7页
有关TI_DSP的EMIF接口的两个问题_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《有关TI_DSP的EMIF接口的两个问题》由会员分享,可在线阅读,更多相关《有关TI_DSP的EMIF接口的两个问题(7页珍藏版)》请在金锄头文库上搜索。

1、 有关 TI DSP 的 EMIF 接口的两个问题: 地址总线不从零开始问题及寻址范围问题 作者: JBB0523(彬彬有礼)示例芯片:TMS320C6416EMIF,即 ExternalMemoryInterFace ,中文译为外部存储器接口。EMIF 可谓是困扰了我很久的一个接口。当然,相比于 SPI,UART,I2C 等总线协议来说,EMIF 相对来说复杂一些=两个问题=切不说 EMIF 怎么去用,单就表面的两个问题就能让人思考好久,但仍不得其解:1)6416 中共有 EMIFA 和 EMIFB 两个 EMIF 接口,但有一个问题,为什么 EMIFA 的地址总线是从 AEA3 到 AEA

2、22 共 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 均只有 2

3、0 根地址线,我们可以计算一下,220=1M 的寻址空间,这 64MB 和 256MB 到底是指什么呢?对于高手来说当然弄懂也许是小问题,但对于初次接触这类问题的初学者来说,也许琢磨很久也弄不明白,我就是后者!=问题的答案=为了解释以下问题,首先明确一个单位度量:字节=8bit,半字=16bit,字=32bit,双字=64bit解答问题 1:我们再次来理一理 EMIF 接口:EMIFA 有 AEA3AEA22 共 20 根地址线和 AED0AED63 共 64 根数据线,也就是说数据总结是“双字” 的,再注意一下表 3 中有关寻址范围的单位是 BYTES,一个双字等于八个字节,而如果寻址八个字

4、节则需要 3 位地址线。嗯,这就对了,EMIFA 的地址总线无低三位,其实是因为它的数据总线是 64 位的缘故,即数据总线对数据的操作是以八个字节为单位的,所以根本没必要再包含低三位的地址线了同理,对于 EMIFB,数据总线为 16 位,即数据总线对数据的操作是以半字为单位的,所以根本没必要包含最低位地址线了当然,虽然 EMIFA 有 64 位数据线,我们可以选择使用 EMIFA 的低 32 位,或者是低 16 位,或者是低 8 位;EMIFB 有 16 位数据线,我们可以只选择使用它的低八位;以 EMIFB 使用 16 位数据总线为例,我们要在 DSP 中使用 EMIFB 时,访问的地址是偶

5、数,比如 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 中存储的值;那么这时

6、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 注意表中的第一列是 me

7、mory type,即存储器类型,共有三种,异步静态 RAM(ASRAM ),可编程同步存储器,同步动态 RAM(SDRAM )然后再注意第三列是 maximum addressable bytes per CE space,即每 CE 片选空间最大可寻址字节数,其中对于前两种类型的存储器都是对应相同的,但对于 SDRAM 来说则变为了前面两者的 32 倍!再看表 4-3,对于 memory witdth 为 16 和 64 的请况,我们可以很容易作出如下计算:20 根地址线,寻址范围为 220=1M;对于 EMIFA 来说,他的数据总线为双字(8bytes),则它的寻址字节数为 1M*8by

8、tes=8MBytes;对于 EMIFB 来说,它的数据总线为半字(2bytes),则它的寻址范围为 1M*2bytes=2MBytes。这与表中是吻合的,但是对于 64 位数据总线中的 256MB 的寻址范转和 16 位数据总线中的64MB 的寻址范围是怎么回事呢? 在此不过多说了,只是提一句吧,对于 SDRAM 来说,它是分行地址和列地址的,即对其进行访问时分行和列之分,如果行地址有 10 位,列地址有 16 位,那么相当于寻址范围为 210 * 216 = 226 = 64M。看到这个计算明白了吧我们可以得出如下结论:EMIFA 的每个 CE 片选空间相对于 SDRAM 来说寻址范围 2

9、56MB,而相对于其它类型的memory 为 8MB;EMIFB 的每个 CE 片选空间相对于 SDRAM 来说寻址范围 64MB,而相对于其它类型的 memory 为 2MB。这里注意一下单位,如果仅就地址总线的寻址范围来说,它的范围就是多少个地址,只有配以数据总线后才能说它的寻址范围为多少字节;比如说仅就 20 位的地址总线来说它的寻址范围就是 1M=220 个,但如果配上 8 位的数据总线则寻址范围为 1MB,如果是 16 位的数据总线则寻址范围为 2MB,64 位数据总线则是 8MB注:我也是琢磨了好久才琢磨出来了这么一个结果,文中内容都是一些个人理解,只供参考,不作为答案!TI DS

10、P 的 EMIF 接口的地址总线问题(实际测试) 分类: DSP 2012-06-04 22:29 101 人阅读 评论(0) 收藏 举报 题目:TI DSP 的 EMIF 接口的地址总线问题(实际测试)去年,曾写过如下博文:有关 TI DSP 的两个问题:地址总线不从零开始问题及寻址范围问题(链接:http:/ DSP 内部访问 EMIF 内的某一地址时,地址总线的的数值问题,当时的结果只是从理论上得到的,也没有验证,今天验证了一下,分享出来平台:DSP(TMS320C6416T)+FPGA其中 6416 的 EMIFA 与 FPGA 相连。试验中,使用 EMIFA CE1 空间,并将其设置

11、为 16 位异步接口。在 DSP 中给某一 CE1 空间中的地址赋值,即执行写操作;FPGA 这边,直接用 ChipScope 观察地址总线的值。共试验了几个值:写地址(16 进制) 地址总线值(16 进制)0x9000 0000+2*0x1 0x10x9000 0000+2*0x2 0x20x9000 0000+2*0x2+1 0x20x9010 0000+2*0x2 0x800020x9000 0000+2*0xFFFFF 0xFFFFF0x9000 0000+2*0xFFFFF+2 0x0由以上的值基本可以得出访问的地址与地址总线值之间的关系:设访问的地址为 ADDR,则址值总线上的值为

12、 floor(ADDR-0x90000000)/2,floor 为向下取整。由于此时为异步接口,对于 20 位的址址总线来说,地址变化最大为 1M 的范围,即从00xFFFFF,因此实际值为 floor(ADDR-0x90000000)/2%0x100000,%表示取模,0x100000 即为 1M 地址空间。那么当把接口设置为 32 位异步接口呢?64 位异步接口呢?针对这个问题,我也试了一下,基本结论是这样的:设接口位宽为 Width,CE 空间起始地址为 AddrInit,地址最大范围为 0AddrMax-1,访问的地址为 ADDR,地址总线上的值为 ADDRBUS,则有如下关系:ADD

13、RBUS=floor(ADDR-AddrInit)/(Width/8)%AddrMax再贴一个清楚一点的公式,呵呵,和上面的完全一样,这样是不是看起来更直接:例如:接口位宽 Width=16CE 空间起始地址 AddrInit=0x9000 0000地址最大范围为 AddrMax=1M=220=0x100000访问地址 ADDR=0x9000 0005(即 0x9000 0000+2*0x2+1 )ADDRBUS=floor(0x9000 0005-0x9000 0000)/(16/8)%0x100000=2这与前面的结果是一致的!补充一个时序问题:1)DSP 写,即 FPGA 读,在 FPGA 中检测 AWE 下降沿且 CE 为低时,读数据总线即可;2)DSP 读,即 FPGA 写,在 FPGA 中当 AOE 和 CE 均为低时,写数据总线即可。 到此,搞定 DSP 与 FPGA 通过 EMIF 接口通信问题!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号