现代的处理器(SoC)或DSP都内建有内存控制器,它是外部SDRAM、FLASH、EEPROM、SRAM……等内存的控制接口。但不同处理器内部的内存控制方式都不尽相同,而且它们的控制程序大部分都位于开机程序内,皆属于汇编语言,所以常令人不知所云。
SDRAM的规格
现代的处理器并不需要额外的外部器件,就可以直接将外部内存连接至处理器的脚位上。但是,在选择SDRAM时,还是必须考虑下列几项因素:
● 工作电压
● 最大的工作频率
● 最大的记忆容量
● I/O大小和排数(bank number)
● “列地址闪控(column address strobe;CAS)”的延迟(latency)
● 刷新(refresh)的速率
● 分页大小(page size)
● 初始化的顺序(sequency):可程序化的顺序是MRS=>REF(refresh)或REF=>MRS。
上述参数都列在SDRAM规格中,它们必须能符合处理器内部的内存控制器之要求,惟有如此,才不需要额外的外部器件,否则就必须另外设计逻辑电路来衔接。在图1中,SDRAM-B无法符合ADSP-TS201S处理器的内存控制器的要求。因为SDRAM-B的“突发资料组之宽度(burst length)”是1,而不是“全分页”;而且SDRAM-B的分页大小是2048字组(word或16bits),但是ADSP-TS201S处理器最多只能支持1024字组。所以,相较之下,应该SDRAM-A才对。
缓存器的设定
与其它控制器一样,处理器内部的内存控制器也需要透过缓存器(register)去设定它的组态与功能。根据图1的规格,可以设定ADSP-TS201S处理器的“SDRAM控制缓存器(SDRCON)”。SDRCON缓存器的初始值是0,表示SDRAM是在禁能(disable)状态。图2是SDRCON缓存器的每个位的名称。
1. 位0(SDRAM ENABLE):设为1时,表示有SDRAM存在。
2. 位1~2(CAS LATENCY;CL):表示当读取(read)命令发出之后,至数据出现时之间的时间。它与写入作业无关。此值可以在SDRAM规格表中查到,如图3所示。假设外部总线速率是100MHz,则CL应设为2。有些SDRAM的时序参数(例如:CL、tRAS、tRP…..等)是根据不同的传输速率和速率等级(speed grade)而定的。
3.位3(PIPE DEPTH):当有数个SDRAM并排使用时,可能需要外部缓冲存储器(buffer),这时,此位必须设为1。不过,如果SDRAM脚位上的电容值远低于30pF,则此位可以设为0。
4.位4~5(PAGE BOUNDARY):分页边界,是用来定义分页的大小,单位是字组。此值与“列的地址(column addresses)”数目相等。图4是SDRAM-A的规格,从中可以查出:列地址的总数目是256(A0~A7),因此,分页大小是256。
5. 位7~8(REFRESH RATE):这个值能决定处理器内部的刷新计数器(refresh counter)之值,好让处理器的速率能与外部SDRAM所需的刷新速率相配合。于图4中,刷新计数值是4K;而且在SDRAM规格中,会经常见到:64ms,4096 cycle refresh或者4096 cycles/64ms或15.6μs/row。刷新速率的计算公式是:cycles=SOCCLK×tREF/Rows,其中,SOCCLK是处理器的CPU速率,tREF是SDRAM刷新间隔(refresh period),Rows是行地址的位数目。假设SOCCLK等于250MHz,由上述公式可以求得刷新速率等于3900周期(cycles)。因此,实际的刷新速率必须等于或小于3900周期,但是ADSP-TS201S处理器的内存控制器最多只支持3700周期,所以此值要设定为3700。
6. 位9~10(PRC TO RAS DELAY):此参数决定SDRAM的Precharge到RAS之间的延迟时间,也就是tRP,如图5所示。图6是SDRAM的时序规格范例,其中,传输率属-6等级者,它的最小tRP值是18ns,若使用100MHz速率,则至少需要1.8周期(100MHz×18ns=1.8)。因此,tRP应该设为2周期。
7. 位11~13(RAS TO PRC DELAY):此参数决定RAS到Precharge之间的延迟时间,也就是tRAS。如图6所示,最小的tRAS值是42ns,若使用100MHz速率,则至少需要4.2周期。因此,tRAS应该设为5周期。
8. 位14(INIT SEQUENCE):它决定SDRAM于开机时的初始化程序。若此程序是:在开机后100μs内,至少必须执行一个COMMAND INHIBIT或NOP命令,之后,执行PRECHARGE命令,此时,SDRAM是处于闲置(idle)状态。然后,执行两个AUTO-REFRESH,再设定“模式缓存器(mode register)”。最后,才能执行读写作业。这表示此SDRAM的初始化时间至少需要:PRE+2×Autorefresh+MRS(mode register set)。