編集履歴一覧に戻る
AoiSayaのアイコン画像

AoiSaya が 2025年12月21日23時44分22秒 に編集

初版

タイトルの変更

+

GreenPAKでつくるALU

タグの変更

+

GreenPAK

+

SLG46826

+

ALU

記事種類の変更

+

セットアップや使用方法

本文の変更

+

# はじめに GreenPAK(SLG46826) 1個で作るALUを紹介します。 このALUは4ビット同士の加減算を実行できます。 # 基本的な考え方 ## 半加算器と全加算器 2つの1ビットの信号を加算する回路を半加算器、桁上がり信号も足す回路を全加算器と呼びます。半加算器は、ANDとXORで作ることが出来ます。全加算器は、半加算器2個とORで作ることが出来ます。 この様子を図1に示します。 ![図1 半加算器と全加算器](https://camo.elchika.com/5faf8de89dab8f2449a11d6df455e2c40426cf85/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f32333936363533342d646436662d346534352d623236372d353532303765363266343136/) 半加算器で、A,Bは入力、Sは加算結果、Cは桁上がりです。 全加算器では、A,Bは入力、CIは桁上がり入力、Sは加算結果、COは桁上がり出力です。 真理値表は、入力と出力の関係を表にしたものです。 ## 2の補数表現 2進数でマイナスの数を表現する方法を表に示します。これは2の補数表現と呼ばれるもので、簡易な回路で加減算しやすいことからよく使われている表記法です。 - **特徴** 1. 先頭ビットで正負を判定できる 2. そのまま足すだけで加算が出来る 3. すべてのビットの0/1を反転して1を足すだけで、正負を反転できる |2進数|10進数| |---|---| |1000|-8| |1001|-7| |1010|-6| |1011|-5| |1100|-4| |1101|-3| |1110|-2| |1111|-1| |0000| 0| |0001| 1| |0010| 2| |0011| 3| |0100| 4| |0101| 5| |0110| 6| |0111| 7| ## 4ビットの加算器と減算器  全加算器を4個使うと4ビットの加算器を作ることが出来ます。全加算器を ⊕で表したときの4ビット加算器を図2左側に示します。また、2の補数表現の特徴を生かして、引く数のビットを反転して引かれる数に加算して更に1を足すことで減算器を作ることが出来ます。4ビット減算器を図2の右側に示します。 ![図2 加算器と減算器](https://camo.elchika.com/600afb7e0dea6d6944cdcc4e54c7a823a0320a40/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f37653931653639392d383034312d346437342d623431612d333430326465366266653532/) ## 4ビットの加減算器と最長経路  加算器と減算器を応用して、AS信号が0のときは加算、1のときは減算をする加減算器は図3の左側のようになります。  この加減算器の高速化について考えてみましょう。もっとも多くの素子を通過する経路(最長パス)を図3の右側に赤線で示しました。この線が意味するのは、ASやB0が変化してからS3やCOが確定するまでに5素子分の遅延があるということです。そこでこの経路を短くする方法を紹介します。 ![図3 加減算器と最長経路](https://camo.elchika.com/283d3c95d546757aa1f895fac7310dc90de75ece/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f33303836333466332d636335322d346432342d616365322d356234366563353265326432/) ## Carry Select Adder  通過する素子を減らす方法としてCarry Select Adder(CSA)を採用しました。これはAI2とBI2を足した時のキャリア(CO2)が1のときと0のときのS3とCOを計算しておいてCO2が確定したときに正しい方を選択して出力する方法です。いわゆる投機的実行の一種です。図4にこの時の回路図を示します。青色の回路がCO2が0のとき、赤線の回路がCO2が1のときの計算に対応します。このようにすることで最長パスを4素子に減らすことが出来ます。通常はもっとビット数が大きいときに威力を発揮します。GreenPAKではこの工夫により最長パスを3素子に減らすことが出来ました。 ![図4 Carry Select Adder](https://camo.elchika.com/58e9e8ee906dadf101c203e1c8dd7e605d73dcf2/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f34376662363664652d383631382d343461652d623630622d326330613832383435313766/) # SLG46826によるALUの実装 図5にGreenPAKで書いたALUの回路図を示します。ここでは、おまけとしてS3=S2=S1=S0=0のときに1となるZERO出力を設けています。この出力が最長パスになります。 図6にSimulation結果を示します。CI→COが61ns@3.3V,23℃が得られました。 ![図5 ALU](https://camo.elchika.com/b4159901acb769f2250ae259e1512fc186a3e281/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f30613662383735312d373430392d343137332d623234352d313231643361383730313532/) ![図6 ALUのSimulation結果](https://camo.elchika.com/a31bfb0a9bb10cee3a0f952fb8e8bd24dc11dac7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f30383562623466332d343530612d343164632d393963622d6164373366646533326230382f64633738383765322d636438392d346166372d623161312d616463616364623131396439/) # おわりに  GreenPAKに入るALUの作り方をご紹介しました。 SLG46826 1個には、4ビットのALUしか入りませんでした。マイコンを作るには複数個必要ですね。また、動作速度もそれほど高速ではありません。GreenPAKで演算回路を作る際の動作速度のご参考になれば幸いです。 # 免責事項 本記事の正確性については努力しておりますが、当方は利用者が当記事の情報を用いて行う一切の行為について何ら責任を負うものではありません。本記事の情報の利用、内容によって、利用者にいかなる損害、被害が生じても、著者は一切の責任を負いません。ご自身の責任においてご利用いただきますようお願いいたします。 # Author [GitHub/AoiSaya](https://github.com/AoiSaya) [Twitter ID @La_zlo](https://twitter.com/La_zlo)