verilog实现格雷码与二进制的转化:
1)自然二进制码转换为格雷码的方法
自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高 位相异或,而格雷码其余各位与次高位的求法相类似。
原理: 若二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0];
相应地, 则二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0].
其中最高位保留: G[N-1] = B[N-1];
其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, ..., n-2)
图示如下:
bin[3] bin[2] bin[1] bin[0] ---二进制值 : 二进制
+ 0 bin[3] bin[2] bin[1] ---右移值(二进制)
gray[3] gray[2] gray[1] gray[0] ---对应的格雷码值
总结:格雷码的值只需要在原来的二进制的基础上右移一位再异或原来的二进制值即可得到。
module binary2grey #(
parameter N = 4
)(
input [N-1: 0] binary ,
output wire [N-1: 0] grey
);
//=====================================================================\
// ********** Define Parameter and Internal Signals *************
//=====================================================================/
//======================================================================
// *************** Main Code ****************
//======================================================================
assign grey = {1'b0,binary[N-1:1]}^binary;
endmodule
2)格雷码转换为二进制码的实现方法
二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制 码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
原理: 若二进制格雷码表示为: G[N-1]G[N-2]...G[2]G[1]G[0];
相应地, 则二进制码表示为: B[N-1]B[N-2]...B[2]B[1]B[0].
其中最高位保留: B[N-1] = G[N-1];
其他各位: B[i-1] = G[i-1] xor B[i]. (i = 1, 2, ..., n-1)
图示如下:
module grey2binary #(
parameter N = 4
)(
input [N-1: 0] grey ,
output wire [N-1: 0] binary
);
//=====================================================================\
// ********** Define Parameter and Internal Signals *************
//=====================================================================/
//======================================================================
// *************** Main Code ****************
//======================================================================
assign binary[N-1] = grey[N-1];
generate
genvar i;
for(i=0;i<N-1;i=i+1) begin:b2g
assign binary[i] = grey[i]^binary[i+1];
end
endgenerate
endmodule