本連載はHisa Ando氏による連載「コンピュータアーキテクチャ」の初掲載(2005年9月20日掲載)から第72回(2007年3月31日掲載)までの原稿を再掲載したものとなります。第73回以降、最新のものにつきましては、コチラにて、ご確認ください。

次にPCをインクリメント(+1)する回路を設計してみよう。

PCの最下位のビットは元の値に"1"を加えるので、2進数の場合は、単純に値を反転すれば良い。そして、元の値が"1"であった場合は桁上がりを生じる。次のビットは桁上がりと元の値を加えるので、桁上がりが"0"なら何もせずそのままで、桁上がりが"1"の場合は値を反転し、かつ、元の値が"1"の場合は桁上がりを生じる。更に次のビットも同じである。

まず、桁上がりが"1"の場合には値を反転するExclusive OR(排他的ORとも呼ぶが、以下ではXORと略記する)回路を作ろう。

  • XOR回路

    XOR回路

この図のようにインバータ3個と2-2AND-OR-INV回路でXOR回路を構成する。XORは両方の入力が"1"あるいは"0"で一致している場合には"0"を出力し、その他の場合には"1"を出力する回路である。バイナリの加算では、0+0=0、桁上がりを無視すると1+1=0となり、その他は0+1=1、1+0=1であり、XOR回路は1ビットのバイナリの加算を行うことが出来る

このXOR回路を用いて作った、簡単なリップルキャリー方式のインクリメンタの回路図を次の図に示す。

  • リップルキャリー方式のPCインクリメンタ

    リップルキャリー方式のPCインクリメンタ

最下位ビットPC0は単純にインバータで値を反転して出力し、次のビットPC1はXOR回路を用いてPC0が"1"の場合は値を反転して出力する。また、PC0とPC1が共に"1"の場合には桁上げが生じるので、この桁上げ信号を2NANDとインバータで生成している。その次のPC2は、PC1の桁からの桁上げがある場合にはXOR回路で値を反転して出力し、次の桁への桁上げを2NANDとインバータで生成するというように、最上位ビットまで同じ回路を並べる。

このインクリメンタでは、桁上げ(キャリー)が下位のPC0から上位にさざなみ(リップル)のように伝搬して行くのでリップルキャリー方式と呼ばれる。この方式ではPC0入力からI-out11出力までの間には各段でNAND一段とインバータが入り、最後にXORがあるので、21段のゲートを通過する。このコラムの第26回で説明したCMOSを使う場合のロジカルエフォートの理論で言えば、NANDが3/2、インバータがファンアウト2であるので、中間の各段のエフォートは3.5である。これが10段あり、そして最後のI-out11を計算する段のXORのエフォートは3であるので、トータルエフォートは38となる。これはファンアウト4のインバータのエフォート(FO4INV)の約10倍であり、1サイクルで十分実行できる程度の遅延時間である。