CPU実験室

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

ロジック追加

CPLDの空きピンに余裕ができたので残り必要そうなロジックを仮入力しておきました。

1.システム制御レジスタ:CPUの動作を外部から制御する出力ポートでA20M/KEN/FLUSH/IGNFEピンへH/Lを設定します(A20はDon't CareなのでA20M(アドレスA20マスク)は不要だったかも)。この回路は既存ボードのXC95108にも入っていましたが8ビットパラレルポートにアサインしていました。今回はデータ線を8本も引き込むのはピン数がもったいないし個別に制御できるようにI/Oアドレスを独立させ「D0」1ビットのみのラッチとしました

2.ウェイトジェネレータ:i486DXをフルスピードで動作させるとおそらくROMやI/Oのアクセスタイムが不足すると思われウェイト挿入が必要になります。

この回路もXC95108上で動作実績があるものをデッドコピーで持ってきましたがトライアル&エラーでやっつけた回路なのでかなりゴテゴテ冗長です。細かい修正は必要ですがピン数把握のため必要信号:RESET,ADS,READYの引き込みとマクロセルの見積もりのためにそのまま入れておきます

さて改めてこの回路でコンパイル実行・・・今度は通りました

トータルピン数は32となっていますが、回路図上で明示的に定義したピンが28本にJTAG用として予約されている4本を加えた数なので36本まであと4本は自由に使えます

生成されたHDLから逆生成したRTLも期待通りです

CPLDに含まれるカウンタやフリップフロップはクロック/リセットを共通に分配して同期回路で設計すべきなのでしょうが、外部クロックからCPUクロック用に分周するカウンタは単独で動作しています。これは以前失敗したことがあって分周回路にシステムリセットを入れたらCPUがデッドロックしてしまいました

考えれば当たり前なのですがリセット動作するのにもクロックがいるわけで。