石原 博の覚書

電子工作に関する日々の覚書を記載します

avrcpmのDRAMリフレッシュ

2020-11-07 19:15:55 | 日記

avrcpmではソフトウエアでリフレッシュを行っている。

方法はCAS before RAS リフレッシュ

私が使っているメモリはTMS44C256 (262,144 x 4bit)なので 8msecに1回リフレッシュが必要
->RAS 9bit を8msecなので、1秒間に64000回リフレッシュが必要となる
(512回 / 8msec = 64000回/秒)

avrcpmのソフトでは、1回の割り込みで2アドレス分リフレッシュする。
このため32000回/秒の割り込みが必要。

1回あたりのリフレッシュでは、割り込み処理(call類似+rjmp)5cycle + (リフレッシュ)19cycle =24cycle 

これは 1.5usec(16MHz)必要なことからavr自身は約95%の速度でエミュレーションを行うことになる
(1.5usecx32000=0.048秒)

関連部分ソース
#config.inc
#define F_CPU 16000000   
#define REFR_RATE 64000

#init.asm
Init timer2. Refresh-call 8ms/512
#define REFR_PRE 8 /* prescale 1/8 */
#define REFR_CNT F_CPU / REFR_RATE /REFR_PRE

ldi temp,REFR_CNT*2
outm8 OCR2A,temp

 

#dram_refresh.asm

; ------------------- DRAM Refresh Interrupt --------------------

 .cseg
 
 INTERRUPT OC2Aaddr
; reti     ; only for SRAM 

 sbis P_RAS,ram_ras       ;2
 reti
                 ;       CAS  RAS  
 cbi P_CAS,ram_cas        ;2       1|   1|  
                             ;        1|   1|  
 cbi P_RAS,ram_ras           ;2      |0    1|  
                             ;       |0    1|  
 nop                         ;1      |0   |0     
 sbi P_RAS,ram_ras           ;2      |0   |0   
                             ;       |0   |0  
 cbi P_RAS,ram_ras           ;2      |0    1|  
                             ;       |0    1|  
 sbi P_CAS,ram_cas           ;2      |0   |0   
                             ;       |0   |0   
 sbi P_RAS,ram_ras           ;2       1|  |0   
                             ;        1|  |0         
                             ;        1|   1|  
 reti                        ;4

RAS  -----+           +--------+           +----
          +-----------+        +-----------+
CAS  --+                             +-------------
       +-----------------------------+