0 LVS errors on rapcores 2035c297d using proj_example variant as a top layer abstraction for rapcore
diff --git a/verilog/rtl/rapcore_caravel.v b/verilog/rtl/rapcore_caravel.v
new file mode 100644
index 0000000..f3daa80
--- /dev/null
+++ b/verilog/rtl/rapcore_caravel.v
@@ -0,0 +1,171 @@
+`default_nettype none
+/*
+ *-------------------------------------------------------------
+ *
+ * user_proj_example
+ *
+ * This is an example of a (trivially simple) user project,
+ * showing how the user project can connect to the logic
+ * analyzer, the wishbone bus, and the I/O pads.
+ *
+ * This project generates an integer count, which is output
+ * on the user area GPIO pads (digital output only).  The
+ * wishbone connection allows the project to be controlled
+ * (start and stop) from the management SoC program.
+ *
+ * See the testbenches in directory "mprj_counter" for the
+ * example programs that drive this user project.  The three
+ * testbenches are "io_ports", "la_test1", and "la_test2".
+ *
+ *-------------------------------------------------------------
+ */
+
+module rapcores #(
+    parameter BITS = 32
+)(
+`ifdef USE_POWER_PINS
+    inout vdda1,	// User area 1 3.3V supply
+    inout vdda2,	// User area 2 3.3V supply
+    inout vssa1,	// User area 1 analog ground
+    inout vssa2,	// User area 2 analog ground
+    inout vccd1,	// User area 1 1.8V supply
+    inout vccd2,	// User area 2 1.8v supply
+    inout vssd1,	// User area 1 digital ground
+    inout vssd2,	// User area 2 digital ground
+`endif
+
+    // Wishbone Slave ports (WB MI A)
+    input wb_clk_i,
+    input wb_rst_i,
+    input wbs_stb_i,
+    input wbs_cyc_i,
+    input wbs_we_i,
+    input [3:0] wbs_sel_i,
+    input [31:0] wbs_dat_i,
+    input [31:0] wbs_adr_i,
+    output wbs_ack_o,
+    output [31:0] wbs_dat_o,
+
+    // Logic Analyzer Signals
+    input  [127:0] la_data_in,
+    output [127:0] la_data_out,
+    input  [127:0] la_oen,
+
+    // IOs
+    input  [`MPRJ_IO_PADS-1:0] io_in,
+    output [`MPRJ_IO_PADS-1:0] io_out,
+    output [`MPRJ_IO_PADS-1:0] io_oeb
+);
+    wire clk;
+    wire rst;
+
+    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 [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;
+
+    // IO
+    //assign io_out = count;
+    //assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
+
+		assign count = 0;
+    // 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_oen[63:32] & ~{BITS{valid}};
+    // Assuming LA probes [65:64] are for controlling the count clk & reset
+    assign clk = wb_clk_i;
+    assign rst = (~la_oen[65]) ? la_data_in[65]: wb_rst_i;
+
+    // GPIO output enable (0 = output, 1 = input)
+    assign io_oeb[15] = 1'b0;    // CHARGEPUMP
+    assign io_oeb[25] = 1'b1;    // analog_cmp1
+    assign io_oeb[27] = 1'b0;    // analog_out1
+    assign io_oeb[26] = 1'b1;    // analog_cmp2
+    assign io_oeb[28] = 1'b0;    // analog_out2
+    assign io_oeb[23] = 1'b0;    // PHASE_A1
+    assign io_oeb[19] = 1'b0;    // PHASE_A2
+    assign io_oeb[16] = 1'b0;    // PHASE_B1
+    assign io_oeb[20] = 1'b0;    // PHASE_B2
+    assign io_oeb[21] = 1'b0;    // PHASE_A1_H
+    assign io_oeb[18] = 1'b0;    // PHASE_A2_H
+    assign io_oeb[14] = 1'b0;    // PHASE_B1_H
+    assign io_oeb[17] = 1'b0;    // PHASE_B2_H
+    assign io_oeb[18] = 1'b1;    // ENC_B
+    assign io_oeb[19] = 1'b1;    // ENC_A
+    assign io_oeb[12] = 1'b0;    // BUFFER_DTR
+    assign io_oeb[24] = 1'b0;    // MOVE_DONE
+    assign io_oeb[29] = 1'b1;    // HALT
+    assign io_oeb[10] = 1'b1;    // SCK
+    assign io_oeb[9] = 1'b1;     // CS
+    assign io_oeb[8] = 1'b1;     // COPI
+    assign io_oeb[11] = 1'b0;    // CIPO
+    assign io_oeb[30] = 1'b0;    // STEPOUTPUT
+    assign io_oeb[31] = 1'b0;    // DIROUTPUT
+    assign io_oeb[32] = 1'b1;    // STEPINPUT
+    assign io_oeb[33] = 1'b1;    // DIRINPUT
+    // unused
+    assign io_oeb[0] = 1'b1;    // JTAG I/O
+    assign io_oeb[1] = 1'b1;    // SDO
+    assign io_oeb[2] = 1'b1;    // SDI
+    assign io_oeb[3] = 1'b1;    // CSB
+    assign io_oeb[4] = 1'b1;    // SCK
+    assign io_oeb[5] = 1'b1;    // Rx
+    assign io_oeb[6] = 1'b1;    // Tx
+    assign io_oeb[7] = 1'b1;    // IRQ
+    assign io_oeb[13] = 1'b1;   
+    assign io_oeb[22] = 1'b1;
+    assign io_oeb[34] = 1'b1;
+    assign io_oeb[35] = 1'b1;
+    assign io_oeb[36] = 1'b1;
+    assign io_oeb[37] = 1'b1;
+
+
+    rapcore rapcore0 (
+
+        // IO Pads
+        .CLK(wb_clk_i),
+        .CHARGEPUMP(io_out[15]),
+        .analog_cmp1(io_in[25]),
+        .analog_out1(io_out[27]),
+        .analog_cmp2(io_in[26]),
+        .analog_out2(io_out[28]),
+        .PHASE_A1(io_out[23]),
+        .PHASE_A2(io_out[19]),
+        .PHASE_B1(io_out[16]),
+        .PHASE_B2(io_out[20]),
+        .PHASE_A1_H(io_out[21]),
+        .PHASE_A2_H(io_out[18]),
+        .PHASE_B1_H(io_out[14]),
+        .PHASE_B2_H(io_out[17]),
+        .ENC_B(io_in[18]),
+        .ENC_A(io_in[19]),
+        .BUFFER_DTR(io_out[12]),
+        .MOVE_DONE(io_out[24]),
+        .HALT(io_in[29]),
+        .SCK(io_in[10]),
+        .CS(io_in[9]),
+        .COPI(io_in[8]),
+        .CIPO(io_out[11]),
+        .STEPOUTPUT(io_out[30]),
+        .DIROUTPUT(io_out[31]),
+        .STEPINPUT(io_in[32]),
+        .DIRINPUT(io_in[33])
+    );
+
+endmodule
+
+`default_nettype wire
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index fb0b56c..c9c962b 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -64,70 +64,46 @@
     /* User project is instantiated  here   */
     /*--------------------------------------*/
 
-    rapcore rapcore (
+    rapcores rapcores0 (
+    `ifdef USE_POWER_PINS
+	.vdda1(vdda1),	// User area 1 3.3V power
+	.vdda2(vdda2),	// User area 2 3.3V power
+	.vssa1(vssa1),	// User area 1 analog ground
+	.vssa2(vssa2),	// User area 2 analog ground
+	.vccd1(vccd1),	// User area 1 1.8V power
+	.vccd2(vccd2),	// User area 2 1.8V power
+	.vssd1(vssd1),	// User area 1 digital ground
+	.vssd2(vssd2),	// User area 2 digital ground
+    `endif
 
-        // IO Pads
-        .CLK(wb_clk_i),
-        .CHARGEPUMP(io_out[15]),
-        .analog_cmp1(io_in[25]),
-        .analog_out1(io_out[27]),
-        .analog_cmp2(io_in[26]),
-        .analog_out2(io_out[28]),
-        .PHASE_A1(io_out[23]),
-        .PHASE_A2(io_out[19]),
-        .PHASE_B1(io_out[16]),
-        .PHASE_B2(io_out[20]),
-        .PHASE_A1_H(io_out[21]),
-        .PHASE_A2_H(io_out[18]),
-        .PHASE_B1_H(io_out[14]),
-        .PHASE_B2_H(io_out[17]),
-        .ENC_B(io_in[18]),
-        .ENC_A(io_in[19]),
-        .BUFFER_DTR(io_out[12]),
-        .MOVE_DONE(io_out[24]),
-        .HALT(io_in[29]),
-        .SCK(io_in[10]),
-        .CS(io_in[9]),
-        .COPI(io_in[8]),
-        .CIPO(io_out[11]),
-        .STEPOUTPUT(io_out[30]),
-        .DIROUTPUT(io_out[31]),
-        .STEPINPUT(io_in[32]),
-        .DIRINPUT(io_in[33])
+	// MGMT core clock and reset
+
+    	.wb_clk_i(wb_clk_i),
+    	.wb_rst_i(wb_rst_i),
+
+	// MGMT SoC Wishbone Slave
+
+	.wbs_cyc_i(wbs_cyc_i),
+	.wbs_stb_i(wbs_stb_i),
+	.wbs_we_i(wbs_we_i),
+	.wbs_sel_i(wbs_sel_i),
+	.wbs_adr_i(wbs_adr_i),
+	.wbs_dat_i(wbs_dat_i),
+	.wbs_ack_o(wbs_ack_o),
+	.wbs_dat_o(wbs_dat_o),
+
+	// Logic Analyzer
+
+	.la_data_in(la_data_in),
+	.la_data_out(la_data_out),
+	.la_oen (la_oen),
+
+	// IO Pads
+
+	.io_in (io_in),
+    	.io_out(io_out),
+    	.io_oeb(io_oeb)
     );
 
 endmodule	// user_project_wrapper
-
-(* blackbox *)
-module rapcore (
-    input  CLK,
-      input  SCK,
-      input  CS,
-      input  COPI,
-      output CIPO,
-      output CHARGEPUMP,
-      input analog_cmp1,
-      output analog_out1,
-      input analog_cmp2,
-      output analog_out2,
-      output wire PHASE_A1,  // Phase A
-      output wire PHASE_A2,  // Phase A
-      output wire PHASE_B1,  // Phase B
-      output wire PHASE_B2,  // Phase B
-      output wire PHASE_A1_H,  // Phase A
-      output wire PHASE_A2_H,  // Phase A
-      output wire PHASE_B1_H,  // Phase B
-      output wire PHASE_B2_H,  // Phase B
-      input ENC_B,
-      input ENC_A,
-      output BUFFER_DTR,
-      output MOVE_DONE,
-      input HALT,
-      input STEPINPUT,
-      input DIRINPUT,
-      output STEPOUTPUT,
-      output DIROUTPUT
-);
-endmodule
-
 `default_nettype wire