SuperSimpleController(その6)JP命令が動いた! [OriginalCPU]
前回の記事の冒頭でジャンプ命令の処理の中でアドレスが想定通りに設定されないことを書きロジアナ画面も貼りましたが、原因が判明しジャンプ命令が無事動作するようになりました^^
原因はなんとTL866II用のUV-EPROMアダプタ(中華製)でした orz
ALUとして使っているM27C322への書込みはM27C4096のピン配置に変換するアダプタを用いて8回書き込んでいますが、書込みブロック設定用のDIPスイッチが上下逆に取り付けられているため、ブロックアドレスが反転していましたw
その他、ブレッドボードで使っていたリード線が2本断線していました orz
今回使ったテストプログラムは下記の4バイトのマシン語です(LOOPラベルへのJP命令でループするので最後のHALTは実行されません)。
下図がジャンプでループしている時のロジアナ画面になります。
このジャンプ命令には今回設計したCPUの多くのリソースの制御処理が含まれていて、これが動作したということは多くのリソースが正常動作していると言えると思います。
ジャンプ命令の具体的な処理は下記になります(まだ最適化は行っていません)。
因みに、本CPUのバス幅はデータが8bitでアドレスが16bitになります。「SuperSimpleController(その3)」の記事に載せたブロック図を参照してもらうと判り易いと思います。
条件ジャンプにも対応するために、条件に合致しなかった場合も下記の6項以降は実行されるのでジャンプ命令で指定するアドレスは
ジャンプ先アドレス - 1
の値を設定するようにしました。
上記のロジアナ画面でも判るように、ジャンプ命令の実行時間は現状10クロックです。
また、ジャンプ命令でR1レジスタの内容が壊れてしまいます(どこかで聞いたような・・F8?)
今回検討中のオリジナルCPUはROM内のuCODE(制御信号の時系列データ)でマシン語の処理内容を記述する方式なので、ロジックICの変更無しにアーキテクチャの変更がある程度できるようになっています。
参考にuCODEのソースも貼っておきます。
JP命令の処理部分は下記リストの「CSTART 0C0H ; **** JP」と書かれた部分を参照してください。
★追記 2021/02/15
uCODEの作成もだいぶ慣れてきたので上記のジャンプ命令の部分を最適化してみました。上記のテスト用サンプルプログラム実行時のロジアナ画面を下図に示します。ジャンプ命令の実行時間は従来の10クロックから8クロックに短縮されました。
PCのローバイトへの書込み信号であるPCLWが常に変化していることからこれ以上の短縮は難しいと思います。
[TOP] [ 前へ ] 連載記事 [ 次へ ]
原因はなんとTL866II用のUV-EPROMアダプタ(中華製)でした orz
ALUとして使っているM27C322への書込みはM27C4096のピン配置に変換するアダプタを用いて8回書き込んでいますが、書込みブロック設定用のDIPスイッチが上下逆に取り付けられているため、ブロックアドレスが反転していましたw
その他、ブレッドボードで使っていたリード線が2本断線していました orz
TL866用アダプタ |
|
今回使ったテストプログラムは下記の4バイトのマシン語です(LOOPラベルへのJP命令でループするので最後のHALTは実行されません)。
テスト用のサンプルプログラム |
---|
0000' ASEG ORG 0 NOP 0000 08 + DB 08H 0001 LOOP: JP LOOP 0001 C4 + DB 0C4H 0002 0000 + DW LOOP - 1 HALT 0004 FF + DB 0FFH END |
下図がジャンプでループしている時のロジアナ画面になります。
JP命令でループ動作中のロジアナ画面 |
|
このジャンプ命令には今回設計したCPUの多くのリソースの制御処理が含まれていて、これが動作したということは多くのリソースが正常動作していると言えると思います。
ジャンプ命令の具体的な処理は下記になります(まだ最適化は行っていません)。
因みに、本CPUのバス幅はデータが8bitでアドレスが16bitになります。「SuperSimpleController(その3)」の記事に載せたブロック図を参照してもらうと判り易いと思います。
条件ジャンプにも対応するために、条件に合致しなかった場合も下記の6項以降は実行されるのでジャンプ命令で指定するアドレスは
ジャンプ先アドレス - 1
の値を設定するようにしました。
- PCをインクリメント
- ジャンプ先のLowアドレスをR1にセーブ
- PCをインクリメント
- ジャンプ先のhighアドレスをPCのhigh側にロード
- R1レジスタの内容をPCのlow側にロード
- PCをインクリメント
- PCが示すメモリの内容をIRにフェッチ
上記のロジアナ画面でも判るように、ジャンプ命令の実行時間は現状10クロックです。
また、ジャンプ命令でR1レジスタの内容が壊れてしまいます(どこかで聞いたような・・F8?)
今回検討中のオリジナルCPUはROM内のuCODE(制御信号の時系列データ)でマシン語の処理内容を記述する方式なので、ロジックICの変更無しにアーキテクチャの変更がある程度できるようになっています。
参考にuCODEのソースも貼っておきます。
JP命令の処理部分は下記リストの「CSTART 0C0H ; **** JP」と書かれた部分を参照してください。
作成中のuCODEリスト |
|
★追記 2021/02/15
uCODEの作成もだいぶ慣れてきたので上記のジャンプ命令の部分を最適化してみました。上記のテスト用サンプルプログラム実行時のロジアナ画面を下図に示します。ジャンプ命令の実行時間は従来の10クロックから8クロックに短縮されました。
PCのローバイトへの書込み信号であるPCLWが常に変化していることからこれ以上の短縮は難しいと思います。
ジャンプ命令の最適化後のロジアナ画面 |
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]