我试图在两个二进制序列中执行总线反转编码,比如像 00011011&的8位序列。 10110011
根据执行反转编码的方法,首先计算汉明距离(在两个序列之间执行XOR运算)。
两个序列的异或操作给出10101000。
汉明距离表示XOR运算结果中的1的数量。
这里的汉明距离是3。
根据总线反转编码的一般规则,如果汉明距离更大,则序列将被反转(0&#39; s为1&#39; s&amp; 1&#39; s为0&#39; s)比特序列长度的一半。在序列的开头添加附加1 。如果汉明距离 小于比特序列长度的一半,则序列将不会被反转,并且在序列的开头添加 0 < / strong>即可。
答案 0 :(得分:0)
~
是一个按位反转(补码)
-
是数值反转(二进制补码)。
~00011011 => 11100100
-00011011 => 11100101
在verilog中^
是按位XOR,例如:
00011011 ^ 10110011 => 10101000
SystemVerilog具有$countones()
功能,虽然您的工具可能无法合成,但在one example之前已经问过这部分问题。
我很欣赏在学习语言时,参考手册看起来令人生畏,但它对于查找操作和功能非常有用: