diff --git a/info.yaml b/info.yaml
index baccf02..10be67a 100644
--- a/info.yaml
+++ b/info.yaml
@@ -1,11 +1,10 @@
 --- 
 # TinyTapeout project information
 project:
-  wokwi_id:    344526633802138196        # If using wokwi, set this to your project's ID
-#  source_files:        # If using an HDL, set wokwi_id as 0 and uncomment and list your source files here
-#    - verilog/rtl/counter.v
-#    - verilog/rtl/decoder.v
-#  top_module:  "seven_segment_seconds"      # put the name of your top module here, make it unique by prepending your github username
+  wokwi_id:    0        # If using wokwi, set this to your project's ID
+  source_files:        # If using an HDL, set wokwi_id as 0 and uncomment and list your source files here
+    - verilog/rtl/vga_clock.v
+  top_module:  "thorkn_vgaclock"      # put the name of your top module here, make it unique by prepending your github username
 
 # As everyone will have access to all designs, try to make it easy for someone new to your design to know what
 # it does and how to operate it.
@@ -21,7 +20,7 @@
   how_it_works: ""      # Longer description of how the project works
   how_to_test:  ""      # Instructions on how someone could test your project, include things like what buttons do what and how to set the clock if needed
   external_hw:  ""      # Describe any external hardware needed
-  language:     "wokwi" # other examples include Verilog, Amaranth, VHDL, etc
+  language:     "Verilog" # other examples include Verilog, Amaranth, VHDL, etc
   doc_link:     ""      # URL to longer form documentation, eg the README.md in your repository
   clock_hz:     0       # Clock frequency in Hz (if required) we are expecting max clock frequency to be ~6khz. Provided on input 0.
   picture:      ""      # relative path to a picture in your repository
@@ -35,12 +34,12 @@
     - none
     - none
   outputs:
-    - segment a         # a description of what the outputs do
-    - segment b
-    - segment c
-    - segment d
-    - segment e
-    - segment f
-    - segment g
+    - io_h_sync         # a description of what the outputs do
+    - io_v_sync
+    - io_r
+    - io_g
+    - io_b
+    - none
+    - none
     - none
 
