34 lines
1.1 KiB
Verilog
34 lines
1.1 KiB
Verilog
//==========================================
|
|
// Function : Code Gray counter.
|
|
// Coder : Alex Claros F.
|
|
// Date : 15/May/2005.
|
|
//=======================================
|
|
|
|
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
|