TRON仕様チップGmicroのアーキテクチャ
参考文献:TRON仕様チップ活用法Gmicroのすべて(千葉憲昭 著 工学図書) 1993年発行
究極のCISCプロセッサはどのような命令セットアーキテクチャを持っているか調べてみた。
時代背景から考えると、MMUや浮動小数点コプロセッサは外付け、アドレス/データバスもダイレクトに外に出ている。x86で言えば80386~486の頃。坂村先生は当時bit誌で「CRISC」と言ってたがどうか。
参考にしたであろうプロセッサはVAX-11,MC68000,80286,IBM System/370だろうか。また、MIPS,SPARCもこのくらいの時代だ。
・レジスタセット
32bit長の汎用レジスタR0~R15、R14はフレームポインタ、R15はスタックポインタとして使用。R15(SP)は保護レベルにより4本ある。保護レベルが4つあるのは他にはx86。
MSBが0,LSBが31。TITMS9995やIBM System360のようだ。これとビッグエンディアンとの組み合わせでビット順序の整合性を取っている。後ででるビットフィールド命令で有効。
バイエンディアンはサポートしないが、ビットフィールド命令でバイト単位の入れ換えはできる。
・PSW(プロセッサ・ステータス・ワード)
特権モードの前半(PSS)とユーザーモードでも参照できる後半(PSH)に分けてある。PSSは保護リング、割り込みマスクなど。PSHは条件フラグ類、コプロセッサのID、直前のリング番号。
・アドレッシングモード
スタックへのプッシュ/ポップを除けば普通のRISCと変わらないが、強力なのは多段間接。参照したアドレスの中身のアドレスで参照したアドレスの中身のアドレスで……と四段までいける。
・コンテキスト保存
OSによる多重処理のためのコンテキスト保存を考えてある。(CTXBB:コンテキスト・ベース・ブロック・レジスタで参照)
・キャッシュ/分岐予測
Gmicroのモデル(100/200/300)それぞれは、キャッシュの制御や分岐予測の制御レジスタを持つ。
・レジスタの存在するアドレス
特殊なレジスタは、メモリ上にマッピングされている。この部分に通常のメモリを配置することはできない。
・命令長
可変長で、必要なら後ろ方向に拡張される。
・命令セット(μの表記があるのはマイクロ命令でないとできないだろうという想像)
2オペランド命令。
乗算、除算命令を持つ。
比較命令はCMP。ただし普通の二進演算命令でもフラグは変化する。
Gmicro200/300は10進命令を持つ。Gmicro300は強化10進命令を持つ。(10進数を符号付きで扱う命令)
論理演算はAND,OR,XOR,NOTしかない。
シフト命令はマイコン風。はみ出たビットがXフラグに反映される。ローテートもあり。ビット順を反転する命令(RVBI)もある。
ビットフィールド命令 メモリ上のビット列が対象。任意長のビットフィールドについて演算したりコピーしたりできる。(μ)
条件分岐命令はフラグを見てジャンプ。ごく普通。
サブルーチン命令はレジスタを退避するスタックフレームをENTER,EXITD命令で作成できる。作成しなくてもよい。リターンアドレスはスタックに積まれる。
ループ制御命令を持つ。
自己書き換えのためのキャッシュ関連をクリアする命令(PIB)を持つ。
ストリング命令 メモリ上の文字列の転送、比較、埋め込み。(μ)
キュー操作命令 キューの追加、削除、検索ができる。これはすごくないか?(μ)
制御空間、物理空間へのアクセス命令 SPARCの特権ASIへのアクセスやPowerPCのCR(コントロールレジスタ)へのアクセスに似ている。
MMU操作命令 Gmicro200/300のみMMUを持っている。TLB操作命令など。
マルチプロセッサ命令 BSETI/BCLRI命令はリードモディファイライトでセマフォ操作を行う。CSI命令はCompare&Swap。
コプロセッサ命令 FPUに関する命令群。
命令は可変長だが、よく使う命令を16bit長におさめ、命令長が増えるのは長い即値が必要な場合など限定的。x86のようなとってつけたような拡張ではない。また、乗除算命令をいちはやく採り入れている。
10進命令は当時はやっていたオフコン(COBOL実行が主体)への応用を考えてのことか。マルチプロセッサ対応も拡張性を考えてのことだろう。
ビットフィールド命令は当時のワークステーションはグラフィックスの描画をCPUがやっていたので採り入れたのだろう。現代は専用のGPUがやってくれる。
キュー操作命令は初めて見た。LISPマシンを作る気だったのだろうか。あ、OSでもキューは使うね。
では現在の日本のRISC風組み込み系プロセッサにはどのような影響を与えたか。影響とは言わないまでも参考にはしただろう。
・SH-2/3/4 (旧 日立)
16bit命令長、32bit汎用レジスタ16本、パイプライン、2オペランド命令、乗除算命令、ループ命令
・M32R (旧 三菱)
32bit命令長(一部16bit長)、32bit汎用レジスタ16本、MSB=0,LSB=31、パイプライン、2オペランド命令、乗除算命令
・V850 (NECエレ)
16bit命令長、(一部32bit命令長)、32bit汎用レジスタ32本、パイプライン、2オペランド命令、乗除算命令、スタックフレーム(PREPARE命令)
32bit汎用レジスタセット、16bit命令長、パイプライン、2オペランド命令、乗除算命令といった点が類似している。ハードワイヤードで実現できる部分を実装した感じだ。
感想:
Gmicro自体は採用例がほとんどない(松下/パーソナルメディアぐらい?)が、後の組み込み向け32bitプロセッサには影響が大きい。各メーカーが参画していたためだろう。
ビットフィールド命令のように使われなくなった命令をリタイアさせる方法はないものか。似たような例だとx86のセグメントなど。命令セットに一度組み込んでしまうともう外せない。
10進命令は現在でもありだと思う。実装もレジスタ内で計算する場合に限りALUに組み込める程度だ。COBOL資産はいくらハードウェアを乗り換えてもなくならない、と私は思っている。
TRONチップは日本のメーカーを巻き込んだ壮大な実験だったのだなあ。
究極のCISCプロセッサはどのような命令セットアーキテクチャを持っているか調べてみた。
時代背景から考えると、MMUや浮動小数点コプロセッサは外付け、アドレス/データバスもダイレクトに外に出ている。x86で言えば80386~486の頃。坂村先生は当時bit誌で「CRISC」と言ってたがどうか。
参考にしたであろうプロセッサはVAX-11,MC68000,80286,IBM System/370だろうか。また、MIPS,SPARCもこのくらいの時代だ。
・レジスタセット
32bit長の汎用レジスタR0~R15、R14はフレームポインタ、R15はスタックポインタとして使用。R15(SP)は保護レベルにより4本ある。保護レベルが4つあるのは他にはx86。
MSBが0,LSBが31。
バイエンディアンはサポートしないが、ビットフィールド命令でバイト単位の入れ換えはできる。
・PSW(プロセッサ・ステータス・ワード)
特権モードの前半(PSS)とユーザーモードでも参照できる後半(PSH)に分けてある。PSSは保護リング、割り込みマスクなど。PSHは条件フラグ類、コプロセッサのID、直前のリング番号。
・アドレッシングモード
スタックへのプッシュ/ポップを除けば普通のRISCと変わらないが、強力なのは多段間接。参照したアドレスの中身のアドレスで参照したアドレスの中身のアドレスで……と四段までいける。
・コンテキスト保存
OSによる多重処理のためのコンテキスト保存を考えてある。(CTXBB:コンテキスト・ベース・ブロック・レジスタで参照)
・キャッシュ/分岐予測
Gmicroのモデル(100/200/300)それぞれは、キャッシュの制御や分岐予測の制御レジスタを持つ。
・レジスタの存在するアドレス
特殊なレジスタは、メモリ上にマッピングされている。この部分に通常のメモリを配置することはできない。
・命令長
可変長で、必要なら後ろ方向に拡張される。
・命令セット(μの表記があるのはマイクロ命令でないとできないだろうという想像)
2オペランド命令。
乗算、除算命令を持つ。
比較命令はCMP。ただし普通の二進演算命令でもフラグは変化する。
Gmicro200/300は10進命令を持つ。Gmicro300は強化10進命令を持つ。(10進数を符号付きで扱う命令)
論理演算はAND,OR,XOR,NOTしかない。
シフト命令はマイコン風。はみ出たビットがXフラグに反映される。ローテートもあり。ビット順を反転する命令(RVBI)もある。
ビットフィールド命令 メモリ上のビット列が対象。任意長のビットフィールドについて演算したりコピーしたりできる。(μ)
条件分岐命令はフラグを見てジャンプ。ごく普通。
サブルーチン命令はレジスタを退避するスタックフレームをENTER,EXITD命令で作成できる。作成しなくてもよい。リターンアドレスはスタックに積まれる。
ループ制御命令を持つ。
自己書き換えのためのキャッシュ関連をクリアする命令(PIB)を持つ。
ストリング命令 メモリ上の文字列の転送、比較、埋め込み。(μ)
キュー操作命令 キューの追加、削除、検索ができる。これはすごくないか?(μ)
制御空間、物理空間へのアクセス命令 SPARCの特権ASIへのアクセスやPowerPCのCR(コントロールレジスタ)へのアクセスに似ている。
MMU操作命令 Gmicro200/300のみMMUを持っている。TLB操作命令など。
マルチプロセッサ命令 BSETI/BCLRI命令はリードモディファイライトでセマフォ操作を行う。CSI命令はCompare&Swap。
コプロセッサ命令 FPUに関する命令群。
命令は可変長だが、よく使う命令を16bit長におさめ、命令長が増えるのは長い即値が必要な場合など限定的。x86のようなとってつけたような拡張ではない。また、乗除算命令をいちはやく採り入れている。
10進命令は当時はやっていたオフコン(COBOL実行が主体)への応用を考えてのことか。マルチプロセッサ対応も拡張性を考えてのことだろう。
ビットフィールド命令は当時のワークステーションはグラフィックスの描画をCPUがやっていたので採り入れたのだろう。現代は専用のGPUがやってくれる。
キュー操作命令は初めて見た。LISPマシンを作る気だったのだろうか。あ、OSでもキューは使うね。
では現在の日本のRISC風組み込み系プロセッサにはどのような影響を与えたか。影響とは言わないまでも参考にはしただろう。
・SH-2/3/4 (旧 日立)
16bit命令長、32bit汎用レジスタ16本、パイプライン、2オペランド命令、乗除算命令、ループ命令
・M32R (旧 三菱)
32bit命令長(一部16bit長)、32bit汎用レジスタ16本、MSB=0,LSB=31、パイプライン、2オペランド命令、乗除算命令
・V850 (NECエレ)
16bit命令長、(一部32bit命令長)、32bit汎用レジスタ32本、パイプライン、2オペランド命令、乗除算命令、スタックフレーム(PREPARE命令)
32bit汎用レジスタセット、16bit命令長、パイプライン、2オペランド命令、乗除算命令といった点が類似している。ハードワイヤードで実現できる部分を実装した感じだ。
感想:
Gmicro自体は採用例がほとんどない(松下/パーソナルメディアぐらい?)が、後の組み込み向け32bitプロセッサには影響が大きい。各メーカーが参画していたためだろう。
ビットフィールド命令のように使われなくなった命令をリタイアさせる方法はないものか。似たような例だとx86のセグメントなど。命令セットに一度組み込んでしまうともう外せない。
10進命令は現在でもありだと思う。実装もレジスタ内で計算する場合に限りALUに組み込める程度だ。COBOL資産はいくらハードウェアを乗り換えてもなくならない、と私は思っている。
TRONチップは日本のメーカーを巻き込んだ壮大な実験だったのだなあ。
32ビット・マイクロプロセッサ TRON仕様チップ活用法―GMICROのすべて スペック 1993-03 売り上げランキング : 1671626 Amazonで詳しく見る by G-Tools |
この記事へのコメント