//==========================================
// 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
Senin, 30 Oktober 2017
Langganan:
Posting Komentar (Atom)
0 komentar:
Posting Komentar