• 公開日:2020年09月23日
  • | 更新日:2024年03月28日

CPUの基本構成を理解するための3つのポイント!

はじめに

本記事は、CPUの内部構成について知りたい人に向けて、シンプルな構成で説明させていただきます。このあと出てくる、3つのポイントを覚えていただければ、おおよそのCPUの構成を理解することができると思います。

CPUとは?

以前、「もはや必要不可欠?身近な電化製品には欠かせないマイコンとは」という記事を掲載させていただきましたが、こちらの記事の中で出てくる、制御装置と演算装置が含まれる部分をCPUと呼びます。制御装置と演算装置がCPUの中ではどのような役割をしているのかを、簡単に解説させていただきます。


マイコンの基本構成

 

CPUの構成

CPUの構成はメーカーによって異なり、様々な種類が存在します。この構成のことをアーキテクチャ(Architecture)と呼び、アーキテクチャは命令、データバス、演算器、レジスタなど、様々なところで異なります。ですので、本記事では理解しやすいように、よりシンプルに解説させていただきます。


CPUの構成の全体像

大きく分類すると、デコーダ、演算器、内部レジスタの3種類で構成されています。各要素について、順番に説明していきたいと思います。

 

CPUと記憶装置の関係

記憶装置とは、「もはや必要不可欠?身近な電化製品には欠かせないマイコンとは」の記事で説明したように、命令を保存するため、および、演算装置で演算した結果や、周辺装置を介して入力装置から受け取ったデータを保存するために使用します。CPUと記憶装置はバスを介して接続されており、記憶装置へのアクセスはデータの読み書き時と、命令の読み出し時に行われます。ここで、バスアーキテクチャという概念があり、代表的なものにノイマン型とハーバード型の2種類があります。

  • ノイマン型(Von Neumann architecture)
    →命令とデータ用のバスが共用になっています。バスに使用される、物理的な領域を抑えることができるメリットがあります。
  • ハーバード型(Harvard architecture)
    →命令とデータ用のバスが別々に用意されています。データの読み書きと、命令の読み出しが同時にできるメリットがあります。

例えば、TI社のMSP430マイコンはノイマン型ですが、C2000マイコンはハーバード型を採用しています。


ハーバード型

 

デコーダ

デコーダの役割は、命令の内容を解読し、内部レジスタ、演算器、周辺装置を制御することです。つまり、制御装置の部分に当てはまります。命令は実際には2進数のデータとして記憶装置に保存されますので、デコーダはデータの内容から、実行すべき命令を判別し、各装置に対して適切な制御を行います。一般的に、CPUが動作する仕組みは以下の流れになります。


CPU動作の流れ

  1. 記憶装置に保存された命令を取り出します。(Fetch:フェッチ)
  2. 取り出した命令を解読し、命令の内容を特定します。(Decode:デコード)
  3. 解読した命令に従って、各装置を制御し、処理を実行します。(Execute:エクスキュート)

基本的に、Fetch→Decode→Executeの3つのステップを繰り返して、CPUは処理を順番に実行します。
デコーダ部分では、命令セットアーキテクチャという概念があります。主にRISCとCISCの2種類があります。

  • RISC(Reduced Instruction Set Computer)
    →1つの命令で処理する内容は単純になりますが、処理時間は短くなります。パイプラインという技術を使用して、複数の命令を並列処理することで効率を上げます。
  • CISC(Complex Instruction Set Computer)
    →1つの命令で処理できる内容は多くなりますが、処理時間は長くなります。たくさんの処理を1つの命令で実行することで効率を上げます。

両者はお互いにメリットがあり、処理性能については一概に優劣が決められませんので、ユーザー自身で最適なものを選択する必要があります。なお、TI社のMSP430マイコンとC200マイコンはRISCアーキテクチャを採用しています。

 

演算器

その名の通り、演算を行う部分で、ALU(Arithmetic and Logic Unit)と呼ばれます。加算器と論理演算器などの演算回路で構成されており、基本的な四則演算である加算、減算、乗算、除算や、OR(論理和)、AND(論理積)、NOR(排他的論理和)などの論理演算を行うことができます。マイコンによってはALUとは別に、専用の乗算器などを内蔵したものもあり、ALUを使用するより高速に演算を行うことができます。
基本的には下図のように、内部レジスタのデータを使用して演算を行い、結果を内部レジスタに保存します。参照元の内部レジスタには、予め記憶装置からデータを読み出しておく必要があり、結果を保存する場合は、別途記憶装置に保存する処理が必要になります。


