我是靠谱客的博主 故意麦片,最近开发中收集的这篇文章主要介绍Gray Counter (格雷码计数器),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

异步FIFO采用Gray Counter产生读写地址,Empty/Full信号的产生也与Gray Counter的最高两位相关。


`timescale 1ns / 1ps
//
// Company: SEU.IC
// Engineer: Ray
//
// Create Date:    21:58:22 03/28/2011
// Design Name: Gray Counter
// Module Name:    GrayCounter
// Revision 0.01 - File Created
//
module GrayCounter(
    Clock,
     Reset_in,
     Enable_in,
     GrayCount_out
     );
     parameter COUNTER_WIDTH = 5;
    input Clock;
    input Reset_in;
    input Enable_in;
    output [COUNTER_WIDTH - 1 : 0]GrayCount_out;
   
     reg [COUNTER_WIDTH - 1 : 0] BinaryCount;
     wire [COUNTER_WIDTH - 1 : 0]GrayCount_out;
    
     always @(posedge Clock or negedge Reset_in)
     begin
       if(!Reset_in)
          BinaryCount <= 'd0;
          else if (Enable_in)
           BinaryCount <= BinaryCount + 'd1;
      end
     
      assign GrayCount_out = {BinaryCount[COUNTER_WIDTH-1],
                              BinaryCount[COUNTER_WIDTH-1 : 1] ^ BinaryCount[COUNTER_WIDTH-2 : 0]};


endmodule


对应的testbench如下所示,


`timescale 1ns / 1ps


// Company: SEU.IC
// Engineer:Ray
//
// Create Date:   22:18:38 03/28/2011
// Design Name:   GrayCounter
// Module Name:   E:/ray_study_verilog/Asynchronous_FIFO/tb_gray.v
// Project Name:  Asynchronous_FIFO
// Target Device: 
// Tool versions: 
// Description:
//
// Verilog Test Fixture created by ISE for module: GrayCounter
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//

module tb_gray;

    // Inputs
    reg Clock;
    reg Reset_in;
    reg Enable_in;

    // Outputs
    wire [4:0] GrayCount_out;

    // Instantiate the Unit Under Test (UUT)
    GrayCounter uut (
        .Clock(Clock),
        .Reset_in(Reset_in),
        .Enable_in(Enable_in),
        .GrayCount_out(GrayCount_out)
    );

always #20 Clock = ~Clock;
 
    initial begin
        // Initialize Inputs
        Clock = 0;
        Reset_in = 0;
        Enable_in = 0;

        // Wait 100 ns for global reset to finish
        #100;
        Reset_in = 1;
        // Add stimulus here
      #100
         Enable_in = 1;
    end
     
endmodule


Xilinx ISE ISIM的仿真波形为:


image

最后

以上就是故意麦片为你收集整理的Gray Counter (格雷码计数器)的全部内容,希望文章能够帮你解决Gray Counter (格雷码计数器)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部