6747的存储单元位32位,字节可寻址(8位、16位、32位和64位)
- EMIFA
-NOR(8位或16位宽数据)
-NAND(8位或16位宽数据)-16位SDRAM,128MB地址空间(仅限TMS320C6747)
地址线(EMA_A[12:0])共13条,EMA_BA[0]和EMA_BA[1]。
数据线(EMA_D[15:0])共16条。
-EMIFB
-具有256 MB地址空间的32位或16位SDRAM(TMS320C6747)
-16位SDRAM,128MB地址空间(TMS320C6745)
地址线(EMB_A[12:0])共13条,EMA_BA[0]和EMA_BA[1]。
数据线(EMB_D[31:0])共32条。
单位度量:字节=8bit,半字=16bit,字=32bit,双字=64bit。
以6747的EMIFA使用16位数据总线为例,我们要在DSP中使用EMIFA时,访问的地址是偶数,比如0,2,4,8等等,使用EMIFA的CS4片选的地址范围,我们可以这样在CCS中编程使用EMIFA接口:
*(short int *)(0x68000000)= 0x11;
(short int *)(0x68000000)是将0x68000000强制类型转换成short int型的指针类型,即得到指向地址0x68000000的指针,而地址0x68000000中存是一个16bit的数据(其实是和0x68000001合在一起了吧);
*(short int *)(0x68000000)则是取出地址0x68000000中存储的值;
那么这时EMIFA的地址总线上是什么情况呢?访问地址;但若是*(short int *)(0x68000002)呢?注意,这时地址总线是1而不是2,因为地址总线是从BEA1开始的,而不是BEA0。
首先看一个TI官方文档:《TMS320C6000 DSP External Memory Interface(EMIF) Reference Guide【SPRU266E】》
下面看表4-3(以C6000为例)
表中的第一列是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。
下面举个例子,在研旭6747至尊板的boardled和CPLD例程中,CPLD需要控制8个LED,我们可以看作位一个字节(8bit)。
CPLD与DSP之间的地址线接法为BA1和A0-A7,见下图。
在6747中,存储单元是32位,如果字节寻址要使用16位,就需要把BA1作为最低位接上。如果字节寻址要使用8位,就需要把BA1和BA0接上,并且BA0作为最低位,BA1作为次低位。
下面我们来解释一下:6747中LED的地址为0x64000012;,为什么CLPD中LED地址为0x09呢?
上面我们提到了控制八位LED,可以看做一个字节,也就是一个字节的存储单元。
而对于6747使用到了BA1。所以6747是16位也就是两个字节的存储单元。
所以在CLPD中控制LED的是第九个存储单元(偏移九个地址单元),而6747中也应该是偏移九个地址单元见下图,0x64000000偏移9个存储单元就是0x64000012。
我们可以这样理解,CPLD是偏移九个存储单元(一个存储单元是8位=1个字节),6747也应该是偏移九个存储单元(一个存储单元是16位=2个字节)。
0x64000012,0x12对应二进制为10010,我们可以看作9个16位的存储单元。
0x09,对应二进制为1001,我们可以看作9个8位的存储单元。
见下图,这样我们就很好理解了。
假如DSP是存储单元是32位的,那么对应的偏移九个存储单元就是
0x64000024,0x24对应二进制就是100100,我们可以看作9个32位的存储单元。
以上均属于个人理解,如果有理解不对的地方,欢迎小伙伴在评论区指出讨论。