2013年11月07日

SDRAM

1chip MSXは主記憶としてSDRAM(32MBだったかな?)を持っています。
これを、メインメモリ(スロット)とVRAMにタイミングで切り替えて
使っているらしいです。
当8801のRTLも同様にタイミングで下記動作を切り替えながら行っています。
・メインCPUからの読み書き
・メインCPUからのC000-FFFFアドレスへの読み書き
・サブCPUからの読み書き
・グラフィックス表示回路からの読み出し
・リフレッシュ
これらを2~3処理した20クロック強の動作を1サイクルとして処理しています。
(同時に1サイクルを元にCPU及びSUB CPUのクロックを生成しています。)

SDRAMには下記内容を記憶させます。
・BIOS等のROM(0)
・メインRAM(1)
・グラフィックス用RAM(2)
・SUB用RAM(3)
SDRAMは4個のバンクに分かれており、上記括弧内は割り当てているバンクです。
メモリアドレスのC000-FFFFはグラフィックス用RAMが3プレーン、バンク切り替えで
マップされますが、ALUの処理等を考えると同時にアクセスできた方が簡単です。
このSDRAMは16bitのデータバス幅を持っていますので、一度のアクセスで2バイト
処理することが可能です。また、バースト動作で連続アドレスを少ないクロックで
アクセスできる為、これを使わない手は無い、ということで、バースト長は2とし、
バンク1は3プレーン+同アドレスのメインRAMの合わせて4バイト、2ワード単位で
処理することとしました。(バースト長はバンク毎に変えられるのかどうか分かりませんが
とりあえず全てバースト長は2にして、不要なときはDQMで無効にしたり、abortさせたり
しています。)
バンク2(グラフィックス領域)のみ、コントローラ内部でアドレスを×2して
処理するようにしてある為、コントローラ外からは1つのアドレスに対し32bitのデータが
入出力されるように動作します。

電源投入後、SDRAMの初期化が完了すると1chip MSX版ではEPCS4の
後半(0x40000~0x7ffff)からBIOS等のROMの内容をSDRAMのバンク0に内容をコピーします。
DE0ではFPGA規模からBIOSがEPCS4には入りませんので、BIOS等のROMはボード上のFlashに記憶しています。
Flashはパラレルで動作も速いので普通にROMとしても動作可能なのですが、
RTLを極力共通にする為に電源投入時にFlashからSDRAMにコピーしています。

尚、テキスト用のVRAMやフォント等にはブロックRAMを使用しています。
posted by プー at 20:06| Comment(0) | SDRAM | 更新情報をチェックする