gct*_*gct 5 hardware optimization bit-manipulation fpga
我正在研究一种我正在尝试优化的算法,它基本上有点麻烦,其次是在一个紧凑的反馈中添加了一些内容.如果我可以为加法器使用进位保存添加,它会真正帮助我加快速度,但我不确定我是否可以通过添加来分配操作.
特别是如果我代表:
a = sa+ca (state + carry)
b = sb+cb
Run Code Online (Sandbox Code Playgroud)
我可以用s和c表示(a >>> r)吗?一个|怎么样?b和a&b?
想一想......
sa = 1 ca = 1
sb = 1 cb = 1
a = sa + ca = 2
b = sb + cb = 2
(a | b) = 2
(a & b) = 2
(sa | sb) + (ca | cb) = (1 | 1) + (1 | 1) = 1 + 1 = 2 # Coincidence?
(sa & sb) + (ca & cb) = (1 & 1) + (1 & 1) = 1 + 1 = 2 # Coincidence?
Run Code Online (Sandbox Code Playgroud)
让我们尝试一些其他的价值观:
sa = 1001 ca = 1 # Binary
sb = 0100 cb = 1
a = sa + ca = 1010
b = sb + cb = 0101
(a | b) = 1111
(a & b) = 0000
(sa | sb) + (ca | cb) = (1001 | 0101) + (1 | 1) = 1101 + 1 = 1110 # Oh dear!
(sa & sb) + (ca & cb) = (1001 & 0101) + (1 & 1) = 0001 + 1 = 2 # Oh dear!
Run Code Online (Sandbox Code Playgroud)
因此,通过4位计数器示例证明您不能通过添加分配AND或OR.
怎么样'>>>'(无符号或逻辑右移).使用最后一个示例值,r = 1:
sa = 1001
ca = 0001
sa >>> 1 = 0101
ca >>> 1 = 0000
(sa >>> 1) + (ca >>> 1) = 0101 + 0000 = 0101
(sa + ca) >>> 1 = (1001 + 0001) >>> 1 = 1010 >>> 1 = 0101 # Coincidence?
Run Code Online (Sandbox Code Playgroud)
让我们看看这是否也是巧合:
sa = 1011
ca = 0001
sa >>> 1 = 0101
ca >>> 1 = 0000
(sa >>> 1) + (ca >>> 1) = 0101 + 0000 = 0101
(sa + ca) >>> 1 = (1011 + 0001) >>> 1 = 1100 >>> 1 = 0110 # Oh dear!
Run Code Online (Sandbox Code Playgroud)
通过反例再次证明.
所以逻辑右移也不是对加法的分配.