私が常用している小型ボードコンピュータを紹介します。
PPC ベースのボードなども所有していますが、なぜか常時稼動は MIPS ISA のものばかりになってます。理由は本人にも不明ですが、如何にも○○向けというものは趣味の世界では使う気がしない性格なので、マニアックなものが MIPS ISA のものだったというだけのような気がします。
国産設計(ISAは国産でないですが)のハイエン ドプロセッサが MIPS ベースしか残っていないのも、何か関係あるのかもしれませんね。
一 部で?有名な名刺サイズの Linux ベースのボードコンピュータです。秋葉原のぷらっとホームなどでも扱っていましたので、それなりにはご存知の方も多いのではないかと思います。
Laser5 (http://www.laser5.co.jp/) さんの製品で VR4181A という MIPS ISA ベースのプロセッサの他、FlashROM., DRAM, RS-232C, LAN などを持っています。拡張インタフェースもあり、いろいろできそうな予感を感じて買いました。
実際にいろいろな実 験に使用しましたが、私がこの Web を公開するころにはすでに時機を逸した感がある企画が多かったので、このサイトではお蔵入りです。
興 味のある方は、これまた一部で有名な 成松宏のホームページ (http://www.narimatsu.net/nari_page/cgi/) にいろいろな情報が載っています (ここでも「旧コンテンツ」になってしまいましたが)。
CPU が 66MHz とハイエンドではないので、何でも「速い」もの好きな私としては、後述の怪しい?ボードを手に入れたこともあり、新規の用途には使っていません。最近は もっぱら自動メール処理モジュールとして PC ケースの中で、PC と共に (といってもLAN と電源でしかつながっていませんが) 動作し続けている状態です。
な お、L-Card+ には Linux PC 向けのクロス開発環境が付属していますが、Microsoft Windows 上でも開発をしてみたい方のために トランジスタ技術 2002年8月号にも掲載した Cygwin を使用した開発環境を 開発環境のページのソースとコンパイル済みバイ ナリ に掲載してますので、お手軽に Windows 上でソフトウェアを作ってみたい方は使ってみてください。
600MHz 1200MIPS のプロセッサ UX1200E を搭載した制御向けの MCU ボードです。DRAM を搭載せず、512KB の RAM を内蔵しています。 さすがに高速プロセッサへの Flash ROM の内蔵は難しい様で、4MB の Flash ROM がボードに搭載されています。
シマフジ電機さん (http://www.shimafuji.co.jp/) の製品で、32入出力の PWM を搭載するなどロボット向けを意識したボードのようですが、演算能力が高そうなので分散型高速演算処理の実験に使えそうだと思っていたところ、たまたま知 人のルートから発売前に入手できました。
L-Card+ と異なり OS レスですので何をするにも物つくりの香りがより強く、私としては非常に気に入っています。現在開発ツールの整備中ですが、基本的には GNU のツールチェーンがそのまま使用できますので、とりあえず動かすのであれば特に苦労はありません。但し、RAM が 512KB ですので、コンピュータとして使用する場合のシステム設計にはそれなりの工夫が必要そうです。(企画がロボット向けとなっていますので他の用途で工夫が必 要なのは当然といえば当然な のですが…)
近日発売のようですので、ロボットに興味のある方はもちろん、分散コンピューティング向けにも何枚か いかがでしょうか。OS レスの開発になれていない方でも、開発ツールを順次 開発環境のページのソースとコンパイル済みバイ ナリ に掲載していますので、良かったら使ってみてください。
なお、開発環境の構築から自分 でやる方は 開発環境のページの最初 から、既に入手して手っ取り早く使いたいという方は Cygwin のインストール (Windows の場合; 別 Window で開きます) と SEMB1200A 開発環境の動作確認 (別 Window で開きます) を見ていただくと良いかと思います。
ちなみに、私自身はロボットに興味がない わけではありませんが、過去に 鉄道模型に凝った経験から、この世界に踏み入れたら取り返しがつかないことになるのではどいう恐怖心のため、今のところ手をつけていません (^_^;
SEMB1200A のように、OS レスで使用するボードの場合、プロセッサの仕様を直にプログラムで意識する必要があります。これは L-Card+ のように OS が搭載されているボードの場合には、OS が物理的なプロセッサとその OS がサポートする論理的なプロセッサモデルの間を吸収してくれるのに対し、OS レスのボードでは当然この吸収層がないためです。
SEMB1200A を入手してプログラムを書いたのをきっかけに、いままで OS を通してしかプロセッサを使用したことのない方にも、直接(物理的な意味での)プロセッサを触ってもらいたいと思い、まずもっとも迷路に迷い込みやすいメ モリ管理のアーキテクチャについての説明を書いていきたいと思います。MIPS のメモリ管理アーキテクチャは、純粋な RISC のポリシーを起源にしており、題材としてはぴったりです。
電子工作のページ にも似たことを書きましたが、このような低レベルのことを常に意識する必要はないと思いますが、一度低レベルから高レベルまでのつながりを経験しておくこ とは有用だと思いますので、SEMB1200A を使わない方でも興味があれば読んでみてください。
なお、面倒な 内容はわからないが SEMB1200A を使ってみたいという方は、最後の SEMB1200A のメモリモデル のみを見ていただければ大体のことはわかると思います。
現 在の MIPS アーキテクチャは R3000 を起源にいくつかの世代を経ています。近年主流なのは MIPS32 または MIPS64 と呼ばれるアーキテクチャですが、プロセッサ製品としてはその前の世代に当たる MIPS IV などのアーキテクチャのものも多く流通しています。
こ れらの間では細かな仕様は異なっていますが、概念的な変更はなくここで書くようなレベルでは同じと考えて良いと思います。
MIPS アーキテクチャでは3つの動作モード(特権レベル)を定義していて、それぞれ Kernel Mode, Supervisor Mode, User Mode と呼ばれています。通常は OS Core が動作し、基本的にすべての権限を有する Kernel Mode と、それ以外の部分が動作する User Mode の2つを知っていれば十分です。
これらのモードは、それぞれ アドレス幅を決めるサブモードを持っており、32bit または 64bit のアドレス空間が選択できるようになっています。(MIPS32 のアーキテクチャでは 32bit のみ)
MIPS アーキテクチャの場合、アドレス空間は完 全にフラットではなく、アドレスに応じて動作モードやキャッシュの制御などが異なります。これは MIPS のアーキテクチャがセグメンテーションをサポートしないためで、x86 のようなコンベンショナルなセグメンテーションとリングによる制御(多くの機能は現在では使用されませんが)をサポートするプロセッサに比べると慣れが必 要な部分が多いのが特徴です。(この感想は私が x86 に長くなじんでいたせいもあるかもしれません)
なお、 SEMB1200A のような OS/ストレージレスかつ RAM の小さなシステムでは、記憶保護や仮想記憶は必要ない場合が多いので、多くの場合は全て Kernel Mode で動作させています。これは MS-DOS が 80396 上でも常に RING0 (最高特権レベル) で動作していたのと似ています。 (MS-DOS の場合は互換性の維持が必要でしたので多少状況は異なりますが)
MIPS アーキテクチャでののアドレス空間は先に説明した動作モードによって異なり計6つのマップを持っています。
こ の内、TLB マップの空間は、他のプロセッサと同様ページテーブルの情報に応じてその空間の属性が決定される空間です。但し、他の多 くのプロ セッサと異なり、MIPS アーキテクチャでは TLB をプログラムから可視とする代わりに、TLB 入れ替えをハードウェアでサポートせずソフトウェアで行うようになっています。
TLB とは本来ページテーブルのアクセスを高速化するバッファですので、純粋なハードウェアとしては MIPS の TLB はページテーブル本体であり TLB ではありません。しかし、OS がサポートするプロセッサモデルとしては TLB の位置づけ (OS を使う人は TLB の入れ替えを意識しない) ですので、そのままこの名前で呼ばれています。
TLB マップ以外 のアドレス空間は、アドレスによって属性があり、先の通り MIPS のわかりにくさ?の特徴になっています。
OS レスの場合は先に説明したとおり Kernel Mode のみを使用する場合が多いので、この場合は Kernal Mode のマップのみを知って入れば使用上は困りません。特にメモリが小さい場合には kseg0, kseg1 と呼ばれる空間のみで全て動作できますので、これらの空間のみを知っていれば大丈夫です。
実際に SEMB1200A でも、この2つの空間しか使用しないのが想定された使われ方のようです。
SEMB1200A で必要な部分に絞ったメモリモデルを載せておきます。
使用する空間は 32bit の kseg0 / 1 のみで、kseg0 (Base 0x80000000) ならば L1 Cache On、Kseg1 (Base 0xA0000000) ならば L1 Cache Off で動作します。
ちなみに、MIPS アーキテクチャではリセットアドレスは 0xBFC00000 で、この空間は Flash ROM 内にあらかじめ書き込まれている boot loader が実行されるようになっています。