Verilog描述——二进制码与格雷码的转换

BIN_GRAY_EX

二进制码和格雷码的相互转换。

bin2gray

二进制码转为格雷码(编码):从左右边一位起,一次将每一位与左边一位异或(XOR),做为格雷码对应位的值,最左边一位不变(相当于左边是0)。参考代码如下:

	graycode = binarycode ^ (binarycode >> 1);

gray2bin

格雷码转为二进制码(解码):从左边起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变):

always @ ( graycode ) begin
	for (i=0; i<n-1; i=i+1) begin
		binarycode[i] = ^(graycode>>1);
	end
end

为什么要用格雷码

格雷码属于可靠性编码,是一种错误最小化的编码方式。

它在相邻位之间转换时(例如加一或减一时),只有一位产生变化,大大地减少了由一个状态到下一个状态时的逻辑混淆。

由于这种编码中相邻的两个码组之间只有一位不同,与其他编码同时改变两位或多位的情况相比更为可靠,所以在异步处理或某些状态机编码中会经常使用格雷码。

为什么要转换

格雷码不是权重码,每一位码没有确定的大小,不能直接进行大小和算术运算比较,要经过一次码变化,变成自然二进制码,之后在再进行处理。

猜你喜欢

转载自blog.csdn.net/sinat_31206523/article/details/108408271