Update user_proj_example.v

Adding in the counter so we can verify Caravel is working correctly.
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 04421fe..95654f8 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -56,14 +56,55 @@
     output [2:0] irq
 );
   
+  wire clk;
+  wire rst;
+
+  wire [31:0] rdata; 
+  wire [31:0] wdata;
+  wire [BITS-1:0] count;
+
+  wire valid;
+  wire [3:0] wstrb;
+  wire [31:0] la_write;
+
+  // WB MI A
+  assign valid = wbs_cyc_i && wbs_stb_i; 
+  assign wstrb = wbs_sel_i & {4{wbs_we_i}};
+  assign wbs_dat_o = rdata;
+  assign wdata = wbs_dat_i;
+
+  // IRQ
+  assign irq = 3'b000;	// Unused
+
+  // LA
+  assign la_data_out = {{(127-BITS){1'b0}}, count};
+  // Assuming LA probes [63:32] are for controlling the count register  
+  assign la_write = ~la_oenb[63:32] & ~{BITS{valid}};
+  // Assuming LA probes [65:64] are for controlling the count clk & reset  
+  assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i;
+  assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i;
+  
+  counter #(
+    .BITS(BITS)
+  ) counter(
+    .clk(clk),
+    .reset(rst),
+    .ready(wbs_ack_o),
+    .valid(valid),
+    .rdata(rdata),
+    .wdata(wbs_dat_i),
+    .wstrb(wstrb),
+    .la_write(la_write),
+    .la_input(la_data_in[63:32]),
+    .count(count)
+  );
+  
   wire [`MPRJ_IO_PADS-1:0] io_in;
   wire [`MPRJ_IO_PADS-1:0] io_out;
   wire [`MPRJ_IO_PADS-1:0] io_oeb;
   
   wire [1:0] mode = io_in[37:36];
   
-  
-  
   Minx16Top cpu16 (
       .clk_i       (io_in [33])
     , .rst_i       (io_in [32])
@@ -125,4 +166,46 @@
 
 endmodule
 
+module counter #(
+    parameter BITS = 32
+)(
+    input clk,
+    input reset,
+    input valid,
+    input [3:0] wstrb,
+    input [BITS-1:0] wdata,
+    input [BITS-1:0] la_write,
+    input [BITS-1:0] la_input,
+    output ready,
+    output [BITS-1:0] rdata,
+    output [BITS-1:0] count
+);
+    reg ready;
+    reg [BITS-1:0] count;
+    reg [BITS-1:0] rdata;
+
+    always @(posedge clk) begin
+        if (reset) begin
+            count <= 0;
+            ready <= 0;
+        end else begin
+            ready <= 1'b0;
+            if (~|la_write) begin
+                count <= count + 1;
+            end
+            if (valid && !ready) begin
+                ready <= 1'b1;
+                rdata <= count;
+                if (wstrb[0]) count[7:0]   <= wdata[7:0];
+                if (wstrb[1]) count[15:8]  <= wdata[15:8];
+                if (wstrb[2]) count[23:16] <= wdata[23:16];
+                if (wstrb[3]) count[31:24] <= wdata[31:24];
+            end else if (|la_write) begin
+                count <= la_write & la_input;
+            end
+        end
+    end
+
+endmodule
+
 `default_nettype wire