CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

タイミング調整

転送終了、TxEMT=1になるのを待つループが回っているときのSCN2681につながる信号線をプローブしてみました

ch1: /SIOCS,   ch2: /RD,   ch3: D3(=TxEMT)

 

読取りパルス/RDはトランスピュータが生成していてT4-T5の2マシンステート;約50nsということになります。これをSCN2681のバスタイミングと見比べると

読取りパルスRDNの幅tRW225ns以上を要求しているので全く不足しています。/RDアクティブから約50ns後にD3(=TxEMT)=1が辛うじて出てきますが、既に/RDは終縁になっていてすぐに出力は閉じてしまいます。これをトランスピュータの内部ステートT5-T6間でラッチできずに「1」が読み取れなかった原因でしょう。システムバスサイクルに対してSCN2681が遅いということと、遅延の要因になるデータバスバッファをわざわざ挿入したのもまずかったようです

現状のハードで対策するとなると単純には/RDの幅を広げる。ということになります。トランスピュータのバスサイクルをもう一度見ると、/RDは正確にはTRdLRdH=T4+Twait+T5で構成されています

つまりT4T5Twaitを挿入すればいいわけです
簡単にはInternal configurationAD8接続からAD9接続にジャンパ切替するだけでT3T5に1ステートづつ挿入されるので/RD幅が広がります。といっても76nsでまだ全然足りませんがこれでフラグ読取りができるようになりました

ch1: /SIOCS,   ch2: /RD,   ch3: D3(=TxEMT)

さらにROM上の設定を参照するexternal configurationにすればさらにステートの挿入も可能です

ただしメモリコンフィグレーションでステートを挿入するとI/Oに引きずられてメモリマップドされた全てのROM、RAMまで遅くなってしまうので正しくはSCN2681がアクセスされた時だけウェイトサイクルTwaitを挿入すればよいでしょう。それに必要なシステムクロック、リセット、アドレスバス、WAITなど必要な信号は全てCPLDに引き込んであるので組み込むのは簡単そうです