Senin, 30 Oktober 2017

Asynchronous FIFO ( Gray Counter )

//==========================================
// Function : Code Gray counter.
// Coder    : Alex Claros F.
// Date     : 15/May/2005.
//=======================================

`timescale 1ns/1ps

module GrayCounter
   #(parameter   COUNTER_WIDTH = 4)
  
    (output reg  [COUNTER_WIDTH-1:0]    GrayCount_out,  //'Gray' code count output.
   
     input wire                         Enable_in,  //Count enable.
     input wire                         Clear_in,   //Count reset.
   
     input wire                         Clk);

    /////////Internal connections & variables///////
    reg    [COUNTER_WIDTH-1:0]         BinaryCount;

    /////////Code///////////////////////
   
    always @ (posedge Clk)
        if (Clear_in) begin
            BinaryCount   <= {COUNTER_WIDTH{1'b 0}} + 1;  //Gray count begins @ '1' with
            GrayCount_out <= {COUNTER_WIDTH{1'b 0}};      // first 'Enable_in'.
        end
        else if (Enable_in) begin
            BinaryCount   <= BinaryCount + 1;
            GrayCount_out <= {BinaryCount[COUNTER_WIDTH-1],
                              BinaryCount[COUNTER_WIDTH-2:0] ^ BinaryCount[COUNTER_WIDTH-1:1]};
        end
   
endmodule


----Penjelasan----

Masuk pada perintah pertama penyertaan skala waktu yang di tentukan yaitu 1ns/1ps
lalu masukan module file nya yaitu GrayCounter
masuk pada deklarasi inputan nya, diberikan akses untuk aktif, saat aktif count(perhitungan) juga aktif, begitu pun pada clear nantinya reset pun aktif
masukan nya ialah nilai clock itu sendiri.

Selanjutnya masuk pada blok code dimana, jika clear_in / reset perhitungan untuk binary nya dari posisi  0 akan bertambah 1 yang akan aktif. Jadi pada intinya saat aktif sistem angka biner disini memiliki dua nilai berturut-turut berbeda hanya dalam satu bit (digit biner). Kode biner yang dipantulkan pada awalnya dirancang untuk mencegah keluaran palsu dari switch elektromekanik.
perintah akan terus berlangsung sampai di akhiri dengan perintah end.

source : http://www.asic-world.com/examples/verilog/asyn_fifo.html#Asynchronous_FIFO

0 komentar:

Posting Komentar