diff --git a/cntr.v b/cntr.v
new file mode 100644
index 0000000000000000000000000000000000000000..45357267e0bb245ef935561505fe251d24601855
--- /dev/null
+++ b/cntr.v
@@ -0,0 +1,37 @@
+module cntr(
+  input clk, rst, en, par,
+  output [3:0] q,
+);
+
+reg [3:0] cntr;
+
+always @ (posedge clk) begin
+  if(rst) begin
+    cntr <= 0;
+  end
+
+  else if(en) begin
+
+    if(par) begin
+      if(cntr >= 9) begin
+        cntr <= 0;
+      end
+      else begin
+        cntr <= cntr + 1;
+      end
+    end
+
+    else begin
+      if(cntr >= 8) begin
+        cntr <= 0;
+      end
+      else begin
+        cntr <= cntr + 1;
+      end
+    end
+
+  end
+end
+
+assign q = cntr;
+endmodule
diff --git a/debouncer.v b/debouncer.v
new file mode 100644
index 0000000000000000000000000000000000000000..3b1cf005c44324d62958464427a89a2884e09cab
--- /dev/null
+++ b/debouncer.v
@@ -0,0 +1,25 @@
+module debouncer(
+input clk, rst, din,
+output q,
+);
+
+reg state;
+
+always @ (posedge clk) begin
+  if(rst) begin
+    state <= 0;
+  end
+
+  else begin
+    if(din) begin
+      state <= 1;
+    end
+    else begin
+      state <= 0;
+    end
+  end
+
+end
+
+assign q = (~state && din)
+endmodule
diff --git a/parity.v b/parity.v
new file mode 100644
index 0000000000000000000000000000000000000000..b33786737043f478d20e6215ecb54b646adf3bc2
--- /dev/null
+++ b/parity.v
@@ -0,0 +1,21 @@
+module parity(
+  input clk, rst, din,
+  output q,
+);
+
+reg t;
+
+always @ (posedge clk) begin
+  if(rst) begin
+//  t <= 0; // Even parity
+    t <= 1; // Odd parity
+  end
+
+  else if(din) begin
+    t <= ~t;
+  end
+end
+
+assign q = t;
+
+endmodule