The Elements of Computing systemsブックに記載されている仕様からALUを実装していました。私は1つの問題だけにこだわっています。特定の数値がゼロかどうかを確認するにはどうすればよいですか。私ができることの1つは、バス内のすべてのビット、およびその上にnot gateを適用することです。しかし、他のエレガントなソリューションが必要です。
The Elements of Computing systemsブックに記載されている仕様からALUを実装していました。私は1つの問題だけにこだわっています。特定の数値がゼロかどうかを確認するにはどうすればよいですか。私ができることの1つは、バス内のすべてのビット、およびその上にnot gateを適用することです。しかし、他のエレガントなソリューションが必要です。
回答:
すべてのビットをOR演算する方法はありません。ただし、シリコンの2つの入力ゲートにも制限されません。プルアップネットワークに4つの直列p型トランジスタを、プルダウンネットワークに4つの並列n型トランジスタを配置することにより、CMOSロジックで4入力NORゲートを構築できます。これにより、ツリートポロジの深さが減少し、伝播遅延が減少します。直列トランジスタの累積電圧降下によってプルアップが「1」になるのに十分なプルアップにならないうちに、これまでのところその理論を理解することができます。
8ビットマシンの典型的な解決策は、ALUが最新の操作の結果を表す多数の「フラグ」ビットを生成することでした。任意の数のフラグビットを配置することは可能ですが(つまり、CPUのすべてのレジスタに「Z」フラグを設定することもできます)、通常は計算したばかりで最も興味深いので、そのようにするのはある程度の理にかなっています。
これらの古いCPUの一部は、ほぼすべてのデータ移動に対して自動的にフラグビットを設定しますが、特定のレジスタがゼロかどうかを突然知る必要がある場合は、コードに特定の「比較」命令を付ける必要があります。そして、すべてのレジスタにゼロチェックを提供するか、計算されたばかりのものに提供するかにかかわらず、すべてのビットをORするよりも、「この単語はゼロですか」をチェックする簡単な方法はありません。
MIPSなどの一部のCPUには、常にゼロを含むレジスタがあり、別のレジスタのゼロのテストが非常に高速になります。
私は大ファンですor_reduce
-ほとんどの合成ツールは、あなたが何をしているかを正確に知っているため、最適な実装に最適化します。