2024-12-22 23:39 — asano
カテゴリー:
さらにこんなのも買ってしまいました。
INMOS IMST805といってもピンとこないかもしれませんが、Transputerといえば「あぁ昔そんなのあったな」と思う人も多いかもしれません。プロセッサ間を簡単に接続する"Link"という機能があり、多数を並べてマルチプロセッサ構成を容易に作ることができました。
そのマルチプロセッサを活用するために"Occam"と呼ばれる平行プログラミング言語が作られ、TransputerとOccamはペアとして扱われることが多かったようです。
ですが、私はプロセッサの生のアーキテクチャを体験することを目的としているのでアセンブリ言語でゴリゴリ書くつもりです。
ということでその特徴を見ていきます。
- スタックマシン
いわゆる汎用レジスタは存在せず3段のスタック(AReg, BReg, CReg)を使用します。 - 命令フォーマット
命令は4ビットの機能コードと4ビットの値の組合せです。例えばldc(load constant)命令は#4xで、xが4ビットの定数です。さすがにこれではあんまりですが…… - 長い即値
このままでは0~15までの定数しか使えず不便なのでpfix(prefix)命令#2xを使用します。この命令は4ビットずつ値を追加していくので、例えば#28 #24 #40と並べることで#840という12ビットの値を使用することができます。 - 負の即値
pfixの代わりにnfix(negative prefix)命令#6xを使うことで上位ビットを1にして負の値を使用することができます。(pfixを7つ並べてもできるとは思いますが) - 分岐命令のディスプレースメント
j(jump)などの分岐命令のディスプレースメントも同様にpfix/nfix命令を使えるので距離の制限はありません。 - opr命令
これだけでは命令がpfixなども含めて16しか作れません。幸いスタックマシンなので多くの命令はオペランドを必要としません。そこでopr(operate)命令として#Fxがあります。xの部分を使うことで16の命令を作り、さらにpfixを併用することでより多くの命令が作られます。
とりあえずわかったのはここまでです。メモリアクセスとかサブルーチン呼び出しとか知りたいことはまだまだあるのですが、命令動作の記述が独特なのでちょっと手こずっています。
ソフトウェアの話はこのくらいにしてハードウェアについても書いておきます。
パッケージは84ピンのPGAです。10×10なので同ピン数のPLCCソケットより小さいですね。
メモリバスは32ビット幅のマルチプレクスバスになっています。バイト毎の書き込み信号もあるので接続は難しくはなさそうです。DRAM用のタイミング信号も出ていますし、リフレッシュ機能もあります。
Transputerに独特の機能としてはTransputer同士を接続する"Link"と呼ばれるシリアル通信路があります。UARTみたいなものですが、ACKによるハンドシェイクができ、5/10/20Mbpsと高速です。これが4本用意されているのでマトリックス上に並べて上下左右の隣接と接続するなんてことができます。
上でSRAMの接続は容易だろうと書きましたが、実はメモリを接続せずに動かすこともできます。4kバイトのRAMを内蔵しており、Link経由でここにプログラムを転送して実行することも可能だからです。
当初はEMILY Boardで動かそうと思っていましたが、こっちの方が手っ取り早そうです。
コメントを追加