1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 【异步FIFO】格雷码和二进制的相互转换

【异步FIFO】格雷码和二进制的相互转换

时间:2022-03-09 17:27:58

相关推荐

【异步FIFO】格雷码和二进制的相互转换

这个东西一直记得乱乱的 格雷码转二进制只会铺开写 理一下

1、基本原理:

(1)二进制转格雷码:

格雷码最高位是二进制最高位,然后将二进制最高位和次高位做^

或者简单点 在二进制前补一个0,从左到右与二进制^

(2)格雷码转二进制:

二进制最高位是格雷码最高位,然后将二进制最高位和格雷码次高位做^

或者简单点 在二进制前补一个0,从左到右与格雷码^

2、代码:

(1)二进制转格雷码:

module bin2gray#(parameter DW = 8 )(input [DW - 1:0] bin ,output [DW - 1:0] gray);assign gray = (bin >> 1) ^ bin; endmodule

(2)格雷码转二进制:

module gray2bin#(parameter DW = 8 )(input[DW - 1:0] gray ,output reg [DW - 1:0] bin);integer i;always@(*)beginfor(i = 0;i < DW ;i = i + 1)beginbin[k] = ^(gray >> k); endendendmodule

放一段代码这,用于参考:

/*Logic to convert binary numbers into Gray coded binary numbers is implemented in the following Verilog Code.

*/

modulebinary2gray();

regclk;

regrstn;

reg[5:0]counter_binary,counter_binary_reg,counter_gray,counter_gray_reg;

integercount,file_wr;

/* Initial block to generate clock and reset */

initialbegin

clk=0;rstn=0;#100rstn=1;

foreverbegin

#10clk=!clk;

endend

/* Synchronous Logic for registering the data and incrementing the counter for binary data */

always@(posedgeclkornegedgerstn)

begin

if(!rstn)begin

counter_binary_reg<='b0;

counter_gray_reg<='b0;end

elsebegin

counter_binary_reg<=counter_binary+1;

counter_gray_reg<=counter_gray;

$display("binary number= 6'b%b : gray en-coded binary number = 6'b%b",counter_binary_reg,counter_gray_reg);endend

/* Logic is to get Gray code from Binary code */

function[5:0]binary2gray;

input[5:0]value;

integeri;

begin

binary2gray[5]=value[5];

for(i=5;i>0;i=i-1)

binary2gray[i-1]=value[i]^value[i-1];

end

endfunction

/* Get gray encoded output */

always@(*)

begin

counter_gray=counter_gray_reg;

counter_binary=counter_binary_reg;

counter_gray=binary2gray(counter_binary_reg);end

endmodule

参考:

Verilog 中的 ^ 的用法_李锐博恩的博客-CSDN博客_^ verilog

进阶之路——二进制与格雷码的相互转换模块设计_尼德兰的喵的博客-CSDN博客_格雷码转二进制电路图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。