二进制码在一些转换时变换位数多,数字电路会产生很大的尖峰电流
格雷码所有相邻整数在他们的数字表示中仅有余个数字不同,因此在任意相邻的数之间转换时,只有一位发生变化。大大地减少了由一个状态到下一个状态时逻辑的混淆。
十进制 二进制 格雷码
0 000 000
1 001 001
2 010 011
3 011 010
4 100 110
5 101 111
6 110 101
7 111 100
module gray2bin
#(parameter SIZE = 8)
( input [SIZE-1:0] gray,
output [SIZE-1:0] bin);
genvar i;
generate
for (i=0; i<SIZE; i=i+1)
begin: bit
assign bin[i] = ^gray[SIZE-1:i];
end
endgenerate
endmodule
module bin2gray
#(parameter SIZE = 8)
( input [SIZE-1:0] bin,
output [SIZE-1:0] gray);
assign gray = bin ^ {1'b0, bin[SIZE-1,1]};
endmodule