无符号整数最大值如何在硬件中实现?


10

我正在设计一个涉及很多max函数(以及max函数作为其他max函数的参数)的设计。

为了简化硬件设计,我想知道在硬件中如何实现max?

从数学上讲,Max(a,b)可以表示为[(a + b)+ abs(b-a)] / 2。

这是如何在硬件中实现的吗?(即分阶段;加法,移位分割等)

如果是这样,如何计算差的绝对值?

Answers:


10

一个非常简单的方法是实现(a> b)?a:b。a> b可以通过从左侧开始并检查(a,b)的每个位对来实现:

  • 全部为0或全部为1:继续到下一个较低的对
  • a是1:a最高;b是1:b最高

当您知道哪一个最高时,可以通过2N-> N多路复用器选择那个。

通过一些巧妙的欺骗,可以将位对的检查与复用器组合在一起以用于同一位对。


2

让我们看一下问题中的算法:

[(a + b) + abs(b - a)]/2

它具有加法和减法阶段,然后馈入第二级加法。除以2在硬件上是微不足道的,可以通过删除LSB来完成。但是,两阶段的全加法器/减法器非常慢且占用大量门,尤其是在像您一样级联多个电容器时。

基于Wouter van Ooijen的回答,通用结构是一个数字比较器,它提供多路复用器的选择信号:

原理图

模拟该电路 –使用CircuitLab创建的原理图

上面的示意图适用于:

(A > B) ? A : B

但是请注意,通过在比较器输出和多路复用器选择之间进行不同的逻辑连接,可以很容易地将其重新配置为两个输入之间的任何比较。

因此,如果我们知道如何制定比较器的三个输出,则可以在硬件中实现任何比较。比较器逻辑在这里有很好的描述。为了优化硬件,我们只需要删除驱动未使用的比较器输出的逻辑即可。

但是最后,如果要使用硬件,则必须进行综合。因此,您不应着迷于哪种门级方案是最佳的。而是,优化您的代码和算法,以便至少不要强迫合成器产生低效的结果。“通过一些巧妙的技巧,可以将位对的检查与多路复用器组合在一起用于同一位对,”执行这种优化的最简单方法是合成。


1

如果您真的想构建专门的电路来计算最大值,则可以从具有以下方程式的基本模块开始:

Ë一世ØüŤË一世一世ñ¬一种一世b一世大号一世ØüŤ¬Ë一世一世ñ大号一世一世ñË一世一世ñ一种一世¬b一世[R一世¬Ë一世一世ñ大号一世一世ñ一种一世¬大号一世一世ñb一世Ë一世一世ñ一种一世b一世

然后将它们与最高有效位数相联系,以供下一位数输入。关键部分从MSB到LSB,而基于减法的电路充其量只有一条从LSB到MSB再回到LSB的关键路径。

它等效于进位纹波加法器。如果您有兴趣,可以构建与进位保存或进位选择加法器等效的方法。

Ë大号¬Ë一种

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.