機能としてはまだ不完全だし、あとどれくらい拡張できるかわかりませんが先ずこれでテストしてみます。
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.
何かよくわかりませんが、取り回しが悪いから自動でダミーのマクロセルを挿入してあげたよ。という感じでしょうか。やはりピンアサインは指定してやるよりコンパイラの最適化に任せた方がよさそうです。
ともあれ機能は入ったので信号を接続します
MC14500のFLAGFピン、ここにはNOPFコマンドを実行するとパルスが出るのでCPLDのPUSHピンに接続します。これでNOPF命令をCALL命令と見做すことができます。
一方RTNピンはRTNコマンドでパルスが出るのでCPLDのPOPピンに接続でRETURN処理が行われることになります。
FLAGFとRTN信号はMC14500から直接クリップで取り出します
ハードの準備ができたので次はプログラムですが、その前にアセンブラを少し改造しておきました。NOPFをCALL、NOP0を単なるNOPというようにエイリアスを登録しマシンコードが現れる列を一般的なアセンブラのようにアドレス列の隣に移動しています。アセンブラ自体自作、EXCELのルックアップテーブルを広げるだけなのでここは何とでもなります。
さてプログラム本体ですが004-005番地のループでLEDONサブルーチンを連続的に呼びます。006-008番地のLEDONサブルーチンはLED0を点けて消してリタンするだけとなってます。
こうなると一般的なCPUのプログラムにも見えてきます。ただデータ幅は1ビットなんですけど。