演算器の動作の流れ

演算装置に関わるアーキテクチャには、アキュームレータ方式、汎用レジスタ方式の2種類があります。

  • アキュームレータ(Accumulator)方式
    →アキュームレータと呼ばれるレジスタのみに、演算結果を保存することができます。
  • 汎用レジスタ方式
    →汎用レジスタに演算結果を保存することができます。

アキュームレータ方式は、汎用レジスタ方式に比べて、回路がシンプルに構成できるというメリットがありますが、昨今のマイコンでは、汎用レジスタ方式が採用されていることがほとんどだと思います。

 

内部レジスタ

内部レジスタとは、簡単に言うとCPU内部に用意された一時的なデータの保存場所です。CPUによっては、内部にあるレジスタの数、種類、格納できる値のサイズ(bit数)が異なります。しかし、役割ごとにおおまかに分類すると、以下のようになります。


内部レジスタの種類

  • プログラムカウンタ
    →次に実行する命令が保存されているアドレス値(記憶装置内におけるデータの保存場所を示す値)を保存するレジスタです。
  • フラグレジスタ
    →演算結果の状態を保存するレジスタです。演算結果の状態とは、ALUで行った演算の結果が、正の値なのか負の値なのか、桁の繰り上げが発生しているかどうかなどを確認することが出来ます。
  • 命令レジスタ
    →命令をフェッチした際に、一時的に命令の内容を保存しておくレジスタです。
  • スタックレジスタ
    →スタックポインタの先頭アドレスを保存するレジスタです。スタックポインタとは、RAMなどの揮発性メモリを使用した、動的なデータ(プログラムの実行中に変動するもの。例えば、動的変数など)を保存する領域です。
  • アキュームレータ
    →演算を行うデータ、または演算の結果を保存するレジスタです。
  • 汎用レジスタ
    →その名の通り、汎用的に使用することが出来るレジスタです。基本的には自由に使用することが出来ます。例えば、「演算するための記憶装置にあるデータの一時的な保存」や、「特定のカウント値の保存」などのように、汎用的に使用することが出来ます。
  • ベースレジスタ
    →アクセスしたい記憶領域の先頭アドレスを保存するレジスタです。こちらはインデックスレジスタと組み合わせて使用しますので、別途説明します。
  • インデックスレジスタ
    →ベースレジスタを基準に、アクセスしたい記憶領域のアドレスを保存するレジスタです。ベースレジスタに保存されているアドレス+インデックスレジスタに保存されているアドレスが参照先になります。
    例えば、任意の配列データを「0x1000~0x1FFF」領域に保存した場合、ベースレジスタに「0x1000」を保存し、インデックスレジスタに「0x0000」を保存したとします。このとき、インデックスレジスタに保存された値を読み込むと、「0x1000」領域のデータにアクセスします。インデックスレジスタの値を「0x0001」,「0x0002」・・・「0x0FFF」というように順番に繰り上げていくことで、「0x1000」~「0x1FFF」に保存されている配列データに順番にアクセスすることができます。

 

デコーダ、演算器、内部レジスタのまとめ

これまで説明したデコーダ、演算器、内部レジスタの3つのポイントを元に、「ある2つの値を加算する処理」の流れを確認してみます。


ある2つの値を加算する処理

  1. 記憶装置から取り出す命令は、プログラムカウンタの値を参考にします。
  2. 記憶装置に保存された命令を、実際に取り出します。(Fetch)
  3. 取り出した命令を解読し、命令の内容を特定します。(Decode)
  4. 解読した命令に従って、汎用レジスタと演算器に、加算処理を行うように制御します。(Execute)
  5. 演算器は、汎用レジスタ1と2からデータを取り出して、2つのデータの加算を行います。
  6. 計算結果を、汎用レジスタ3に格納します。

以上の1~6の順序で処理が行われることで、「ある2つの値を加算する処理」を実現することができます。

 

おわりに

今回は、CPUの構成についてデコーダ、演算器、内部レジスタの3つのポイントで簡単に説明させていただきました。デコーダが読み出した命令を解読した後、内部レジスタで一時的に保存されたデータを使用し、演算器で演算を行う、という流れとなります。実際のCPUの構成はもっと複雑になっていますが、この3つのポイントを理解できれば、おおまかなCPUの構成を理解することができるかと思います。マイコンとCPUの構成については説明させていただきましたので、次回は周辺装置について説明したいと思います。

Texas Instruments社の製品をお探しの方は、メーカーページもぜひご覧ください。

Texas Instruments社
メーカーページはこちら