Answers:
一个非常简单的方法是实现(a> b)?a:b。a> b可以通过从左侧开始并检查(a,b)的每个位对来实现:
当您知道哪一个最高时,可以通过2N-> N多路复用器选择那个。
通过一些巧妙的欺骗,可以将位对的检查与复用器组合在一起以用于同一位对。
让我们看一下问题中的算法:
[(a + b) + abs(b - a)]/2
它具有加法和减法阶段,然后馈入第二级加法。除以2在硬件上是微不足道的,可以通过删除LSB来完成。但是,两阶段的全加法器/减法器非常慢且占用大量门,尤其是在像您一样级联多个电容器时。
基于Wouter van Ooijen的回答,通用结构是一个数字比较器,它提供多路复用器的选择信号:
模拟该电路 –使用CircuitLab创建的原理图
上面的示意图适用于:
(A > B) ? A : B
但是请注意,通过在比较器输出和多路复用器选择之间进行不同的逻辑连接,可以很容易地将其重新配置为两个输入之间的任何比较。
因此,如果我们知道如何制定比较器的三个输出,则可以在硬件中实现任何比较。比较器逻辑在这里有很好的描述。为了优化硬件,我们只需要删除驱动未使用的比较器输出的逻辑即可。
但是最后,如果要使用硬件,则必须进行综合。因此,您不应着迷于哪种门级方案是最佳的。而是,优化您的代码和算法,以便至少不要强迫合成器产生低效的结果。“通过一些巧妙的技巧,可以将位对的检查与多路复用器组合在一起用于同一位对,”执行这种优化的最简单方法是合成。