| //========================================== | |
| // 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 |