DSP

EMIF的两个接口EMIFA和EMIFB分析与比较

2019-07-13 14:40发布

有关TI DSP的两个问题:地址总线不从零开始问题及寻址范围问题 
  示例芯片:TMS320C6416EMIF,即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 DSPEMIF接口的地址总线问题(实际测试)
在此博文中,具体谈到了当DSP内部访问EMIF内的某一地址时,地址总线的的数值问题,当时的结果只是从理论上得到的,也没有验证,今天验证了一下,分享出来……平台:DSPTMS320C6416T+FPGA其中6416EMIFAFPGA相连。试验中,使用EMIFA CE1空间,并将其设置为16位异步接口。在DSP中给某一CE1空间中的地址赋值,即执行写操作;FPGA这边,直接用ChipScope观察地址总线的值。共试验了几个值:写地址(16进制)              地址总线值(16进制)0x90000000+2*0x1                  0x10x90000000+2*0x2                   0x20x90000000+2*0x2+1              0x20x90100000+2*0x2                 0x800020x90000000+2*0xFFFFF         0xFFFFF0x90000000+2*0xFFFFF+2    0x0由以上的值基本可以得出访问的地址与地址总线值之间的关系:设访问的地址为ADDR,则址值总线上的值为floor[(ADDR-0x90000000)/2]floor为向下取整。由于此时为异步接口,对于20位的址址总线来说,地址变化最大为1M的范围,即从0~0xFFFFF,因此实际值为floor[(ADDR-0x90000000)/2]%0x100000%表示取模,0x100000即为1M地址空间。那么当把接口设置为32位异步接口呢?64位异步接口呢?针对这个问题,我也试了一下,基本结论是这样的:设接口位宽为WidthCE空间起始地址为AddrInit,地址最大范围为0~AddrMax-1,访问的地址为ADDR,地址总线上的值为ADDRBUS,则有如下关系:ADDRBUS=floor[(ADDR-AddrInit)/(Width/8)]%AddrMax再贴一个清楚一点的公式,呵呵,和上面的完全一样,这样是不是看起来更直接:
例如:接口位宽Width=16CE空间起始地址AddrInit=0x90000000地址最大范围为AddrMax=1M=2^20=0x100000访问地址ADDR=0x90000005(0x9000 0000+2*0x2+1  )ADDRBUS=floor[(0x90000005-0x9000 0000)/(16/8)]%0x100000=2这与前面的结果是一致的!补充一个时序问题:1DSP写,即FPGA读,在FPGA中检测AWE下降沿且CE为低时,读数据总线即可;2DSP读,即FPGA写,在FPGA中当AOECE均为低时,写数据总线即可。 到此,搞定DSPFPGA通过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=EMIF4)http://www.hellodsp.com/bbs/forum.php?mod=viewthread&tid=22775&highlight=EMIF