CPU実験室

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

VHDL修正

プログラムは正常動作しているのでMC14500周囲のハードはだいたいOKと見てよいでしょう。あとはスタックを深く取ってサブルーチンを自由に使いたいところです。

現状のカウンタ記述はスタックポインタがうまく動作してなかったのですがもう一度見直すことにしました。

いろいろなVHDLの記述例を見てみるとFIFOとかテーブル参照とかインデックスを変数で動かす場合、インデックスが適正な範囲にあるかのチェック、外れていたらどうするかをちゃんと記述してあげないといけないようです。それがないと余計なロジックを生成してしまうのか理由はよくわかりませんが、念のためこのカウンタ記述にも入れ込みました。

f:id:O3I:20210420190332j:plain

つまりスタックに積むとき(push)はポインタptrがスタックの深さDEPTH未満であること、スタックから取り出すとき(pop)ptrが1以上であることの判定を追加し、これをCPLDにダウンロードしたところ正常にスタックにアクセスできるようになりました。でもこれでコンパイル結果は

 

  Total macrocells 64 / 64 ( 100 % )

  Total pins 35 / 36 ( 97 % )

・・・リソースを完全に使い果たしました。というかこんなにきれいに使い切るのも気持ち良いです。スタックを増やすにはEPM7128に移行するしかありませんが同じソースコードDEPTHの定義のみ変えればうまくいきそうです。