• 二进制转格雷码


    一、前言

      格雷码计数器可以运用于FIFO中。格雷码计数器的优势在于其相邻两个数值之间只有一位发生变化,提高了系统的抗干扰能力,而且在计数时,各个输出的门电路翻转次数要远远小于二进制计数器,从而可以大幅度的降低系统的功耗。

    二、二进制转格雷码的原理

       由表可知,格雷码相邻两个数之间只有一位会改变。

      数学原理:

      格雷码的最高位和二进制的最高位保持不变,然后二进制的最高位和次高位相异或得到格雷码的次高位,其他各位依次类推。

    三、代码实现

     1 // *********************************************************************************
     2 // Project Name : bin_gray
     3 // Email        : 
     4 // Create Time  : 2020/07/22 10:46
     5 // Module Name  : bin_gray
     6 // editor        : L
     7 // Version        : Rev1.0.0
     8 // *********************************************************************************
     9 
    10 module bin_gray(
    11     input                sclk,
    12     input                s_rst_n,
    13     input                en,
    14     output    reg    [7:0]    gray_out
    15     );
    16 
    17 reg            [7:0]        cnt;
    18 
    19 always @(posedge sclk or negedge s_rst_n) begin
    20     if(!s_rst_n) begin
    21         cnt <= 0;
    22     end
    23     else if(en) begin
    24         cnt <= cnt + 1'b1;
    25     end
    26     else begin
    27         cnt <= cnt;
    28     end
    29 end
    30 
    31 always @ (posedge sclk or negedge s_rst_n) begin
    32     if(s_rst_n == 1'b0) 
    33         gray_out <= 0;
    34     else    
    35         gray_out <= cnt ^ (cnt >> 1);
    36 end
    37 
    38 endmodule
    View Code

    testbench:

     1 // *********************************************************************************
     2 // Project Name : bin2gray
     3 // Email        : 
     4 // Create Time  : 2020/07/24 9:25
     5 // Module Name  : bin2gray_tb
     6 // editor        : L
     7 // Version        : Rev1.0.0
     8 // *********************************************************************************
     9 
    10 module bin2gray_tb;
    11     reg                sclk                ;
    12     reg                s_rst_n        ;
    13     reg                en            ;
    14     wire    [7:0]    gray_out    ;
    15 
    16 bin_gray bin2gray_inst(
    17     .sclk        (sclk        ),    
    18     .s_rst_n    (s_rst_n    ),
    19     .en            (en            ),
    20     .gray_out    (gray_out    )
    21     );
    22 
    23 initial
    24     sclk = 1'b0;
    25     always #10 sclk = ~sclk;
    26 
    27 initial
    28     begin
    29         #1;
    30         en = 1'b0;
    31         s_rst_n = 1'b0;
    32         #21;
    33         s_rst_n = 1'b1;
    34         #21;
    35         en = 1'b1;
    36         #500
    37         en = 1'b0;
    38     end
    39 
    40 endmodule    
    View Code

    Modelsim仿真:

  • 相关阅读:
    不同浏览器对于js中for循环的判断
    png格式图片背景不透明问题解决
    qq登陆错误提示
    T职场人生系列之二十四:程序员如何增加收入
    if [ $# eq 0 ]该语句是什么含义?
    动态IP修改注册表降低PING值教程(XP系统)
    c# List列表数据转换成树形结构
    net core EF 链接mysql 数据库
    net core 部署到windows 服务
    IdentityServer4 密码模式认证
  • 原文地址:https://www.cnblogs.com/571328401-/p/13370425.html
Copyright © 2020-2023  润新知