プロセッサの内部設計

実験でのもっとも大きな柱となる、プロセッサ内部の設計・製作の話です。
復習 → プロセッサとは?
さて、プロセッサというものの「仕組み」は理解できたと思いますが、実際プロセッサを 作る作業はどういうものになるでしょう? そこでは、まずCADというものが活躍します。まずはこのCADとは何なのか、そして それの使い方を学ぶことにします。
CADとは

cadimage.gif 本来、プロセッサの製作というのはなみなみならぬ労力を必要とするものです。
それは基板の製作をやってみただけでも想像がつくでしょう。
プロセッサはトランジスタの集まりな訳ですが、これらをどう配置しようかなどと考えていったら頭がパンクしてしまいます。
(でも、本当のプロセッサ製作では、最終的にはこのレベルの「設計図」が できあがるのです。)
やはり、もっと大まかな単位つまり、フリップフロップやカウンタ、加算器といった レベルで考えたいものです。
また、実際の配置にそって考えるのではなく、作るひとが分かり易い状態で作業をしたいといった希望が出てきます。
CADはそういった、作業の効率化を実現してくれるツールなのです。

どこまで簡単にするかは場合によって異なります。
本当に性能のよいプロセッサを作らなければならなければ、もしかすると、すべて人間の手で考えなければならないかもしれません。
逆に、性能効率なんかどうでもいいからとにかく簡単につくりたいというのであれば、ハードウェア記述言語で論理的記述をするだけですましてしまうとう手もあります。

今回は「画面上にフリップフロップやカウンターをならべて線で結んでやれば、そのとおりのプロセッサを作ってくれる(自動レイアウト・配線してくれる)」というレベルでやることになります。

 さらなる研究のために――その他のCAD利用形態

具体的には、我々の実験では、powerview(viewdraw)というCADで設計をし、 そのデータをもとに各種ツールが自動配線までしてくれます。

つまり、このページの最後にあるような回路図を書くと、実際に FPGAに送りこむデータが生成されます。


簡単な設計例−LEDをちかちか光らせてみる

led.gif プロセッサ実験の演習ではCADになれるという意味も考えて、プロセッサを作る前に まずは8つくらい並べたLEDをちかちか光らせる回路をくんでみます。

一番簡単な例としては、カウンタを一つ使ってその出力をLEDに表示してみる というものがあるでしょう。

ledcirc.gif

このような回路図をCAD(viewdraw)で「描いて」やると、あとは各種ソフトが自動的にレイアウト情報を生成してくれます。
ここで出来るレイアウト情報は、ターゲットのLSIである Xilinxの (Xilinxのホームページへ) XC4005というFPGAに送り込むものとなります。
xilinx.gif 出来たレイアウトデータは開発環境であるUNIXマシンのファイルとしてある わけですが、これを専用のケーブルとソフトを使ってXC4005に送ってやります。 そうするとXC4005はコンフィギュレーションされ、CADで描いてやった回路の と同じ動作をするようになります。

以上の過程で、基板とFPGAとは動作を確認できました。


簡単な設計例−RS232Cで通信してみる

今回作るものには、基本的に、プロセッサとメモリしかないため、自前では 入力する手段がありません。(キーボードとかはないわけです)。 そこで、外部との入出力のためにRS232Cというものを使います。 これは、モデムなどをつなぐのにも使われているものですが、 ワークステーションと今回作る基板とを結んで、データのやりとりを行えるように するものです。

このために作るのは、通信に必要なLSIの追加、 RS232Cケーブルの作成(我々の作る基板につながるようにする)、 通信ソフトの作成(UNIX上)、Xilinx内の通信回路の設計 があります。

プロセッサがコントロールすることの要は、通信用のLSIを制御し、 そのバッファにデータを書き込むあるいは読み込むことで、 通信をするわけです。


簡単な設計例−メモリ(SRAM)を使ってみる

演習は次にメモリを使う実験をします。
kiban-memory.gif こんどは、ちょっと頭を使う設計です。 メモリの書き込み/読み込みの実験です。
メモリーの書き込みはおおよそ以下のようになるでしょう。 memwrite-s.gif メモリ(SRAM)には、主に、アドレス入力、データ入力、クロック、ライトイネーブル のI/Oがあります。 メモリに書き込むときには、まずアドレスおよびデータ線に、書き込みたいアドレス および データをセットして、ライトイネーブルを書き込み可能にします(電圧をHighにするのか Lowにするのかは場合によります)。 ライトイネーブルであるときにクロックが立ち上がる(または下る)と、 その瞬間にデータが指定したアドレスに書き込まれます。

さて、このような動きをさせるにはどの様な回路を組めばよいでしょうか。 基礎知識は、ハードウェアの基礎知識(AND,ORやフリップフロップなど)です。 ひとつの例を以下に示します。しかし、実現の方法はほかにもいろいろあるでしょうから、 考えて見るとよいでしょう。 memcad-s.gif

実験では、メモリに書き込みをしただけでは、ちゃんと動いているかよくわからないので、 ホスト(UNIX)からRS232Cでデータを送ってやって、それをいくつかメモリ上に ためこんでやって、それをまとめてホストに返送するという実験をします。


CPUの内部設計をする

さて、いよいよCPUの設計にとりかかります。 これまでの予備実験で、かなり設計の基本あるいはCADの使い方に慣れてきていると思われます。 基本的なアーキテクチャはCADで描く前に前もって考えておきます。

  復習 → 基本設計

CPUともなると、設計の方法はかなりいろいろな方法が考えられます。 一つの方法には、フリップフロップをならべていって、タイミングごとに制御していく 方法もあるでしょう。

具体例で考えてみます。 例えば、以下の命令を実行するにはどうするかを考えます。

   ADD %1 %2 %3

まず、レジスタ1番の内容をラッチにいれ、次に同様にレジスタ2番の内容をラッチ にいれてその時のALUの出力が答え(足し算の和)であるので、それを レジスタ3番に書き込むという操作をするわけです。

さて、こういった制御をどのようにしてやるのでしょうか? ポイントは、各「部品」に「書き込み許可線」がついているということです。 つまり、レジスタなどの部品は、いつもは書き込むことができないようになっているの ですが、そこに入る制御信号線を制御してやると書き込むことができるようになるわけです。 seigho-s.gif

例えば、「レジスタ1番の内容をラッチに入れる」という作業の際には、 といった流れになります。

CADでのイメージ


〔トップページへ〕 〔「完成までのプロセス」のindexページへ〕
<vu@is.s.u-tokyo.ac.jp>

Last updated on 7 May, 1999