我的文章
EMIF的两个接口EMIFA和EMIFB分析与比较
姓名:张艳博 学号:17021223249
【嵌牛导读】: 示例芯片:TMS320C6416 EMIF,即ExternalMemoryInterFace ,中文译为外部存储器接口。基于tms320c6416的EMIF的两个接口EMIFA和EMIFB分析与比较
【嵌牛鼻子】:EMIFA和EMIFB分析与比较
【嵌牛提问】:EMIFA和EMIFB究竟有什么不同呢
【嵌牛正文】:
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倍!对于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