16ビットマイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第57回]
●AM188EMのCLOCK(7)
下のリストのプログラムの一部を書き換えた2本のプログラムを実行して、その実行時間の差を求めたところ、計算上の命令の実行時間よりも多くの時間がかかっていることがわかりました。
それはなぜなのか?
当初はその理由がわからず、とうとうカメレオンロジアナまで引っ張り出してきて、波形を観測してみたのでした。
その波形をよくよく確認してみたところ、やっと謎が解けました。
2018/7/1 7:226 86cktst.LST [00001] ;;; clock test for am188 [00002] ; [00003] ORG=8000 [00004] ; [00005] 8000 B080 MOV AL,80 [00006] 8002 E683 OUT 83,AL [00007] 8004 32C0 LOOP:XOR AL,AL;3 [00008] 8006 E680 OUT 80,AL;9 +1.5us [00009] 8008 E80C00 CALL T5US;7us <8017> [00010] 800B FEC8 DEC AL;3 [00011] 800D E680 OUT 80,AL;9 +0.6us [00012] 800F E80500 CALL T5US;7us <8017> [00013] 8012 FEC0 INC AL;3 [00014] 8014 EBEE90 JMP LOOP;14 <8004> [00015] ; [00016] ;5us timer clock 20MHz [00017] 8017 B106 T5US:MOV CL,06 [00018] 8019 FEC9 T5US2:DEC CL;3 [00019] 801B 75FC JNZ T5US2;13,,,16*6=96 0.05*100=5us <8019> [00020] 801D C3 RET;20 CALL=19,,,0.05+140=7us [00021] ; [00022] ;END LOOP =8004 T5US =8017 T5US2 =8019 |
下は[第55回]でお見せした、カメレオンロジアナでの記録波形の一部です。
問題のサブルーチンの先頭からRETするまでの波形です。
2400nsあたりでスタックへのPUSHが行なわれています。
スタックPUSH後の2700ns近辺からはT5USサブルーチンの続きが読み込まれています。
8018、8019、801A、801B、801Cです。
8017はスタックPUSH前に読み込まれています。
8017、8018がMOV CL,01です。
この命令は3クロックです。
上のチャートのどこで実行されているかはわかりませんが、8018の読み込み後であることは間違いありません。
8018の読み込みには4クロックかかっています。
その後の8019、801AはDEC CLです。
DEC CLも3クロックです。
この命令もどの時点で実行されているのかわかりませんが、801Aの読み込み後であることは間違いありません。
8019、801Aの読み込みには8クロックかかっています。
801B、801CはJNZ T5US2ですが、今回のプログラムはCLに01を入れていますから、DEC CLでZフラグが立つため、このJNZ命令はスルーされることになります。
スルーしたときのクロック数は4クロックです。
この命令もどの時点で実行されているのかわかりませんが、801Cの読み込み後であることは間違いありません。
801B、801Cの読み込みには8クロックかかっています。
801DがRETですが「先読み」によって、次の801Eが無駄に読み込まれています。
801D、801Eの読み込みには8クロックかかっています。
さて。
スタックPUSH後からスタックPOP前までの時間を確認すると、2600ns〜4200nsの間ですから1600ns(1.6μs)かかったことになります。
前にも計算しましたように、CPU内部での命令の実行時間はわずか10クロック0.5μsなのですが、その命令をメモリから読み込むために少なくとも28クロック(1.4μs)の時間が必要なのです。
これで謎が解けました。
実はこのことは[第55回]の終わりのところに書いていました。
「基本的にメモリからの読み込み時間(1回4クロック)がネックになっていて、内部でのトータルの実行クロック数が計算上はいくら短くても、必要なメモリからの総読み込みクロック数を下回ることはできない。」
そういうことだったのでした。
これにて一件落着です。
16ビットマイコンボードの製作[第57回]
2018.7.15upload
前へ
次へ
ホームページトップへ戻る