第2回: マイクロプロセッサとDSP

マイクロプロセッサ

コンピュータや携帯電話をはじめとする情報機器の ほとんどすべてに、小型コンピュータが入るようになりました。 この小型コンピュータは、その機器全体の制御をしています。 たとえば など、まさに心臓部というべきはたらきをしています。

一般にこのような小型コンピュータを マイクロプロセッサ(μP)と呼びますが、 小型でもコンピュータの一種ですので、 いわゆる「ノイマン型」コンピュータであることが ほとんどです。 つまりメモリに入っているプログラムを順番に読み出し、 その手順どおりに処理、つまり演算やデータの受け渡しを 行う、というものです。 したがってマイクロプロセッサ以外にもメモリ、 さらにほとんどの場合は入出力装置が必要となるわけで、 それらを接続するために、一般には「バス型」の接続をとります。

これは、マイクロプロセッサやメモリなどを個別に接続するのではなく、 「バ」と呼ばれる共用の信号線にすべてを接続し、 そこを順番に使ってデータのやり取りを行う方式です。

マイクロプロセッサの内部構成

マイクロプロセッサの動作に、バスがどのように使われるか、 具体的にみてみましょう。

これは、プロセッサ内部のメモリ(レジスタ)R1の中の D1という数値(データ)と、メインメモリのM番地に入っている D2というデータに対して、D1-D2を計算し、その結果をR1に 戻す、というプログラム(命令)を実行する場合の データの流れです。 以下のような手順で、バスを通ってデータが流れていることが わかります。
  1. プログラムカウンタ(PC)が示す番地iが、バスインタフェース回路を 通してアドレスバスに出力され、メインメモリのi番地が選択される
  2. この番地に入っている数値(データ)を命令とみなして読み出し、 バスインタフェース回路を通して命令レジスタに入る
  3. 命令デコータが、この数値(データ)が示す命令の処理内容を解読する
  4. メインメモリ内のデータが入っている番地Mを計算し(アドレス計算)、 アドレスバスに出力する
  5. メインメモリのM番地のデータを読み出し、ALUに渡すとともに、 レジスタR1のデータD1もALUに渡される(オペランド読み出し)
  6. ALUで、所定の演算(この場合は減算)を行う
  7. ALUでの演算結果をR1に書き込む
このデータの流れを制御するのも、マイクロプロセッサの 役割であり、それを指定するのが、プログラム中の「命令」であるわけです。

ディジタル信号処理プロセッサ(DSP)

マイクロプロセッサは非常に広い場面で用いられるわけですが、 特に通信分野での信号の処理には次のような特性があり、 一般のマイクロプロセッサでは性能が足りない場合があります。 そのため、これらの用途では、性能を高めるために アーキテクチャを工夫したプロセッサが用いられることが多く、 このような特殊なプロセッサをディジタル信号処理プロセッサ Digital Signal Processor; DSP)と呼びます。 具体的には、次のようなアーキテクチャ上の特徴をもつものが 多いようです。 以下、このうちの2つについて見ていきましょう。

積和演算回路


一般に積和演算回路はこのような構成をとります。 この動作を順に考えてみましょう。
  1. 被演算数A(M), B(M)が乗算器に与えられる(このA(M), B(M)は、時刻を追って 順にメモリから供給されるとする)
  2. 少し時間がたったあと、その乗算結果C(M)=A(M)×B(M)が現れる
  3. そのC(M)を、次のクロック周期のはじめに出力レジスタに保持する
  4. その結果C(M)が、1つ前の周期の積和演算結果Z(M-1)とともに ALU(この場合は加算器)に入り、その出力にはZ(M)=C(M)+Z(M-1)が現れる
  5. そのZ(M)を、その次のクロック周期のはじめに出力レジスタに保持する (つまりZ(M) = C(M) + Z(M-1))
つまり時刻を追ってみると次のようにZ(M)が変わっていくわけです。
  1. C(0) = A(0)×B(0) → Z(0) = A(0)×B(0)
  2. C(1) = A(1)×B(1) → Z(1) = Z(0) + C(1) = A(0)×B(0) + A(1)×B(1)
  3. C(2) = A(2)×B(2) → Z(2) = Z(1) + C(2) = A(0)×B(0) + A(1)×B(1) + A(2)×B(2)
  4. ...


このようにして、積和演算ΣA(i)×B(i)が求められていくわけです。 この演算回路では、2クロック周期分送れて結果が累積されていくので、 2段パイプライン構成と呼びます。

ハーバードアーキテクチャ

ノイマン型コンピュータの動作で、案外高速化の足かせになるのが、 いわゆるノイマンボトルネックと呼ばれる、メモリからのデータの読み出しの 部分です。 特に命令とデータがともにメモリに入っていますから、 両者を順番に読み出すのは、効率が悪そうです。 そこで命令とデータを別々のメモリに入れておいて、 同時に読み出せるようにしよう、というのが ハーバード・アーキテクチャと呼ばれるアーキテクチャ(構成)で、 DSPでは多用されます。 (逆に同一メモリに命令もデータも格納するアーキテクチャを プリンストン・アーキテクチャと呼びます) 先に紹介したDSPの例でも、ハーバードアーキテクチャをとっていることが わかります。

高性能化のための機能設計

これらのデータの流れをふまえ、 マイクロプロセッサやDSPを設計するときには、 まず全体のデータの流れ(データフロー)を考えなければなりません。 つまりスムーズにデータが流れるようなアーキテクチャを 考える必要があります。 (ちなみに「アーキテクチャ(architecture」とは、もともとは 建築用語で、建物の構造のことを指しますが、 プロセッサの設計にあたっても、まさに「アーキテクチャ」の 「デザイン」が必要になるわけです)

アーキテクチャの設計にあたっては、次のようなことを 考慮するべきです。

これらは、いわばプロセッサのアーキテクチャの根本で、 必要な機能・性能や、利用可能な回路規模などをふまえながら、 総合的に判断する必要があります。

続いて、どのようなレジスタや演算器などの機能ブロックを、 どのように配置・接続してデータパスを作るか、という 機能設計を、次のようなことを考慮しながら行います。

これらの設計(デザイン)が済んだら、実際の論理回路、 さらにはVLSI(のレイアウト)へと設計を進めていくわけです。
この回の配布資料
この回のソボクな疑問集
戻る