連載
» 2018年04月27日 09時30分 公開

Q&Aで学ぶマイコン講座(41):マイコンはビット数で何がどう違うのか? (2/4)

[菅井賢(STマイクロエレクトロニクス),EDN Japan]

マイコンのビット数の定義

 マイコンのビット数の定義はありません。各マイコンメーカーが独自で決めています。しかし、一般的にはCPUに内蔵されているALUが1回の演算で処理できるビット数を意味します。ところが、実際のマイコンの仕様を調べてみると、CPUは16ビットなのに、バス幅(図1中のデータバスなど)が8ビットしかなく、メモリのアクセスが8ビットに限定されるマイコンもあります。そのようなマイコンはメモリや周辺機能へのアクセス能力が8ビットに制限されるため、マイコンの性能という意味では、「16ビットCPU + 16ビットバス幅」のマイコンよりも劣ります。従って、ユーザーはマイコンを選択する際にカタログに記載されているビット数だけでなく、実際の内部構成の仕様をチェックする必要があります。

ビット数の違いによる性能の差

 ビット数によって、性能が具体的にどのくらい違うかをみてみましょう。図2に8ビット、16ビット、32ビットのALUの加算例を示します。取り扱う数の大きさが明確に分かるように、あえて2進数で記述しています。

図2:ALUの演算ビット数(クリックで拡大)

 1回の演算で処理できるデータの大きさを比較すると、8ビットだと2の8乗の256です。桁上がり(以下、キャリー)を含めると、その倍の512になります。16ビットだと2の16乗の6万5536、キャリーを含めると13万1072。32ビットだと2の32乗の42億9496万7296、キャリーを含めると85億8993万4592になります。これより大きい数字を取り扱う場合は、32ビットの上の64ビットプロセッサか、浮動小数点演算ユニットを搭載したマイコンを使う必要があります。

 8ビットでも256以上の数の計算はできます。ただし、1回の演算では不可能ですので、2回の演算を行います。図3に8ビットALUで、16ビット演算(加算)を行う方法を示します。まず1回目で、演算する数字の下位8ビットだけ計算します。このときキャリーが発生するとキャリービットにセットされます。2回目の演算で、上位8ビットの演算を行うのですが、先ほどのキャリーも一緒に演算します。マイコンの命令には、1つ前の演算結果のキャリーを含んで演算できる命令がありますので、それを使います。すると8ビットALUも、2回の演算で、16ビット相当の演算ができます。演算を2回行わないと、同じ結果が得られないということは、性能は16ビットマイコンの2分の1だということになります。

図3:16ビットの演算を8ビットALUで行う(クリックで拡大)

 ところが、実際はそうではありません。もし、マイコンがパイプライン処理*1)を採用していると、1つ前の演算が終わって、キャリーの結果が出るまで、次の演算が保留されることになり、これがパイプライン障害の原因になって性能の低下は2分の1では済まなくなります。

 以上のことから、高性能が求められる用途においては、演算ビット数の多いマイコンが求められます。

*1)参考記事:Q&Aで学ぶマイコン講座(35):スーパースカラって何?

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from UBM Electronics, a division of United Business Media LLC.