diff --git a/verilog/rtl/vga_clock.v b/verilog/rtl/vga_clock.v
new file mode 100644
index 0000000..8707136
--- /dev/null
+++ b/verilog/rtl/vga_clock.v
@@ -0,0 +1,486 @@
+// Generator : SpinalHDL v1.8.0    git head : 4e3563a282582b41f4eaafc503787757251d23ea
+// Component : VgaClock
+
+`timescale 1ns/1ps
+
+module thorkn_vgaclock (
+  output              io_h_sync,
+  output              io_v_sync,
+  output              io_r,
+  output              io_g,
+  output              io_b,
+  input               clk,
+  input               reset
+);
+
+  wire                vga_sync_gen_io_h_sync;
+  wire                vga_sync_gen_io_v_sync;
+  wire                vga_sync_gen_io_activevideo;
+  wire       [9:0]    vga_sync_gen_io_x;
+  wire       [9:0]    vga_sync_gen_io_y;
+  wire                vga_content_io_r;
+  wire                vga_content_io_g;
+  wire                vga_content_io_b;
+
+  VgaSyncGen vga_sync_gen (
+    .io_h_sync      (vga_sync_gen_io_h_sync     ), //o
+    .io_v_sync      (vga_sync_gen_io_v_sync     ), //o
+    .io_activevideo (vga_sync_gen_io_activevideo), //o
+    .io_x           (vga_sync_gen_io_x[9:0]     ), //o
+    .io_y           (vga_sync_gen_io_y[9:0]     ), //o
+    .clk            (clk                        ), //i
+    .reset          (reset                      )  //i
+  );
+  VgaContent vga_content (
+    .io_x           (vga_sync_gen_io_x[9:0]     ), //i
+    .io_y           (vga_sync_gen_io_y[9:0]     ), //i
+    .io_activevideo (vga_sync_gen_io_activevideo), //i
+    .io_r           (vga_content_io_r           ), //o
+    .io_g           (vga_content_io_g           ), //o
+    .io_b           (vga_content_io_b           ), //o
+    .clk            (clk                        ), //i
+    .reset          (reset                      )  //i
+  );
+  assign io_h_sync = vga_sync_gen_io_h_sync; // @[VgaClock.scala 20:15]
+  assign io_v_sync = vga_sync_gen_io_v_sync; // @[VgaClock.scala 21:15]
+  assign io_r = vga_content_io_r; // @[VgaClock.scala 27:10]
+  assign io_g = vga_content_io_g; // @[VgaClock.scala 28:10]
+  assign io_b = vga_content_io_b; // @[VgaClock.scala 29:10]
+
+endmodule
+
+module VgaContent (
+  input      [9:0]    io_x,
+  input      [9:0]    io_y,
+  input               io_activevideo,
+  output reg          io_r,
+  output reg          io_g,
+  output reg          io_b,
+  input               clk,
+  input               reset
+);
+
+  wire       [5:0]    clock_counters_io_seconds;
+  wire       [5:0]    clock_counters_io_minutes;
+  wire       [3:0]    clock_counters_io_hours;
+  wire                _zz_when_VgaContent_l33;
+  wire       [9:0]    _zz_when_VgaContent_l33_1;
+  wire       [9:0]    _zz_when_VgaContent_l33_2;
+  wire                _zz_when_VgaContent_l33_3;
+  wire       [9:0]    _zz_when_VgaContent_l33_4;
+  wire       [9:0]    _zz_when_VgaContent_l39;
+  wire       [8:0]    _zz_when_VgaContent_l39_1;
+  wire       [8:0]    _zz_when_VgaContent_l39_2;
+  wire       [9:0]    _zz_when_VgaContent_l45;
+  wire       [8:0]    _zz_when_VgaContent_l45_1;
+  wire       [8:0]    _zz_when_VgaContent_l45_2;
+  wire       [9:0]    _zz_when_VgaContent_l51;
+  wire       [8:0]    _zz_when_VgaContent_l51_1;
+  wire       [8:0]    _zz_when_VgaContent_l51_2;
+  wire                when_VgaContent_l22;
+  wire                when_VgaContent_l33;
+  wire                when_VgaContent_l39;
+  wire                when_VgaContent_l45;
+  wire                when_VgaContent_l51;
+
+  assign _zz_when_VgaContent_l39_1 = (9'h1a4 - _zz_when_VgaContent_l39_2);
+  assign _zz_when_VgaContent_l39 = {1'd0, _zz_when_VgaContent_l39_1};
+  assign _zz_when_VgaContent_l39_2 = (clock_counters_io_seconds * 3'b110);
+  assign _zz_when_VgaContent_l45_1 = (9'h1a4 - _zz_when_VgaContent_l45_2);
+  assign _zz_when_VgaContent_l45 = {1'd0, _zz_when_VgaContent_l45_1};
+  assign _zz_when_VgaContent_l45_2 = (clock_counters_io_minutes * 3'b110);
+  assign _zz_when_VgaContent_l51_1 = (9'h1a4 - _zz_when_VgaContent_l51_2);
+  assign _zz_when_VgaContent_l51 = {1'd0, _zz_when_VgaContent_l51_1};
+  assign _zz_when_VgaContent_l51_2 = (clock_counters_io_hours * 5'h1e);
+  assign _zz_when_VgaContent_l33 = (((((((((((io_y == _zz_when_VgaContent_l33_1) || (io_y == _zz_when_VgaContent_l33_2)) || (io_y == 10'h05a)) || (io_y == 10'h078)) || (io_y == 10'h096)) || (io_y == 10'h097)) || (io_y == 10'h0b4)) || (io_y == 10'h0d2)) || (io_y == 10'h0f0)) || (io_y == 10'h0f1)) || (io_y == 10'h10e));
+  assign _zz_when_VgaContent_l33_3 = (io_y == 10'h12c);
+  assign _zz_when_VgaContent_l33_4 = 10'h14a;
+  assign _zz_when_VgaContent_l33_1 = 10'h03c;
+  assign _zz_when_VgaContent_l33_2 = 10'h03d;
+  ClockCounters clock_counters (
+    .io_seconds (clock_counters_io_seconds[5:0]), //o
+    .io_minutes (clock_counters_io_minutes[5:0]), //o
+    .io_hours   (clock_counters_io_hours[3:0]  ), //o
+    .clk        (clk                           ), //i
+    .reset      (reset                         )  //i
+  );
+  assign when_VgaContent_l22 = ((((io_x < 10'h004) || (10'h27b < io_x)) || (io_y < 10'h004)) || (10'h1db < io_y)); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(io_activevideo) begin
+      if(when_VgaContent_l22) begin
+        io_r = 1'b0; // @[VgaContent.scala 23:18]
+      end else begin
+        if(when_VgaContent_l33) begin
+          io_r = 1'b1; // @[VgaContent.scala 34:18]
+        end else begin
+          if(when_VgaContent_l39) begin
+            io_r = 1'b0; // @[VgaContent.scala 40:18]
+          end else begin
+            if(when_VgaContent_l45) begin
+              io_r = 1'b0; // @[VgaContent.scala 46:18]
+            end else begin
+              if(when_VgaContent_l51) begin
+                io_r = 1'b0; // @[VgaContent.scala 52:18]
+              end else begin
+                io_r = 1'b0; // @[VgaContent.scala 57:18]
+              end
+            end
+          end
+        end
+      end
+    end else begin
+      io_r = 1'b0; // @[VgaContent.scala 62:14]
+    end
+  end
+
+  always @(*) begin
+    if(io_activevideo) begin
+      if(when_VgaContent_l22) begin
+        io_g = 1'b0; // @[VgaContent.scala 24:18]
+      end else begin
+        if(when_VgaContent_l33) begin
+          io_g = 1'b0; // @[VgaContent.scala 35:18]
+        end else begin
+          if(when_VgaContent_l39) begin
+            io_g = 1'b1; // @[VgaContent.scala 41:18]
+          end else begin
+            if(when_VgaContent_l45) begin
+              io_g = 1'b1; // @[VgaContent.scala 47:18]
+            end else begin
+              if(when_VgaContent_l51) begin
+                io_g = 1'b1; // @[VgaContent.scala 53:18]
+              end else begin
+                io_g = 1'b0; // @[VgaContent.scala 58:18]
+              end
+            end
+          end
+        end
+      end
+    end else begin
+      io_g = 1'b0; // @[VgaContent.scala 63:14]
+    end
+  end
+
+  always @(*) begin
+    if(io_activevideo) begin
+      if(when_VgaContent_l22) begin
+        io_b = 1'b1; // @[VgaContent.scala 25:18]
+      end else begin
+        if(when_VgaContent_l33) begin
+          io_b = 1'b0; // @[VgaContent.scala 36:18]
+        end else begin
+          if(when_VgaContent_l39) begin
+            io_b = 1'b0; // @[VgaContent.scala 42:18]
+          end else begin
+            if(when_VgaContent_l45) begin
+              io_b = 1'b0; // @[VgaContent.scala 48:18]
+            end else begin
+              if(when_VgaContent_l51) begin
+                io_b = 1'b0; // @[VgaContent.scala 54:18]
+              end else begin
+                io_b = 1'b0; // @[VgaContent.scala 59:18]
+              end
+            end
+          end
+        end
+      end
+    end else begin
+      io_b = 1'b0; // @[VgaContent.scala 64:14]
+    end
+  end
+
+  assign when_VgaContent_l33 = (((10'h03c <= io_x) && (io_x < 10'h244)) && (((((((_zz_when_VgaContent_l33 || _zz_when_VgaContent_l33_3) || (io_y == _zz_when_VgaContent_l33_4)) || (io_y == 10'h14b)) || (io_y == 10'h168)) || (io_y == 10'h186)) || (io_y == 10'h1a4)) || (io_y == 10'h1a5))); // @[BaseType.scala 305:24]
+  assign when_VgaContent_l39 = ((((10'h1a4 <= io_x) && (io_x < 10'h208)) && (io_y <= 10'h1a4)) && (_zz_when_VgaContent_l39 <= io_y)); // @[BaseType.scala 305:24]
+  assign when_VgaContent_l45 = ((((10'h10e <= io_x) && (io_x < 10'h172)) && (io_y <= 10'h1a4)) && (_zz_when_VgaContent_l45 <= io_y)); // @[BaseType.scala 305:24]
+  assign when_VgaContent_l51 = ((((10'h078 <= io_x) && (io_x < 10'h0dc)) && (io_y <= 10'h1a4)) && (_zz_when_VgaContent_l51 <= io_y)); // @[BaseType.scala 305:24]
+
+endmodule
+
+module VgaSyncGen (
+  output reg          io_h_sync,
+  output reg          io_v_sync,
+  output reg          io_activevideo,
+  output reg [9:0]    io_x,
+  output reg [9:0]    io_y,
+  input               clk,
+  input               reset
+);
+
+  wire       [9:0]    _zz_h_counter_valueNext;
+  wire       [0:0]    _zz_h_counter_valueNext_1;
+  wire       [9:0]    _zz_v_counter_valueNext;
+  wire       [0:0]    _zz_v_counter_valueNext_1;
+  reg                 h_counter_willIncrement;
+  wire                h_counter_willClear;
+  reg        [9:0]    h_counter_valueNext;
+  reg        [9:0]    h_counter_value;
+  wire                h_counter_willOverflowIfInc;
+  wire                h_counter_willOverflow;
+  reg                 v_counter_willIncrement;
+  wire                v_counter_willClear;
+  reg        [9:0]    v_counter_valueNext;
+  reg        [9:0]    v_counter_value;
+  wire                v_counter_willOverflowIfInc;
+  wire                v_counter_willOverflow;
+  wire                when_VgaSyncGen_l29;
+  wire                when_VgaSyncGen_l36;
+  wire                when_VgaSyncGen_l44;
+  function  zz_h_counter_willIncrement(input dummy);
+    begin
+      zz_h_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+      zz_h_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  endfunction
+  wire  _zz_1;
+
+  assign _zz_h_counter_valueNext_1 = h_counter_willIncrement;
+  assign _zz_h_counter_valueNext = {9'd0, _zz_h_counter_valueNext_1};
+  assign _zz_v_counter_valueNext_1 = v_counter_willIncrement;
+  assign _zz_v_counter_valueNext = {9'd0, _zz_v_counter_valueNext_1};
+  assign _zz_1 = zz_h_counter_willIncrement(1'b0);
+  always @(*) h_counter_willIncrement = _zz_1;
+  assign h_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign h_counter_willOverflowIfInc = (h_counter_value == 10'h31f); // @[BaseType.scala 305:24]
+  assign h_counter_willOverflow = (h_counter_willOverflowIfInc && h_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(h_counter_willOverflow) begin
+      h_counter_valueNext = 10'h0; // @[Utils.scala 552:17]
+    end else begin
+      h_counter_valueNext = (h_counter_value + _zz_h_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(h_counter_willClear) begin
+      h_counter_valueNext = 10'h0; // @[Utils.scala 558:15]
+    end
+  end
+
+  always @(*) begin
+    v_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+    if(h_counter_willOverflow) begin
+      v_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  end
+
+  assign v_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign v_counter_willOverflowIfInc = (v_counter_value == 10'h20b); // @[BaseType.scala 305:24]
+  assign v_counter_willOverflow = (v_counter_willOverflowIfInc && v_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(v_counter_willOverflow) begin
+      v_counter_valueNext = 10'h0; // @[Utils.scala 552:17]
+    end else begin
+      v_counter_valueNext = (v_counter_value + _zz_v_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(v_counter_willClear) begin
+      v_counter_valueNext = 10'h0; // @[Utils.scala 558:15]
+    end
+  end
+
+  assign when_VgaSyncGen_l29 = ((10'h010 <= h_counter_value) && (h_counter_value <= 10'h070)); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(when_VgaSyncGen_l29) begin
+      io_h_sync = 1'b0; // @[VgaSyncGen.scala 30:19]
+    end else begin
+      io_h_sync = 1'b1; // @[VgaSyncGen.scala 32:19]
+    end
+  end
+
+  assign when_VgaSyncGen_l36 = ((10'h00b <= v_counter_value) && (v_counter_value <= 10'h00d)); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(when_VgaSyncGen_l36) begin
+      io_v_sync = 1'b0; // @[VgaSyncGen.scala 37:19]
+    end else begin
+      io_v_sync = 1'b1; // @[VgaSyncGen.scala 39:19]
+    end
+  end
+
+  assign when_VgaSyncGen_l44 = ((10'h0a0 <= h_counter_value) && (10'h02c <= v_counter_value)); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(when_VgaSyncGen_l44) begin
+      io_activevideo = 1'b1; // @[VgaSyncGen.scala 45:24]
+    end else begin
+      io_activevideo = 1'b0; // @[VgaSyncGen.scala 49:24]
+    end
+  end
+
+  always @(*) begin
+    if(when_VgaSyncGen_l44) begin
+      io_x = (h_counter_value - 10'h0a0); // @[VgaSyncGen.scala 46:14]
+    end else begin
+      io_x = 10'h0; // @[VgaSyncGen.scala 50:14]
+    end
+  end
+
+  always @(*) begin
+    if(when_VgaSyncGen_l44) begin
+      io_y = (v_counter_value - 10'h02c); // @[VgaSyncGen.scala 47:14]
+    end else begin
+      io_y = 10'h0; // @[VgaSyncGen.scala 51:14]
+    end
+  end
+
+  always @(posedge clk or posedge reset) begin
+    if(reset) begin
+      h_counter_value <= 10'h0; // @[Data.scala 400:33]
+      v_counter_value <= 10'h0; // @[Data.scala 400:33]
+    end else begin
+      h_counter_value <= h_counter_valueNext; // @[Reg.scala 39:30]
+      v_counter_value <= v_counter_valueNext; // @[Reg.scala 39:30]
+    end
+  end
+
+
+endmodule
+
+module ClockCounters (
+  output     [5:0]    io_seconds,
+  output     [5:0]    io_minutes,
+  output     [3:0]    io_hours,
+  input               clk,
+  input               reset
+);
+
+  wire       [24:0]   _zz_c_counter_valueNext;
+  wire       [0:0]    _zz_c_counter_valueNext_1;
+  wire       [5:0]    _zz_s_counter_valueNext;
+  wire       [0:0]    _zz_s_counter_valueNext_1;
+  wire       [5:0]    _zz_m_counter_valueNext;
+  wire       [0:0]    _zz_m_counter_valueNext_1;
+  wire       [3:0]    _zz_h_counter_valueNext;
+  wire       [0:0]    _zz_h_counter_valueNext_1;
+  reg                 c_counter_willIncrement;
+  wire                c_counter_willClear;
+  reg        [24:0]   c_counter_valueNext;
+  reg        [24:0]   c_counter_value;
+  wire                c_counter_willOverflowIfInc;
+  wire                c_counter_willOverflow;
+  reg                 s_counter_willIncrement;
+  wire                s_counter_willClear;
+  reg        [5:0]    s_counter_valueNext;
+  reg        [5:0]    s_counter_value;
+  wire                s_counter_willOverflowIfInc;
+  wire                s_counter_willOverflow;
+  reg                 m_counter_willIncrement;
+  wire                m_counter_willClear;
+  reg        [5:0]    m_counter_valueNext;
+  reg        [5:0]    m_counter_value;
+  wire                m_counter_willOverflowIfInc;
+  wire                m_counter_willOverflow;
+  reg                 h_counter_willIncrement;
+  wire                h_counter_willClear;
+  reg        [3:0]    h_counter_valueNext;
+  reg        [3:0]    h_counter_value;
+  wire                h_counter_willOverflowIfInc;
+  wire                h_counter_willOverflow;
+  function  zz_c_counter_willIncrement(input dummy);
+    begin
+      zz_c_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+      zz_c_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  endfunction
+  wire  _zz_1;
+
+  assign _zz_c_counter_valueNext_1 = c_counter_willIncrement;
+  assign _zz_c_counter_valueNext = {24'd0, _zz_c_counter_valueNext_1};
+  assign _zz_s_counter_valueNext_1 = s_counter_willIncrement;
+  assign _zz_s_counter_valueNext = {5'd0, _zz_s_counter_valueNext_1};
+  assign _zz_m_counter_valueNext_1 = m_counter_willIncrement;
+  assign _zz_m_counter_valueNext = {5'd0, _zz_m_counter_valueNext_1};
+  assign _zz_h_counter_valueNext_1 = h_counter_willIncrement;
+  assign _zz_h_counter_valueNext = {3'd0, _zz_h_counter_valueNext_1};
+  assign _zz_1 = zz_c_counter_willIncrement(1'b0);
+  always @(*) c_counter_willIncrement = _zz_1;
+  assign c_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign c_counter_willOverflowIfInc = (c_counter_value == 25'h17d783f); // @[BaseType.scala 305:24]
+  assign c_counter_willOverflow = (c_counter_willOverflowIfInc && c_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(c_counter_willOverflow) begin
+      c_counter_valueNext = 25'h0; // @[Utils.scala 552:17]
+    end else begin
+      c_counter_valueNext = (c_counter_value + _zz_c_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(c_counter_willClear) begin
+      c_counter_valueNext = 25'h0; // @[Utils.scala 558:15]
+    end
+  end
+
+  always @(*) begin
+    s_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+    if(c_counter_willOverflow) begin
+      s_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  end
+
+  assign s_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign s_counter_willOverflowIfInc = (s_counter_value == 6'h3b); // @[BaseType.scala 305:24]
+  assign s_counter_willOverflow = (s_counter_willOverflowIfInc && s_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(s_counter_willOverflow) begin
+      s_counter_valueNext = 6'h0; // @[Utils.scala 552:17]
+    end else begin
+      s_counter_valueNext = (s_counter_value + _zz_s_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(s_counter_willClear) begin
+      s_counter_valueNext = 6'h0; // @[Utils.scala 558:15]
+    end
+  end
+
+  always @(*) begin
+    m_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+    if(s_counter_willOverflow) begin
+      m_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  end
+
+  assign m_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign m_counter_willOverflowIfInc = (m_counter_value == 6'h3b); // @[BaseType.scala 305:24]
+  assign m_counter_willOverflow = (m_counter_willOverflowIfInc && m_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(m_counter_willOverflow) begin
+      m_counter_valueNext = 6'h0; // @[Utils.scala 552:17]
+    end else begin
+      m_counter_valueNext = (m_counter_value + _zz_m_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(m_counter_willClear) begin
+      m_counter_valueNext = 6'h0; // @[Utils.scala 558:15]
+    end
+  end
+
+  always @(*) begin
+    h_counter_willIncrement = 1'b0; // @[Utils.scala 536:23]
+    if(m_counter_willOverflow) begin
+      h_counter_willIncrement = 1'b1; // @[Utils.scala 540:41]
+    end
+  end
+
+  assign h_counter_willClear = 1'b0; // @[Utils.scala 537:19]
+  assign h_counter_willOverflowIfInc = (h_counter_value == 4'b1011); // @[BaseType.scala 305:24]
+  assign h_counter_willOverflow = (h_counter_willOverflowIfInc && h_counter_willIncrement); // @[BaseType.scala 305:24]
+  always @(*) begin
+    if(h_counter_willOverflow) begin
+      h_counter_valueNext = 4'b0000; // @[Utils.scala 552:17]
+    end else begin
+      h_counter_valueNext = (h_counter_value + _zz_h_counter_valueNext); // @[Utils.scala 554:17]
+    end
+    if(h_counter_willClear) begin
+      h_counter_valueNext = 4'b0000; // @[Utils.scala 558:15]
+    end
+  end
+
+  assign io_seconds = s_counter_value; // @[ClockCounters.scala 33:16]
+  assign io_minutes = m_counter_value; // @[ClockCounters.scala 34:16]
+  assign io_hours = h_counter_value; // @[ClockCounters.scala 35:16]
+  always @(posedge clk or posedge reset) begin
+    if(reset) begin
+      c_counter_value <= 25'h0; // @[Data.scala 400:33]
+      s_counter_value <= 6'h0; // @[Data.scala 400:33]
+      m_counter_value <= 6'h0; // @[Data.scala 400:33]
+      h_counter_value <= 4'b0000; // @[Data.scala 400:33]
+    end else begin
+      c_counter_value <= c_counter_valueNext; // @[Reg.scala 39:30]
+      s_counter_value <= s_counter_valueNext; // @[Reg.scala 39:30]
+      m_counter_value <= m_counter_valueNext; // @[Reg.scala 39:30]
+      h_counter_value <= h_counter_valueNext; // @[Reg.scala 39:30]
+    end
+  end
+
+
+endmodule
