Initial work on sim
diff --git a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
index d802e86..068f2a2 100644
--- a/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
+++ b/verilog/dv/caravel/user_proj_example/io_ports/io_ports_tb.v
@@ -36,8 +36,8 @@
     `define NO_HC_CACHE
     `include "DFFRAM_beh.v"
 `else
-    `include "user_project/IPs/DFFRAM.v"
-    `include "user_project/IPs/DFFRAMBB.v"
+    // `include "user_project/IPs/DFFRAM.v"
+    // `include "user_project/IPs/DFFRAMBB.v"
 `endif
 
 `include "user_project/AHB_sys_0/AHBlite_sys_0.v"
@@ -112,7 +112,7 @@
     // assign GPIOIN_Sys0_S2 = GPIO_PINS;
 
 	// Serial Terminal connected to UART0 TX*/
-    terminal term(.rx(mprj_io[22]));
+    terminal term(.rx(mprj_io[21]));  // RsTx_Sys0_SS0_S0
 
     // SPI SRAM connected to SPI0
     wire SPI_HOLD = 1'b1;
@@ -161,10 +161,6 @@
 		power4 <= 1'b1;
 	end
 
-	always @(mprj_io) begin
-		#1 $display("MPRJ-IO state = %b ", mprj_io[7:0]);
-	end
-
 	wire flash_csb;
 	wire flash_clk;
 	wire flash_io0;
diff --git a/verilog/dv/caravel/user_proj_example/sw_n5/test.c b/verilog/dv/caravel/user_proj_example/sw_n5/test.c
index d48a2f1..e06b253 100644
--- a/verilog/dv/caravel/user_proj_example/sw_n5/test.c
+++ b/verilog/dv/caravel/user_proj_example/sw_n5/test.c
@@ -95,7 +95,6 @@
 
     // PWM
     uart_puts (0, "PWM Test: ", 10);
-    tmr_init(0, 100, 10);       // 1usec
     pwm_init(0, 250, 99, 5);
  	pwm_enable(0);
     DELAY(300);
@@ -106,41 +105,7 @@
     DELAY(400);
    
     // Done!
-    uart_puts(0, "Done!\n", 5);
+    uart_puts(0, "Done!\n ", 6);
+    DELAY(100);
     return 0;
-}
-
-/*
-
-    (unsigned int *)(0x49000000) = -20;
-    (unsigned int *)(0x49000004) = 50;
-    
-    int x = 10;
-    int y = 50;
-
-    int z = x * y;
-
-    x = fact(5);
-
-    gpio_write(x);
-
-    uart_init (0, 0);
-    uart_puts (0, "Hello World!\n", 13);
-
-    gpio_write(z);
-
-    for(int i=0; i<z; i++);
-
-    gpio_write(0x00AA);
-
-    x = 5;
-    //asm volatile ("csrrw   zero, mie, %0" :: "r" (x));
-    asm volatile ("csrrwi   zero, mie, %0" :: "i" (5));
-
-    x = 0x100;
-    asm volatile ("csrrw   zero, 0x310, %0" :: "r" (x));
-
-    gpio_im(0x0100);
-
-    for(int i=0; i<50; i++);
-    */
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/verilog/rtl/user_project/rtl/IPs/DFFRAMBB.v b/verilog/rtl/user_project/rtl/IPs/DFFRAMBB.v
index 5599bc8..2825426 100644
--- a/verilog/rtl/user_project/rtl/IPs/DFFRAMBB.v
+++ b/verilog/rtl/user_project/rtl/IPs/DFFRAMBB.v
@@ -67,14 +67,46 @@
 endmodule
 
 module DEC2x4 (
+`ifdef USE_POWER_PINS
+    input VPWR,
+    input VGND,
+`endif
     input           EN,
     input   [1:0]   A,
     output  [3:0]   SEL
 );
-    sky130_fd_sc_hd__nor3b_4    AND0 ( .Y(SEL[0]), .A(A[0]),   .B(A[1]), .C_N(EN) );
-    sky130_fd_sc_hd__and3b_4    AND1 ( .X(SEL[1]), .A_N(A[1]), .B(A[0]), .C(EN) );
-    sky130_fd_sc_hd__and3b_4    AND2 ( .X(SEL[2]), .A_N(A[0]), .B(A[1]), .C(EN) );
-    sky130_fd_sc_hd__and3_4     AND3 ( .X(SEL[3]), .A(A[1]),   .B(A[0]), .C(EN) );
+    sky130_fd_sc_hd__nor3b_4    AND0 ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .Y(SEL[0]), .A(A[0]),   .B(A[1]), .C_N(EN) );
+    sky130_fd_sc_hd__and3b_4    AND1 ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .X(SEL[1]), .A_N(A[1]), .B(A[0]), .C(EN) );
+    sky130_fd_sc_hd__and3b_4    AND2 ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .X(SEL[2]), .A_N(A[0]), .B(A[1]), .C(EN) );
+    sky130_fd_sc_hd__and3_4     AND3 ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .X(SEL[3]), .A(A[1]),   .B(A[0]), .C(EN) );
     
 endmodule
 
