自然二進位製碼與格雷碼相互轉換

2021-10-10 02:21:42 字數 2505 閱讀 7429

格雷碼是由弗蘭克·格雷於2023年發明,其主要特點是相鄰編碼值中間只有乙個位元發生改變,又被稱為迴圈碼。

格雷碼是一種無權碼,採用絕對編碼方式,典型格雷碼是一種具有反射特性和迴圈特性的單步自補碼,它在任意兩個相鄰的數之間轉換時,只有乙個數字發生變化。它大大地減少了由乙個狀態到下乙個狀態時邏輯的混淆。

自然二進位製碼轉換成二進位制格雷碼,其法則是保留自然二進位製碼的最高位作為格雷碼的最高位,而次高位格雷碼為二進位製碼的高位與次高位相異或,格雷碼其餘各位依次求之。

原理: 

若二進位製碼表示為: 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)。

圖示如下:

**如下:

module b_to_g(binary,gray);

parameter ptr = 8; //設定位數

input [ptr-1:0] binary;

output [ptr-1:0] gray;

reg [ptr-1:0] gray;

integer i;

always @(*) begin

for (i=0; i測試**如下:

//b_to_g_tb

`timescale 1 ns/ 1ns

module b_to_g_tb();

parameter ptr = 8;

reg [ptr-1:0] binary;

wire [ptr-1:0] gray;

integer i;

b_to_g my_b_to_g(

.binary(binary),

.gray(gray));

initial

begin

binary = 0;

#2 for(i=0;i<20;i=i+1)

begin

#2 binary = $random;

endend

endmodule

**波形如下(清晰顯示請點開放大):

二進位制格雷碼轉換成自然二進位製碼,其法則是保留格雷碼的最高位作為自然二進位製碼的最高位,而次高位自然二進位製碼為高位自然二進位製碼與次高位格雷碼相異或,而自然二進位製碼的其餘各位依次求之。

原理: 

若二進位制格雷碼表示為: 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 g_to_b (

binary, gray);

parameter ptr = 8;

input [ptr-1:0] gray;

output [ptr-1:0] binary;

integer i;

reg [ptr-1:0] binary;

always @(*) begin

//這裡我用for (i=0; i=0; i=i-1)

begin

binary[i] = binary[i+1] ^ gray[i];

endbinary[ptr-1] = gray[ptr-1];

endendmodule

測試**如下:

//g_to_b_tb

`timescale 1 ns/1 ns

module g_to_b_tb();

parameter ptr = 8;

integer i;

reg [ptr-1:0] gray;

wire [ptr-1:0] binary;

g_to_b my_g_to_b(

.gray(gray),

.binary(binary)

);initial

begin

gray = 0;

#2 for (i=0; i<30; i=i+1)

begin

#2 gray = $random;

endend

endmodule

**波形如下(清晰顯示請點開放大):

Verilog實現二進位製碼與格雷碼轉換

格雷碼是一種常見的編碼方式,相鄰狀態間只有一位不同 這就意味著相鄰兩個狀態間進行轉換時,只有一位發生變化,因而極大的減小了出錯機率。反之,如果使用二進位制編碼,如011 100時三位均發生改變,因此出錯的機率就會大大增加 格雷碼以及其餘常見編碼的知識詳見 verilog常見編碼方式 二進位製碼 格雷...

二進位制格雷碼與自然二進位製碼的互換

原始網頁 http www.pcdog.com a 19 10 a210086.html 在精確定位控制系統中,為了提高控制精度,準確測量控制物件的位置是十分重要的。目前,檢測位置的辦法有兩種 其一是使用位置感測器,測量到的位移量由變送器經a d轉換成數字量送至系統進行進一步處理。此方法精度高,但在...

二進位制格雷碼與自然二進位製碼的互換

二進位制格雷碼與自然二進位製碼的互換 中國科學院光電技術研究所 遊志宇 在精確定位控制系統中,為了提高控制精度,準確測量控制物件的位置是十分重要的。目前,檢測位置的辦法有兩種 其一是使用位置感測器,測量到的位移量由變送器經a d轉換成數字量送至系統進行進一步處理。此方法精度高,但在多路 長距離位置監...