CPU実験室

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

サブルーチンテスト

機能としてはまだ不完全だし、あとどれくらい拡張できるかわかりませんが先ずこれでテストしてみます。

VHDLの合成はピンアサインを指定しないでやっていたのですが実ボードに適用するために今つながっている結線通りにピンプランナーで設定、再コンパイルしたら・・

 Total macrocells 42 / 64 ( 66 % )

 Total pins 34 / 36 ( 94 % )

ひえ~マクロセルがさらに消費されてしまいました。レポートを見るとなんかワーニングが出ています
 Warning (163076): Macrocell buffer inserted after node "reg_Q[5]"
 Warning (163076): Macrocell buffer inserted after node "reg_Q[6]"

コードで検索すると

CAUSE: You turned on the Auto Logic Cell Insertion logic option, or the Insert Additional Logic Cell logic option, to add logic cells to the design. As a result, the Quartus II software inserted a dummy macrocell buffer after the specified node, or the design has an illegal OE source.

何かよくわかりませんが、取り回しが悪いから自動でダミーのマクロセルを挿入してあげたよ。という感じでしょうか。やはりピンアサインは指定してやるよりコンパイラの最適化に任せた方がよさそうです。

 

ともあれ機能は入ったので信号を接続します

MC14500FLAGFピン、ここにはNOPFコマンドを実行するとパルスが出るのでCPLDPUSHピンに接続します。これでNOPF命令をCALL命令と見做すことができます。

一方RTNピンはRTNコマンドでパルスが出るのでCPLDPOPピンに接続でRETURN処理が行われることになります。

 

FLAGFRTN信号はMC14500から直接クリップで取り出します

f:id:O3I:20210402172958j:plain

 

ハードの準備ができたので次はプログラムですが、その前にアセンブラを少し改造しておきました。NOPFCALLNOP0を単なるNOPというようにエイリアスを登録しマシンコードが現れる列を一般的なアセンブラのようにアドレス列の隣に移動しています。アセンブラ自体自作、EXCELのルックアップテーブルを広げるだけなのでここは何とでもなります。

 

さてプログラム本体ですが004-005番地のループでLEDONサブルーチンを連続的に呼びます。006-008番地のLEDONサブルーチンはLED0を点けて消してリタンするだけとなってます。

f:id:O3I:20210402175815j:plain

こうなると一般的なCPUのプログラムにも見えてきます。ただデータ幅は1ビットなんですけど。