連載
» 2006年11月28日 00時00分 公開

組み込みギョーカイの常識・非常識(4):CPU・MPUはどうやって動く? 〜 発振器のナゾ

発振器とは、MPUを動作させるための同期信号(クロック)を発生させる回路。具体的にどんな役割を担っているのか解説しよう

[中根 隆康 フリー・アーキテクト/(株)ネクスト・ディメンション,@IT MONOist]

 今回は前回からの続きになります。前回はCPU・MPUの構造や動きについて概要を説明しました。もう一度思い出してもらうために前回の図を見てください。

 前回、MPUに単に電気を流せばプログラムが動くわけではないといいました。「命令フェッチ」「命令デコード」「実行」「ライトバック」という各動作のタイミングを作る仕掛けが必要になり、それを作っているのが「発振器」だというところまでが前回の説明でした。


プログラム実行の流れ 図1 プログラム実行の流れ(第3回の図3を流用)

発振器は何をしているのか?

 発振器とは、MPUのメーカーによって表現が違っていて、「クロック発振器」または「クロック発生回路」というのが一般的です。発信の元は水晶発振器が一般的ですが、最近ではオールシリコンのものも開発されています。

 一言でいってしまうとクロック(CLOCK)を発生させる回路となりますが、そもそもクロック(素直に訳すと時計)とは何でしょうか。

 クロックとはMPUを動作させるための同期信号のことです。同期信号とは図1の各処理を進めるタイミング信号でもあり、周辺のコントローラとの同期を取るための信号でもあります。同期信号とは音楽のテンポと同じで、このテンポを正確に刻むもの(指揮者)がクロック発振器になります。ただ、この指揮者のテンポには3拍子や4拍子なんてものはなく、常に2拍子を刻みます(図2)。

発振器が刻むクロック信号 図2 発振器が刻むクロック信号

 クロック信号が高電圧になったとき、または低電圧から高電圧へ変化し始めたときをきっかけに、動作の同期を取ります。通常、低電圧から高電圧へ変化するポイントから次の低電圧から高電圧へ変化するポイントまでを1クロックといっています(図3)。実際の波形は図3のようにきれいなものではなく、かなりゆがんだ形になっていますので、低電圧からある程度上がったところが変化するポイントとなります。

1クロックの意味 図3 1クロックの意味

 1クロックが1秒間に何回あるかがクロック周波数と呼ばれています。MPUの動作はこのクロックに同期しているわけですから、クロック周波数が多くなれば動作が速くなることになります。よく動作クロックが××MHzや××GHzのCPUといいますね。ただ、動作クロックが高いから本当に速いかどうかは、1つの命令が何クロックで動作するかによります。

 組み込み系のMPUのハードウェアマニュアルやデータシートなどを見ると、



クロック発振器内蔵(最大システムクロック××MHz/周辺クロック××MHz)、内部PLLにより、外部クロックの逓倍(×1、×2、×4)が可能



などと書かれています。ここでいうシステムクロックがCPUの動作クロック周波数となるわけですが、よく分からないのは「周辺クロック」「内部PLL」「外部クロックの逓倍」という言葉の意味です。多分、ハードウェアの技術者の方なら当たり前なのでしょうが、ソフトウェアだけをやっている人間には聞き慣れない言葉ですね。

 そこで前回の「図1 一般的なMPUの構造」を思い出してください。MPUの中にはプロセッサ(CPU)以外にもいろいろなコントローラやROM、RAMなどのメモリが入っていました。プロセッサ本体以外が動くための同期クロック周波数を「周辺クロック」といってよいと思います。厳密には「周辺クロック」もいくつかの周波数に分かれることがあります。

 次に「内部PLL」とは、MPUに内蔵されたPLL(Phase Locked Loop)回路を持っているということですが、「PLL回路」とは何かをここで説明し始めると先へ進まなくなりますので、「PLLとは」というキーワードでWeb検索してみてください。自分で調べて自分なりに理解し、関連するものをさらに調べて知識を広げていくのも組み込みエンジニアへの道です。

 次に「外部クロックの逓倍」ですが、この言葉だけでは疑問がわきますね。「クロック発振器内蔵」といっておきながら、突然「外部クロック」ですから。それに「逓倍」(「ていばい」と読みます)という言葉も日常では出てこない言葉ですね。

 これもWebで調べてみると「周波数を整数倍する」ことを「逓倍」と呼んでいるようです。そうすると「外部クロックの逓倍」は外部から入力されたクロック周波数を整数倍するということになります。では、なぜ外部からのクロック入力が必要なのでしょうか。内部のクロックではなぜ、駄目なのでしょうか。理由はいろいろと考えられますが、この場ではあえて説明しません。もし、近くにハードウェア技術者の方がいるようでしたら「なぜ、外部クロックが必要なの?」と尋ねてみてください。ここまで説明してきたクロックのイメージが理解できていれば、その方の答えが理解できるはずです。

ROMとRAMについて

 クロックの話はこのあたりにして、次に前回までに名前だけは出てきた、実際のプログラム(命令)やデータを記録しておく、ROM(Read Only Memory)、RAM(Random Access Memory)について少しだけ触れておきます。

 Read Only Memoryをそのまま訳すと「読み出し専用のメモリ」になりますが、これを見て何も疑問を感じない人はいないでしょう。「書き込みができないメモリ=何も書いてないメモリ」なんて意味がないですね。

 実は書き込みができないわけではなく、専用の装置を使ったり、書き込み専用の手順を踏むことで書き込みができるのです。ROMという名称は少し前まで使われていた専用の装置で書き込まれたメモリの名残で、一度書き込んだら書き換えることのないメモリのことです。

 しかし、最近ではこのタイプのメモリを使う機会はかなり減ってきていて、製品に組み込まれてからも書き換えができるフラッシュROMを使うことが多くなっています。フラッシュROMについては@ITの用語事典を参照してください。いろいろなタイプのものがあるのが分かると思います。携帯電話やミュージック・プレーヤなどにもフラッシュROMの仲間が使われていますね。

 次にRandom Access Memoryについてですが、これもいろいろな種類があり簡単には説明できそうもないので、次回に回しましょう。


 これから組み込みソフトのエンジニアを目指す方は、MPU(CPU)も外部に付いているメモリも、クロックに同期して動いているということを忘れないでください。どこかのシーンで「同期がずれている」「同期が外れている」なんていっている人に出会うかもしれません。

 ご意見、ご要望などがありましたらできる限り取り込んでいきたいと思いますので、下記までメールをお送りください。(次回に続く)


Copyright © ITmedia, Inc. All Rights Reserved.