「LSI回路設計」という授業の中で、「半加算器を設計する」という課題がありました。
まずはトランジスタレベルで設計をし、SPICEで素子のサイズにあたりをつけ、最後はレイアウトまでするという課題でした。
そして、半加算器の遅延時間が最も短い人が優勝というもの。
半加算器というのは、実はかなり単純なものでして。
そんなに考える余地は無いような気がしました。
でも、これが初めてみると、意外と奥深かったんです。
その時学んだことは、他で使える内容も多いので、ここに書いていこうと思います。
まず半加算器とは何か。
コンピュータは、”0″と”1″だけで処理をしているなんて言います。
もっといえば、”0″と”1″の足し算だけです。
コンピュータがやっている計算は、ざーっくり言えばこれだけ。
0 + 0 = 00
0 + 1 = 01
1 + 0 = 01
1 + 1 = 10
これを実現するのが半加算器というやつです。
2つの値の足し算だから、「2入力」です。
答えは桁上がりで2桁になりうるので、「2出力」です。
半加算器は、「2入力2出力」。
「2入力2出力」というのは、「2入力1出力のゲートが2つ」と言い換えることもできます。
結局、半加算器は論理ゲート2つだけってことです。
では、その2つの論理ゲートって何でしょう。
ANDなのか、NANDなのか、ORなのか、NORなのか、はたまたXORか、XNORか。
(コピペ)
上の計算から、1桁目だけを取り出します。
0 + 0 = x0
0 + 1 = x1
1 + 0 = x1
1 + 1 = x0
これは、XORゲートです。
次に2桁目だけを取り出します。
0 + 0 = 0x
0 + 1 = 0x
1 + 0 = 0x
1 + 1 = 1x
これは、ANDゲートです。
つまり、「半加算器はXORゲートとANDゲートである」ということ。
この二つを比較するとXORゲートの方が複雑であるため、遅延は主にXORによって引き起こされます。
だから、XORについて散々調べて考えたんです。
だから、無駄に思い入れがあったりするんです。
もうANDはどうでも良いとして。
次に、XORをCMOSで構成するには・・・というのを考えます。
コメント