1,格雷码
格雷码的特点是从一个数变为相邻的一个数时,只有一个数据发生跳变,所以,就可以避免二进制编码计数器组合电路中出现的亚稳态。比较常用于FIFO,RAM地址寻址计数器中。
由于格雷码是一种变权码,每一位没有固定的大小,很难进行比较大小和算数运算
2,二进制转换成格雷码
二进制的最高位作为格雷码的最高位,次高位的格雷码是二进制的最高位与次高位异或得到,其他位类似。
Verilog实现
module bin2gray
#(
parameter data_width = 'd4
)
(
input [data_width - 1:0] bin ,
output[data_width - 1 :0] gray ,
);
assign gray = bin^(bin>>1);
endmodule
3,格雷码转换成二进制
格雷码的最高位作为二进制的最高位,二进制的次高位是二进制的高位和格雷码的次高位相异或得到,其他位以此类推。
Verilog 代码实现
module gray2bin
#(
parameter data_width = `d4
)
(
input [data_width - 1 :0 ] gray,
output [data_width - 1 :0 ] bin
);
assign bin[data_width - 1 ] = gray[data_width - 1] ; //最高位相同
genvar i ;
generate
for(i=0 ; i<=data_width - 2;i=i+1)
begin:gray
assign bin[i] = bin[i+1] ^ gray[i];
end
endgenerate
endmodule
4,测试略