Home電子回路8ビット加算器

➕ 8ビット加算器

Interactive 8-bit ripple-carry adder. Toggle individual bits of two binary numbers and watch the carry chain propagate through 8 full-adder stages. Shows binary, hex and decimal results.

電子回路3D簡単60 FPS
8bit-adder ↗ 単独で開く

🔢 8ビット・リプルキャリー加算器

8ビット・リプルキャリー加算器のインタラクティブな可視化です — あらゆるCPUの算術論理演算ユニット(ALU)の基本構成要素です。ビットを切り替えてキャリーが伝播する様子を観察し、2進数、16進数、10進数の結果がリアルタイムで更新される様子を確認できます。

🔬 これが示すもの

全加算器が2つの入力ビットとキャリーインから和とキャリーアウトをどのように計算するか、そして8段をどのように連結してキャリーを次々に伝播させるかを示します。キャリーチェーンを通るクリティカルパスが、加算器の最大クロック速度を決定します。

🎮 使い方

AとBの各ビットをクリックしてオン/オフを切り替えます。キャリーチェーンが8段すべてを通って点滅する様子を観察してください。回路の下に表示される2進数、16進数、10進数で最終結果を確認できます。

💡 豆知識

リプルキャリー加算器は最もシンプルな2進加算器の設計ですが、O(n)のキャリー伝播が速度を制限します。現代のCPUは、すべてのキャリーをO(log n)の時間で計算するキャリールックアヘッド加算器やKogge–Stone加算器を使用しています。

8ビット・リプルキャリー加算器について

このシミュレーションは、CPUのALUの演算コアである8ビット・リプルキャリー加算器をモデル化しています。ビット位置ごとに1つずつ、同一の全加算器を8段連結しています。各段はブール方程式 S = A ⊕ B ⊕ Cₜₙ および Cₒₕₜ = (A·B) + (B·Cₜₙ) + (A·Cₜₙ) を用いて、2つの入力ビットと入力キャリーから和ビットとキャリーアウトを計算します。キャリーはビット0からビット7へと伝播します。

入力Aと入力Bパネルのビットボタンをクリックして、各ビットを0と1の間で切り替えます。各オペランドの10進数値はリアルタイムで更新されます。合計パネルには、結果が9ビットの2進数文字列、10進数、16進数、およびオーバーフローフラグ(ビット7からのキャリーアウト)として表示されます。リセットボタンとランダムボタンでオペランドを設定できます。このような加算器は、プロセッサが実行するすべての加算、減算、アドレス計算の基盤となっています。

よくある質問

リプルキャリー加算器とは何ですか?

リプルキャリー加算器とは、ビットごとに1つの全加算器を連結して2つの2進数を加算するデジタル回路です。各段で生成されたキャリーは次の段に伝わり、キャリー信号が最下位ビットから最上位ビットへとチェーンを「リプル(波及)」していきます。このシミュレーションでは、8段の全加算器を使って2つの8ビット数を加算します。

半加算器と全加算器の違いは何ですか?

半加算器は2つの入力ビットのみを加算して和とキャリーを生成しますが、入力キャリーを受け取ることができません。全加算器は3ビット(2つのオペランドと入力キャリー)を加算するため、段を連結することが可能になります。この加算器はすべて全加算器で構成されているため、キャリーを伝播させることができます。

1段の全加算器はどのように動作しますか?

各段は、2つの入力ビットと入力キャリーの排他的論理和として S = A ⊕ B ⊕ Cₜₙ で和ビットを計算します。キャリーアウトは Cₒₕₜ = (A·B) + (B·Cₜₙ) + (A·Cₜₙ) で、3つの入力のうち少なくとも2つが1であれば1になります。このキャリーアウトが次のビットの入力キャリーになります。

このページの操作はどのように機能しますか?

入力Aと入力Bのパネルには、ビット7からビット0までの8つのビットボタンが表示され、クリックすると0と1が切り替わります。合計パネルには結果が2進数、10進数、16進数、そしてオーバーフロー表示で示されます。リセットボタンで両方の数値をゼロにクリアし、ランダムボタンで両方にランダムなビットを設定します。

なぜ2進数の結果は9ビットで表示されるのですか?

2つの8ビット数を加算すると、8ビットレジスタが保持できる最大値である255を超える値になることがあります。追加の9ビット目は、ビット7からの最終キャリーアウトを表します。各オペランドは最大255まで達するため、可能な最大の和は510であり、これを完全に表すには9ビットが必要です。

ここでいうオーバーフローフラグとは何を意味しますか?

オーバーフローフラグは、C₈と表記される最上位ビットからのキャリーアウトを示します。符号なしの和が255を超えると「はい (C₈=1)」に設定され、答えがもはや8ビットに収まらないことを意味します。実際のCPUでは、このキャリービットはステータスレジスタに保存され、複数バイトの演算や比較に使用されます。

これはCPUが数値を加算する仕組みを正確にモデル化していますか?

はい、ロジックは忠実です。実際のハードウェアのリプルキャリー加算器と同様に、真の全加算器のブール方程式と左から右へのキャリーチェーンを実装しています。主な簡略化はタイミングです。アニメーションは、ナノ秒単位で測定される実際のゲート伝播遅延を再現するのではなく、わかりやすさのためにキャリーパスを点滅表示しています。

なぜリプルキャリー加算器は遅いとされているのですか?

各段は下位の段からのキャリーを待つ必要があるため、最悪の場合の遅延はビット数に比例して増加し、O(n)の伝播時間になります。ビット幅が広い場合、キャリーチェーンを通るこのクリティカルパスが回路のクロック速度を制限します。

より高速な加算器の設計にはどのようなものがありますか?

キャリールックアヘッド加算器は、生成信号と伝播信号からキャリーを並列に計算し、およそO(log n)の時間ですべてのキャリーに到達します。その他の高速な設計には、キャリーセレクト、キャリーセーブ、そしてKogge-Stoneのような並列プレフィックス加算器があり、いずれも追加の論理回路と引き換えに遅延を短縮しています。現代のプロセッサは単純なリプルキャリーの代わりにこれらを採用しています。

これは減算とどのように関係していますか?

コンピューターは、2番目のオペランドの2の補数(ビットを反転して1を加える)を加算することで減算を行います。入力が反転された後は同じ加算器のハードウェアが減算を処理できるため、1つのリプルキャリー加算器にインバーターと入力キャリーを組み合わせるだけで、ALU内で加算と減算の両方を実行できます。

⚙ 仕組み

インタラクティブなビット切替ボタンを備えた8ビット・リプルキャリー加算器。8段すべての全加算器にわたるキャリーチェーンの伝播を可視化します。結果を2進数、16進数、10進数で表示します。

Canvas 2DBinary AdderRipple CarryDigital LogicALU

3D · Three.js / WebGL renderer · 60 FPS target · runs fully client-side, no install

What did you find?

Add reproduction steps (optional)