总线反转编码的 Verilog 代码
Verilog Code for Bus Invert Coding
我正在尝试在两个二进制序列之间执行总线反转编码,比如像 00011011 & 10110011 这样的 8 位序列。
按照反转编码的方法,首先计算汉明距离(两个序列之间进行异或运算)
两个序列的异或运算给出10101000。
汉明距离表示异或运算结果中1的个数。
这里的汉明距离是3.
根据总线反转编码的一般规则,如果汉明距离大于位序列长度的一半,序列将被反转(0 为 1,1 为 0)。 额外的 1 将被添加 在序列的开头。如果汉明距离小于位序列长度的一半,则序列不会被反转并且0是添加在序列的开头。
~
是按位取反(补码)。
-
是数值反转(二进制补码)。
~00011011 => 11100100
-00011011 => 11100101
在verilog中^
是按位异或,例如:
00011011 ^ 10110011 => 10101000
SystemVerilog 具有 $countones()
功能,尽管您的工具可能无法综合它,这部分问题已在 one example.
之前问过
在学习语言的过程中,我很感激参考手册看起来令人生畏,但它对于查找操作和函数非常有用:
我正在尝试在两个二进制序列之间执行总线反转编码,比如像 00011011 & 10110011 这样的 8 位序列。
按照反转编码的方法,首先计算汉明距离(两个序列之间进行异或运算)
两个序列的异或运算给出10101000。
汉明距离表示异或运算结果中1的个数。
这里的汉明距离是3.
根据总线反转编码的一般规则,如果汉明距离大于位序列长度的一半,序列将被反转(0 为 1,1 为 0)。 额外的 1 将被添加 在序列的开头。如果汉明距离小于位序列长度的一半,则序列不会被反转并且0是添加在序列的开头。
~
是按位取反(补码)。
-
是数值反转(二进制补码)。
~00011011 => 11100100
-00011011 => 11100101
在verilog中^
是按位异或,例如:
00011011 ^ 10110011 => 10101000
SystemVerilog 具有 $countones()
功能,尽管您的工具可能无法综合它,这部分问题已在 one example.
在学习语言的过程中,我很感激参考手册看起来令人生畏,但它对于查找操作和函数非常有用: