当前位置:   article > 正文

格雷码计数器_格雷码计数器的优点

格雷码计数器的优点

作用:实现FIFO存储器读写指针比较好的方法就是使用格雷码计数器。格雷码计数器的优势在于其相邻两个数值之间只有一位发生变化,提高了系统的抗干扰能力,而且在计数时,各个输出的门电路翻转次数要远远小于二进制计数器,从而可以大幅度降低系统的功耗。

实现步骤:

  1. 将格雷值转换为二进制值。
  2. 根据条件递增二进制值。
  3. 将二进制值转换为格雷码
  4. 将计数器的最终格雷值保存到寄存器中。

格雷码转二进制

格雷码转二进制的公式如下:

                        binn−1 = grayn−1

                        bini = grayi⨁bini+1

格雷码转二进制Verilog代码如下:

  1. module gray_to_bin (gray,bin);
  2. parameter WIDTH = 8;
  3. input [WIDTH-1:0] gray;
  4. output [WIDTH-1:0] bin;
  5. wire [WIDTH-1:0] bin;
  6. assign bin[WIDTH-1] = gray[WIDTH-1];
  7. genvar i;
  8. generate
  9. for (i=WIDTH-2; i>=0; i=i-1)
  10. begin: gry_to_bin
  11. assign bin[i] = bin[i+1] ^ gray[i];
  12. end
  13. endgenerate
  14. endmodule

二进制转格雷码

二进制转格雷码公式如下:

                        grayn−1 = binn−1

                        grayi = bini⨁bini+1

二进制转格雷码Verilog代码如下:

  1. module bin_to_gray (bin,gray);
  2. parameter WIDTH = 8;
  3. input [WIDTH-1:0] bin;
  4. output [WIDTH-1:0] gray;
  5. wire [WIDTH-1:0] gray;
  6. assign gray = bin ^ (bin >> 1);
  7. endmodule

格雷码计数器

将四个步骤组合在一起(格雷码转二进制、加法器、二进制转格雷码、保存格雷码的寄存器)即可实现格雷码计数器,其Verlog代码如下:

  1. module gray_counter(clk, rst_n, gray_dout);
  2. parameter WIDTH = 8;
  3. input clk;
  4. input rst_n;
  5. output [WIDTH-1:0] gray_dout;
  6. reg [WIDTH-1:0] gray_dout;
  7. wire [WIDTH-1:0] gray_temp;
  8. wire [WIDTH-1:0] bin_dout;
  9. wire [WIDTH-1:0] bin_add;
  10. assign bin_add = bin_out + 1'b1;
  11. assign gray_temp = bin_add ^ (bin_add >> 1);
  12. always@(posedge clk or negedge rst_n) begin
  13. if(!rst_n)
  14. gray_dout <= {WIDTH{1'b0}};
  15. else
  16. gray_dout <= gray_temp;
  17. end
  18. gray_to_bin gtb(.gray(gray_dout), .bin(bin_dout));
  19. defparam gtb .WIDTH = WIDTH;
  20. endmodule

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/494147
推荐阅读
相关标签
  

闽ICP备14008679号