2024-11-22 10:07 — asano
カテゴリー:
先日の80960SAと一緒にいくつか他のものも買っています。今回はその一つです。
AMDのAm29000-25GC、専用の保護ケースに入った状態で送られてきました。
Am29000ファミリもi960ファミリと同様に1980年後半から1990年代中頃まで製造されていた32ビットのRISCマイクロプロセッサです。汎用コンピュータとして成功せず、組み込みメインだった点も似ていますね。
これも初めて絡むのでアーキテクチャの特徴を見てみます。
- レジスタ
共通のレジスタとサブルーチンコールで切り替わるレジスタに分かれている点ではi960に似ていますがもうちょっと複雑です。gr0
からいくつかは特殊なレジスタで、gr64
~gr127
が共通(グローバル)レジスタになっています。gr128
~gr255
がローカルレジスタになりますが、128個が複数セットあるのではなく、命令のレジスタフィールドで指定した番号とgr1
の値が加算されて対象のレジスタが決定されます。 - 3オペランド
Am29000ファミリもi960ファミリ同様に演算命令は3オペランドになっています。命令によってはソースオペランドの片方に0~255の定数が使えるのが便利そうです。 - 遅延分岐
JMP
,CALL
といった分岐命令では分岐先を実行する前に直後の命令が実行されます。 - サブルーチン呼び出し
CALL
命令によるサブルーチン呼び出しの際に戻りアドレスはレジスタに保存されますが、保存先のレジスタは自由に選択できます。RET相当の命令は無く、JMPI
(Jump Indirect)命令を使用します。i960とは異なりローカルレジスタの切り替えは自動では行なわれないのでgr1
を更新するのはプログラマの責任です。 - 比較と条件分岐
比較命令も3オペランドで結果はステータスレジスタではなく通常のレジスタに入ります。条件分岐もレジスタの値(最上位ビット)によって行われます。 - 即値
前述のように8ビットまではそのまま使える命令が多くありますが、それ以上が必要な場合は一旦レジスタに入れる必要があります。CONST
命令はレジスタの下位16ビットに値をセットし上位をクリアします。CONSTN
命令はCONST
同様ですが上位16ビットを1で埋めます。負の値に使います。16ビットを超えた値が必要な時はまずCONST
命令で下位16ビットをセットし、続けてCONSTH
命令で上位16ビットをセットします。順番を逆にすると正しく動作しません。
実際に書き始めるともっといろいろ出てくると思います。
命令フォーマットは結構シンプルで、32ビットを8ビットずつに分けて上(ビット31~24)が命令の種類を表します。残りが3つのオペランドを表すのが基本で、16ビットの定数を必要とする場合はビット23~16とビット7~0を繋げて用います。
さて、アーキテクチャについてはこのくらいにしてパッケージをよく見てみます。
ケースの左右突起部分を押せば外すことができます。
ファミリのトップバッターAm29000、型番からわかる通り25MHz品です。
右下に京セラのマークがあるのは面白いですね。パッケージのメーカがここまで自己主張するんですねぇ。
バースト転送時は1クロックでメモリからデータを読まなくてはならないので今のEMILY Boardでは25MHz動作は無理です。DPSRAMをもっと高速なものに替えるか、バースト転送を禁止するかが必要になります。
あと誤算だったのはこのAm29000はハーバードアーキテクチャで命令バスとデータバスが分かれて(アドレスは共通)いることに後から気付いたことなんです。32ビットのバスを2本配線して、しかもモニタを動かして遊ぶためには命令の書き換えが出来なくては面白くないですから両バスを接続しなくてはならず……
バスが共通になってるAm29030あたりを買い直した方が良いのかもしれません。
コメントを追加