BCD加法器和十进制输出

时间:2015-01-07 10:54:18

标签: computer-science computer-architecture digit bcd vlsi

使用A(Decimal Output)计算125 * A - 100 * (A Mod 4) + 2的{​​{1}}以下哪项为真?

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

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

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

4)不属于上述情况。

为什么我们的教师选择one BCD digit作为解决方案而未选择(4)?任何想法或提示?

感谢所有人。

1 个答案:

答案 0 :(得分:0)

原始等式中的

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)

其中h后缀Ch后缀为十六进制C(即Ch1100二进制),AND表示逻辑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)。

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

对于25 * A字词,我们需要一个乘法器将A乘以25。

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

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

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

事实上,在我们所做的一切中,在任何时候都没有必要的加法器,这意味着4)是唯一合适的答案。