summaryrefslogtreecommitdiff
path: root/n/asserv/src/counter/quad_decoder.v
diff options
context:
space:
mode:
Diffstat (limited to 'n/asserv/src/counter/quad_decoder.v')
-rw-r--r--n/asserv/src/counter/quad_decoder.v42
1 files changed, 42 insertions, 0 deletions
diff --git a/n/asserv/src/counter/quad_decoder.v b/n/asserv/src/counter/quad_decoder.v
new file mode 100644
index 0000000..1bd3f99
--- /dev/null
+++ b/n/asserv/src/counter/quad_decoder.v
@@ -0,0 +1,42 @@
+`timescale 1ns / 1ps
+
+module quad_decoder(clk, rst, q, counter);
+ parameter bits = 8;
+ input clk;
+ input rst;
+ input [1:0] q;
+ output [bits-1:0] counter;
+
+ reg [1:0] ql;
+ reg [bits-1:0] counter;
+
+ always @(posedge clk or negedge rst) begin
+ if (!rst) begin
+ ql <= 2'b00;
+ counter <= 0;
+ end
+ else begin
+ case ({ ql, q })
+ 4'b0001:
+ counter <= counter + 1;
+ 4'b0010:
+ counter <= counter - 1;
+ 4'b0111:
+ counter <= counter + 1;
+ 4'b0100:
+ counter <= counter - 1;
+ 4'b1110:
+ counter <= counter + 1;
+ 4'b1101:
+ counter <= counter - 1;
+ 4'b1000:
+ counter <= counter + 1;
+ 4'b1011:
+ counter <= counter - 1;
+ default:
+ counter <= counter;
+ endcase
+ ql <= q;
+ end
+ end
+endmodule