在8位2s补码中给出以下内容:
11000011 = -61 (decimal)
00011111 = +31 (decimal)
我需要获得逻辑电路的布尔表达式,当其8位输入out
(也是2s补码表示)时,其输出in
变高。在以下范围内:
-61 < in < 31
8位数的数字行(2s补码):
10000000
(最负面的)..... 11000011
( - 61)..... 00000000
..... 00011111
(31)。 .... 01111111
(最积极的)
除了强制执行和逐位比较之外,还有什么方法可以解决这个问题吗?
修改:不允许以下语句
out = ((in < 11000011 && in > 10000000) || (in > 00011111 && in < 01111111)) ? 1'b0 : 1'b1;
答案 0 :(得分:1)
我不确定是否有更快的方法来执行此操作。但我所做的是在尝试找到模式之前以2s补码格式列出数字。以下数字块按数字顺序排序(从00000000
到11111111
,以便可以更清楚地看到模式。
让MSB为A
,LSB为H
。等式为:A B C + A B D + A B E + A B F + A' B' C' D' + A' B' C' E' + A' B' C' F' + A' B' C' G' + A' B' C' H'
A' B' C' D'
(最容易观察):
00000000(&lt; - min) 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111
A' B' C' E' + A' B' C' F' + A' B' C' G' + A' B' C' H'
:
00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110
A B D + A B E + A B F
:
11000100 11000101 11000110 11000111 11001000 11001001 11001010 11001011 11001100 11001101 11001110 11001111 11010000 11010001 11010010 11010011 11010100 11010101 11010110 11010111 11011000 11011001 11011010 11011011 11011100 11011101 11011110 11011111
A B C
(最容易观察):
11100000 11100001 11100010 11100011 11100100 11100101 11100110 11100111 11101000 11101001 11101010 11101011 11101100 11101101 11101110 11101111 11110000 11110001 11110010 11110011 11110100 11110101 11110110 11110111 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111(&lt; -max)