总线反转编码的 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.

之前问过

在学习语言的过程中,我很感激参考手册看起来令人生畏,但它对于查找操作和函数非常有用:

SystemVerilog IEEE 1800-2012 Standard