SuperSimpleController(その20)TMS9918Aの接続 その5 [OriginalCPU]
東京2020オリンピックも終わったので「SuperSimpleController(その19)TMS9918Aの接続 その4」の記事で書き掛けの自作CPU基板(Simple8Z)用に作った下の写真のビデオボード(Simpe8VDPSG)のハードディバッグ状況について記録しておきます。
結果としては無事に安定して画面表示ができるようになりました^^
TMS9918への4bitDRAMの接続例はネット上には見当たらなかったので珍しい試みだと思います(4bitDRAMを接続するならTMS9118等を使用するのが通例)
前回の記事でDRAMへのリード/ライト信号の調整を行ったので今回はDRAMへのRAS/CAS信号のタイミングやVDP(TMS9918)へのライトタイミングの調整を行いました。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
結果としては無事に安定して画面表示ができるようになりました^^
TMS9918への4bitDRAMの接続例はネット上には見当たらなかったので珍しい試みだと思います(4bitDRAMを接続するならTMS9118等を使用するのが通例)
VDPSG on Simple8Z |
|
前回の記事でDRAMへのリード/ライト信号の調整を行ったので今回はDRAMへのRAS/CAS信号のタイミングやVDP(TMS9918)へのライトタイミングの調整を行いました。
- DRAMへのRAS/CASタイミング
DRAMへのライト時のRAS/CAS信号のタイミングは下図のような感じで特に問題無いように見えます。
DRAM Write timing(OK pattern) サンプリング:50MHz
DRAMからのリード時のRAS/CAS信号例が下図でこちらも特に問題ないように見えます。
DRAM Read timing(OK pattern) サンプリング:50MHz
しかし、下図のようにCAS/の立下りとアドレス(A0)の変化が同じタイミングのNGパターンが散見されました。
アドレス信号が変化後、CAS/が立ち下がることでDRAMがカラムアドレスをラッチするのが本来のシーケンスのはずです。尚、ロジアナのサンプリング周期は50MHzなので時間分解能は20nsになります。
DRAM RAS/CAS timing(NG pattern) サンプリング:50MHz
対策としてDRAMに供給するCAS/信号を遅らせるために未使用のORゲートを追加しました。全体の回路図は「SuperSimpleController(その17)」の記事を参照してください。
CAS/信号生成部にORゲート追加
対策後の波形を確認したところ、上記のNGパターンのようにCAS/とアドレス信号が同時に変化するようなパターンは無くなりました。
波形サンプルが下図になります。図中のVDP_CAS/はVDP(TMS9918)から出力されるCAS/信号でアドレスと同時に変化しています(この時のロジアナの時間分解能は25nsなので実際にはCAS/の方が後で変化しているものと推測されます)
対策後のDRAM RAS/CAS timing サンプリング:40MHz
上記の改造を施した基板の写真も貼っておきます。未使用ゲートの入力は両面でベタグランドにサーマルパッドで4点接続されていてグランドからの切り離しが困難なのでシングルラインの丸ピンソケットの1ピン分を使ってICのピンを曲げて接続しました。
プリント基板の改造
下の写真が改造後のボトム面になります。
プリント基板の改造(ボトム面)
対処後の動作としては前回の記事に掲載した画面表示例よりも若干ゴミ表示が少なくなりましたが、まだ、問題がありそうです。 - VDP(TMS9918)のライトサイクル
VDPとDRAM間の制御信号の確認はできたのでCPUとVDP間のI/F信号の確認を行います。
VDPに対するライトサイクルのタイミングチャートを下図に示します。
VDPのライトサイクル
今回のオリジナルCPUのI/O命令ではリードやライト信号がディセーブルになると同時にデータバス上のデータも切り替わるので上図のth(WH-D)の仕様を満たしていません。
更にVDPへのライト信号はアドレスディコード後のセレクト信号とANDしているのでデータバス上のデータよりもゲートでの遅延分、遅れてしまいます。
ロジアナで確認したライト時の波形が下図になります。
尚、自作CPUは暫定的に約1MHzのクロックで動かしています。
VDPライト時のロジアナ波形例(修正前) サンプリング:100MHz
上述のようにライト信号立上りと同時にデータバス上のデータも変化しているのでVDPの規格を満たしていません。
今回のオリジナルCPUのI/Oライト命令はI/Oアドレスを指定するのにイミーデット値の場合とR1レジスタ値の二通りの命令を実装しています(出力値はR0レジスタで指定)
前者のマイクロコードは8ワードで次のマイクロコードが直後に書かれているのでマイクロコードを追加するのが難しいですが、後者のマイクロコードは7ワードなので1ワード追加してライト信号立上り後も1クロック分データを保持するようにしました。
マイクロコードの具体的な変更部分は下記の黄色部分になります。
I/Oライトのマイクロコード修正内容 CSTART 0A0H ; ** OUT (R1),R0 CLR IRW CLR RD ACT ALUR CLR PWEN ACT ADW PCLOAD CODE ; 1:AD <- PC, data-bus:R1, set load-mode CLR ADW ACT PWEN ACT PLW CLR MEM ACT WR CODE ; 2:PCL <- R1, data-bus:R0 CLR PLW CLR WR ACT MEM ;; CLR ALUR ;; ACT ALR CODE ; 3: CLR ALUR ACT ALR CODE ; 3: CLR ALR ACT PLW CODE ; 4:PCL <- ADL CLR PLW PCINC CODE ; 5:set inc-mode ACT PLW ACT RD CODE ; 6:inc PC ENDCODE ; 7:
マイクロコード修正後のI/Oライト時のロジアナ波形が下図になります。ライト信号が立上り後、1クロック分ライトデータを保持しています。
VDPライト時のロジアナ波形例(修正後) サンプリング:100MHz
以上の対処でVDPとDRAM間及びCPUとVDP間の信号が確認でき、下の写真のように安定して画面表示できるようになりました^^
VDP(TMS9918)による表示例
★追記 2021/08/21 {
バックカラーをシアン(R07=07H)、テキストのバックカラーをダークブルー(テキストカラーの値をF4H)にしたMSX風の画面を貼っておきます。
VDP(TMS9918)による表示例2
- VDP(TMS9918)のドライブ電流
補足としてVDPのドライブ能力について書いておきます。
VDPの出力ピンの吐出しと吸い込み電流は最大100uAしかなく、ドライブ能力はかなり非力です。
VDP(TMS9918)の規格
VDPはHCTシリーズでインターフェースを取っているので問題ないだろうと思いますが、下図のようにTTL規格表に記載されている74245の規格ではHCTの入力電流が未記載になっています(最大100uAで駆動すれば問題ないように思います)
74245の規格
しかし、「74HC と 74HCT の内部回路の違い」のサイトの内容を参照させて頂くと「HCT シリーズに TTL の H レベル信号を入力すると、mA オーダの消費電流が流れてしまいます」ということなので、何かしらの原因で信号のエッジが鈍った場合等には問題が発生するかもしれません。
因みにDRAM(uPD41464)側の規格は下図で負荷的にはかなり軽くなっているのでVDPに直接接続する場合は問題ありません。
DRAM(uPD41464)の規格
[TOP] [ 前へ ] 連載記事 [ 次へ ]