2進数がゼロかどうかを調べる方法


16

The Elements of Computing systemsブックに記載されている仕様からALUを実装していました。私は1つの問題だけにこだわっています。特定の数値がゼロかどうかを確認するにはどうすればよいですか。私ができることの1つは、バス内のすべてのビット、およびその上にnot gateを適用することです。しかし、他のエレガントなソリューションが必要です。


6
あなたが本当に立ち往生しているように聞こえません-もっとあなたが満足していないようです:)
vicatcu

7
X入力NOR エレガントなソリューションです。レジスタにゼロが含まれているかどうかを判断するには、すべてのビットを調べて、論理0が含まれているかどうかを確認する必要があります。シングルビット出力が必要であることを指定しました。したがって、X入力と、NORのような1つの出力を持つ関数が必要です。
W5VO

回答:


14

すべてのビットをOR演算する方法はありません。ただし、シリコンの2つの入力ゲートにも制限されません。プルアップネットワークに4つの直列p型トランジスタを、プルダウンネットワークに4つの並列n型トランジスタを配置することにより、CMOSロジックで4入力NORゲートを構築できます。これにより、ツリートポロジの深さが減少し、伝播遅延が減少します。直列トランジスタの累積電圧降下によってプルアップが「1」になるのに十分なプルアップにならないうちに、これまでのところその理論を理解することができます。


多数のビットに対して、NORゲートとNANDゲートを交互に使用するのは理にかなっていますか?たとえば、4つのゲートのファンインで、64ビットのゼロテストでは、4ビットが0の場合1の結果を供給する16個のNORゲートを使用し、4ビットすべてが1の場合0の結果を供給する4つのNANDゲートを使用できます(すべて元の16ビットは0)であったため、これら4つの結果は最終的なNORゲートに送信されます。(私はEEではありませんが、中間インバーターを使用して(すべてゼロの結果を0に戻す)、NORゲートのみを使用するよりも優れているようです。)
Paul A. Clayton

ゼロ検出のレイテンシを追加レイテンシに部分的に折りたたむ方法もあります。
ポールA.クレイトン

NMOSの使用について:1つのプルアップ抵抗とXトランジスタを使用して、入力が1の場合にレベルを0に下げますか?
オスカースコグ


8

8ビットマシンの典型的な解決策は、ALUが最新の操作の結果を表す多数の「フラグ」ビットを生成することでした。任意の数のフラグビットを配置することは可能ですが(つまり、CPUのすべてのレジスタに「Z」フラグを設定することもできます)、通常は計算したばかりで最も興味深いので、そのようにするのはある程度の理にかなっています。

これらの古いCPUの一部は、ほぼすべてのデータ移動に対して自動的にフラグビットを設定しますが、特定のレジスタがゼロかどうかを突然知る必要がある場合は、コードに特定の「比較」命令を付ける必要があります。そして、すべてのレジスタにゼロチェックを提供するか、計算されたばかりのものに提供するかにかかわらず、すべてのビットをORするよりも、「この単語はゼロですか」をチェックする簡単な方法はありません。


1
これは32ビットARMチップの典型でもあり、ほとんどのアーキテクチャの典型です。ARMの場合、APSR(アプリケーションプログラムステータスレジスタ)はN、Z、C、V、およびQビット(負、ゼロ、キャリー、oVerflow、saturateQ)ビットを保持して、探しているゼロビットに加えて他の機能を提供します。これらは、あなたのマシンにとって役に立つかもしれませんし、そうでないかもしれません。
ケビンフェルメール

私は解決策を申し分なく受けましたが、バグがあり、ほんの少しだけ取得するために多くのロジックを使用する必要があります。エレガントなソリューションが必要です。
Rick_2047

@ Rick_2047-あなたはこれをどのように実装するかについて言及しませんでしたが、私はFPGAを推測していますか?高いファンインゲートを実行するためだけに、論理ブロックの数を制限しなければならないことも、私を悩ませます。それは、そのうちの1つだけを入れる理由です。
ジャストジェフ

FPGAではなく、HDLおよびハードウェアシミュレーターです。
Rick_2047

3

MIPSなどの一部のCPUには、常にゼロを含むレジスタがあり、別のレジスタのゼロのテストが非常に高速になります。


ゼロを含むレジスタがある場合、どうすれば番号を確認できますか?また、16ビットのバスがゼロであるかどうかに応じてtrueまたはfalseである1ビットのみを生成したい
-Rick_2047

1
コンパレータ...栄光​​のNORゲートに縮退
...-vicatcu

レジスタが安価で(FPGAのSRAMブロックにある)、他の理由でレジスタ比較命令が必要な場合、彼はこの方法で何かを得るかもしれません。
jpc

@vicatu-実際には、2つのNビット数を比較する場合、N個の2入力XORゲートが必要です。OR / NORは、テストがゼロの場合にのみ有効です。
JustJeff

しかし、最終的には、入力ビットと同じ数のゲート、または少なくとも同じ数のトランジスタを使用する必要があります。
-Rick_2047

0

私は大ファンですor_reduce-ほとんどの合成ツールは、あなたが何をしているかを正確に知っているため、最適な実装に最適化します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.