概述
这个东西一直记得乱乱的 格雷码转二进制只会铺开写 理一下
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@(*)begin
for(i = 0;i < DW ;i = i + 1)begin
bin[k] = ^(gray >> k);
end
end
endmodule
放一段代码这,用于参考:
/*Logic to convert binary numbers into Gray coded binary numbers is implemented in the following Verilog Code.
*/
module binary2gray();
reg clk;
reg rstn;
reg [5:0] counter_binary, counter_binary_reg, counter_gray, counter_gray_reg;
integer count, file_wr;
/* Initial block to generate clock and reset */
initial begin
clk = 0; rstn = 0; #100 rstn = 1;
forever begin
#10 clk = !clk;
end end
/* Synchronous Logic for registering the data and incrementing the counter for binary data */
always @ (posedge clk or negedge rstn)
begin
if (!rstn) begin
counter_binary_reg <= 'b0;
counter_gray_reg <= 'b0; end
else begin
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); end end
/* Logic is to get Gray code from Binary code */
function[5:0] binary2gray ;
input[5:0] value;
integer i;
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博客_格雷码转二进制电路图
最后
以上就是健忘小伙为你收集整理的【异步FIFO】格雷码和二进制的相互转换1、基本原理:2、代码:参考:的全部内容,希望文章能够帮你解决【异步FIFO】格雷码和二进制的相互转换1、基本原理:2、代码:参考:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复