@@ -123,11 +155,22 @@
 endmodule
 
 module MUX4x1_32(
+`ifdef USE_POWER_PINS
+    input VPWR,
+    input VGND,
+`endif
     input   [31:0]      A0, A1, A2, A3,
     input   [1:0]       S,
     output  [31:0]      X
 );
-    sky130_fd_sc_hd__mux4_1 MUX[31:0] (.A0(A0), .A1(A1), .A2(A2), .A3(A3), .S0(S[0]), .S1(S[1]), .X(X) );
+    sky130_fd_sc_hd__mux4_1 MUX[31:0] (
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .A0(A0), .A1(A1), .A2(A2), .A3(A3), .S0(S[0]), .S1(S[1]), .X(X) );
 endmodule
 
 module PASS (input [31:0] A, output [31:0] X);
diff --git a/verilog/rtl/user_project/rtl/IPs/RAM_3Kx32.v b/verilog/rtl/user_project/rtl/IPs/RAM_3Kx32.v
index 57f8fa5..d9d1125 100644
--- a/verilog/rtl/user_project/rtl/IPs/RAM_3Kx32.v
+++ b/verilog/rtl/user_project/rtl/IPs/RAM_3Kx32.v
@@ -2,6 +2,10 @@
 `default_nettype none
 
 module RAM_3Kx32 (
+`ifdef USE_POWER_PINS
+    VPWR,
+    VGND,
+`endif
     CLK,
     WE,
     EN,
@@ -41,9 +45,29 @@
         
     endgenerate 
     
-    MUX4x1_32 MUX ( .A0(_Do_[0]), .A1(_Do_[1]), .A2(_Do_[2]), .A3(32'b0), .S(A[11:10]), .X(Do_pre) );
-    DEC2x4 DEC ( .EN(EN), .A(A[11:10]), .SEL(_EN_) );
+    MUX4x1_32 MUX ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+    `endif
+        .A0(_Do_[0]), .A1(_Do_[1]), .A2(_Do_[2]), .A3(32'b0), .S(A[11:10]), .X(Do_pre) 
+    );
+    DEC2x4 DEC ( 
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+    `endif
+        .EN(EN), .A(A[11:10]), .SEL(_EN_)
+    );
 
-    sky130_fd_sc_hd__clkbuf_4 DOBUF[31:0] (.X(Do), .A(Do_pre));
+    sky130_fd_sc_hd__clkbuf_4 DOBUF[31:0] (
+    `ifdef USE_POWER_PINS
+        .VPWR(VPWR),
+        .VGND(VGND),
+        .VPB(VPWR),
+        .VNB(VGND),
+    `endif
+        .X(Do), .A(Do_pre)
+    );
     
-endmodule
\ No newline at end of file
+endmodule
diff --git a/verilog/rtl/user_project/rtl/soc_core.v b/verilog/rtl/user_project/rtl/soc_core.v
index 115fc2c..bc70016 100644
--- a/verilog/rtl/user_project/rtl/soc_core.v
+++ b/verilog/rtl/user_project/rtl/soc_core.v
@@ -3,6 +3,10 @@
 `timescale 1ns/1ns
 
 module soc_core (
+`ifdef USE_POWER_PINS
+	input VPWR,
+	input VGND,
+`endif
 	input HCLK, 
 	input HRESETn,
 	
@@ -182,6 +186,10 @@
 
 
 	RAM_3Kx32 RAM (
+	`ifdef USE_POWER_PINS
+		.VPWR(VPWR),
+		.VGND(VGND),
+	`endif
 		.CLK(HCLK),
 		.WE(SRAMWEN_Sys0_S1),
 		.EN(SRAMCS0_Sys0_S1),
diff --git a/verilog/rtl/user_project/rtl/user_project_wrapper.v b/verilog/rtl/user_project/rtl/user_project_wrapper.v
index caa1883..863412a 100644
--- a/verilog/rtl/user_project/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project/rtl/user_project_wrapper.v
@@ -121,6 +121,10 @@
     assign io_oeb[17:14] = {4{~fdoeb}};
 
     soc_core core(
+    `ifdef USE_POWER_PINS
+        .VPWR(vccd1),
+        .VGND(vssd1)
+    `endif
 
         .HCLK(wb_clk_i), 
 	    .HRESETn(~wb_rst_i),
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index a0f87c7..65df046 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -121,6 +121,10 @@
     assign io_oeb[17:14] = {4{~fdoeb}};
 
     soc_core core(
+    `ifdef USE_POWER_PINS
+        .VPWR(vccd1),
+        .VGND(vssd1),
+    `endif
 
         .HCLK(wb_clk_i), 
 	    .HRESETn(la_data_in[9]),