BCD加法器和十进制输出

BCD adder and Decimal Output

用于计算 125 * A - 100 * (A Mod 4) + 2Decimal Output 且具有 A ( one BCD digit) 以下哪项是正确的?

1) 我们至少需要两位十进制加法器。

2) 我们至少需要两个4位二进制加法器。

3) 我们至少需要一个十进制乘法器和一个十进制加法器。

4) 以上都不是。

为什么我们的讲师 select (4) 作为解决方案而不是 select 教 (3)?有什么想法或提示吗?

感谢大家。

原式中的

A Mod 4给出了BCD数字的最低两位A。那么,让我们分别考虑 A 的两个最高和最低有效位,如下所示:

X = A AND 3 = A Mod 4  (two least significant bits)
Y = A AND Ch           (two most significant bits)

其中Ch中的h后缀表示十六进制的C(即Ch是二进制的1100),AND表示逻辑与运算。

例如,如果我们有

A = abcd

其中 abcd 是任意二进制数字,我们将得到

X = 00cd
Y = ab00

重要的是,请注意

A = X + Y
(ab00 + 00cd = abcd)

这使我们能够将乘法的分配性应用于加法,特别是

  125 * A
= 125 * (X + Y)
= 125 * X + 125 * Y

所以,我们有

  125 * A - 100 * (A Mod 4) + 2     (original equation)
= 125 * (X + Y) - 100 * X + 2       (replace A with X + Y)
= 125 * Y + 125 * X - 100 * X + 2   (distributivity)
= 125 * Y + 25 * X + 2              (125 * X - 100 * X = 25 * X)
= 100 * Y + 25 * (X + Y)            (125 * Y = 100 * Y + 25 * Y)
= 100 * Y + 25 * A + 2              (replace X + Y with A)

在最后的等式100 * Y + 25 * A + 2中,我们需要计算两项(100 * Y25 * A),再加上一项常数项(2)。

术语 100 * Y 在 BCD 中很简单:只需将 Y 两位数字的位置向左移动到百位。

对于 25 * A 项,我们需要一个乘数来将 A 乘以 25。

现在,我们需要将所有三个项加在一起,但是:

  • 100 * Y25 * A 中的设置位("one" 位)之间没有重叠。事实上,term 100 * Y 只能设置百位的两个最高有效位(回到 Y 的定义),而 term 25 * A 最多设置两个最低有效位相同的数字位置。要看到这一点,请记住 25 * A = 100 * A / 4,这意味着该术语的百位数字不能超过 3。
  • 100 * Y25 * A都是25的倍数,也就是说它们的和也是25的倍数,所以那个和的低位只能是0(0000)或5(0101) .第二位不能在该总和中设置,因此也没有与常量 2 项重叠。

由于在考虑可以设置哪些位位置时所有三项都不重叠,我们可以使用简单的逻辑或运算而不是实际的加法器将所有三项相加。

事实上,在我们所做的一切中,加法器从来都不是必需的,这意味着 4) 是唯一合适的答案。