BCD加法器和十进制输出
BCD adder and Decimal Output
用于计算 125 * A - 100 * (A Mod 4) + 2
的 Decimal 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
其中 a
、b
、c
和 d
是任意二进制数字,我们将得到
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 * Y
和25 * A
),再加上一项常数项(2
)。
术语 100 * Y
在 BCD 中很简单:只需将 Y
两位数字的位置向左移动到百位。
对于 25 * A
项,我们需要一个乘数来将 A
乘以 25。
现在,我们需要将所有三个项加在一起,但是:
100 * Y
和 25 * A
中的设置位("one" 位)之间没有重叠。事实上,term 100 * Y
只能设置百位的两个最高有效位(回到 Y
的定义),而 term 25 * A
最多设置两个最低有效位相同的数字位置。要看到这一点,请记住 25 * A = 100 * A / 4
,这意味着该术语的百位数字不能超过 3。
100 * Y
和25 * A
都是25的倍数,也就是说它们的和也是25的倍数,所以那个和的低位只能是0(0000)或5(0101) .第二位不能在该总和中设置,因此也没有与常量 2
项重叠。
由于在考虑可以设置哪些位位置时所有三项都不重叠,我们可以使用简单的逻辑或运算而不是实际的加法器将所有三项相加。
事实上,在我们所做的一切中,加法器从来都不是必需的,这意味着 4) 是唯一合适的答案。
用于计算 125 * A - 100 * (A Mod 4) + 2
的 Decimal 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
其中 a
、b
、c
和 d
是任意二进制数字,我们将得到
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 * Y
和25 * A
),再加上一项常数项(2
)。
术语 100 * Y
在 BCD 中很简单:只需将 Y
两位数字的位置向左移动到百位。
对于 25 * A
项,我们需要一个乘数来将 A
乘以 25。
现在,我们需要将所有三个项加在一起,但是:
100 * Y
和25 * A
中的设置位("one" 位)之间没有重叠。事实上,term100 * Y
只能设置百位的两个最高有效位(回到Y
的定义),而 term25 * A
最多设置两个最低有效位相同的数字位置。要看到这一点,请记住25 * A = 100 * A / 4
,这意味着该术语的百位数字不能超过 3。100 * Y
和25 * A
都是25的倍数,也就是说它们的和也是25的倍数,所以那个和的低位只能是0(0000)或5(0101) .第二位不能在该总和中设置,因此也没有与常量2
项重叠。
由于在考虑可以设置哪些位位置时所有三项都不重叠,我们可以使用简单的逻辑或运算而不是实际的加法器将所有三项相加。
事实上,在我们所做的一切中,加法器从来都不是必需的,这意味着 4) 是唯一合适的答案。