Ready for PD phase
diff --git a/gds/sram_32_256_sky130A.gds b/gds/sram_32_256_sky130A.gds
new file mode 100644
index 0000000..17f5412
--- /dev/null
+++ b/gds/sram_32_256_sky130A.gds
Binary files differ
diff --git a/lef/sram_32_256_sky130A.lef b/lef/sram_32_256_sky130A.lef
new file mode 100644
index 0000000..d829f87
--- /dev/null
+++ b/lef/sram_32_256_sky130A.lef
@@ -0,0 +1,697 @@
+VERSION 5.7 ;
+  NOWIREEXTENSIONATPIN ON ;
+  DIVIDERCHAR "/" ;
+  BUSBITCHARS "[]" ;
+MACRO sram_32_256_sky130A
+  CLASS BLOCK ;
+  FOREIGN sram_32_256_sky130A ;
+  ORIGIN 0.000 0.000 ;
+  SIZE 578.380 BY 355.340 ;
+  PIN csb0
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 20.400 16.020 20.780 ;
+    END
+  END csb0
+  PIN web0
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 22.440 15.220 22.820 ;
+    END
+  END web0
+  PIN clk0
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 38.080 0.000 38.460 18.390 ;
+    END
+  END clk0
+  PIN din0[0]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 131.240 0.000 131.620 14.990 ;
+    END
+  END din0[0]
+  PIN din0[1]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 143.480 0.000 143.860 14.990 ;
+    END
+  END din0[1]
+  PIN din0[2]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 157.760 0.000 158.140 14.990 ;
+    END
+  END din0[2]
+  PIN din0[3]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 170.000 0.000 170.380 14.990 ;
+    END
+  END din0[3]
+  PIN din0[4]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 182.920 0.000 183.300 14.990 ;
+    END
+  END din0[4]
+  PIN din0[5]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 196.520 0.000 196.900 14.990 ;
+    END
+  END din0[5]
+  PIN din0[6]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 209.440 0.000 209.820 14.990 ;
+    END
+  END din0[6]
+  PIN din0[7]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 222.360 0.000 222.740 14.990 ;
+    END
+  END din0[7]
+  PIN din0[8]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 235.960 0.000 236.340 14.990 ;
+    END
+  END din0[8]
+  PIN din0[9]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 249.560 0.000 249.940 14.990 ;
+    END
+  END din0[9]
+  PIN din0[10]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 262.480 0.000 262.860 14.990 ;
+    END
+  END din0[10]
+  PIN din0[11]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 275.400 0.000 275.780 14.990 ;
+    END
+  END din0[11]
+  PIN din0[12]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 288.320 0.000 288.700 14.990 ;
+    END
+  END din0[12]
+  PIN din0[13]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 301.240 0.000 301.620 14.990 ;
+    END
+  END din0[13]
+  PIN din0[14]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 314.840 0.000 315.220 14.990 ;
+    END
+  END din0[14]
+  PIN din0[15]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 328.440 0.000 328.820 14.990 ;
+    END
+  END din0[15]
+  PIN din0[16]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 340.680 0.000 341.060 14.990 ;
+    END
+  END din0[16]
+  PIN din0[17]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 354.280 0.000 354.660 14.990 ;
+    END
+  END din0[17]
+  PIN din0[18]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 367.200 0.000 367.580 14.990 ;
+    END
+  END din0[18]
+  PIN din0[19]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 380.800 0.000 381.180 14.990 ;
+    END
+  END din0[19]
+  PIN din0[20]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 393.040 0.000 393.420 14.990 ;
+    END
+  END din0[20]
+  PIN din0[21]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 406.640 0.000 407.020 14.990 ;
+    END
+  END din0[21]
+  PIN din0[22]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 420.240 0.000 420.620 14.990 ;
+    END
+  END din0[22]
+  PIN din0[23]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 433.160 0.000 433.540 14.990 ;
+    END
+  END din0[23]
+  PIN din0[24]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 445.400 0.000 445.780 14.990 ;
+    END
+  END din0[24]
+  PIN din0[25]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 459.000 0.000 459.380 14.990 ;
+    END
+  END din0[25]
+  PIN din0[26]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 471.920 0.000 472.300 14.990 ;
+    END
+  END din0[26]
+  PIN din0[27]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 484.840 0.000 485.220 14.990 ;
+    END
+  END din0[27]
+  PIN din0[28]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 499.120 0.000 499.500 14.990 ;
+    END
+  END din0[28]
+  PIN din0[29]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 512.040 0.000 512.420 14.990 ;
+    END
+  END din0[29]
+  PIN din0[30]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 524.280 0.000 524.660 14.990 ;
+    END
+  END din0[30]
+  PIN din0[31]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 537.880 0.000 538.260 14.990 ;
+    END
+  END din0[31]
+  PIN dout0[0]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 140.760 0.000 141.140 32.670 ;
+    END
+  END dout0[0]
+  PIN dout0[1]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 153.680 0.000 154.060 32.670 ;
+    END
+  END dout0[1]
+  PIN dout0[2]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 166.600 0.000 166.980 32.670 ;
+    END
+  END dout0[2]
+  PIN dout0[3]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 179.520 0.000 179.900 32.670 ;
+    END
+  END dout0[3]
+  PIN dout0[4]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 193.120 0.000 193.500 32.670 ;
+    END
+  END dout0[4]
+  PIN dout0[5]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 206.040 0.000 206.420 32.670 ;
+    END
+  END dout0[5]
+  PIN dout0[6]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 218.960 0.000 219.340 32.670 ;
+    END
+  END dout0[6]
+  PIN dout0[7]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 232.560 0.000 232.940 32.670 ;
+    END
+  END dout0[7]
+  PIN dout0[8]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 245.480 0.000 245.860 32.670 ;
+    END
+  END dout0[8]
+  PIN dout0[9]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 258.400 0.000 258.780 32.670 ;
+    END
+  END dout0[9]
+  PIN dout0[10]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 272.000 0.000 272.380 32.670 ;
+    END
+  END dout0[10]
+  PIN dout0[11]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 284.920 0.000 285.300 32.670 ;
+    END
+  END dout0[11]
+  PIN dout0[12]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 297.840 0.000 298.220 32.670 ;
+    END
+  END dout0[12]
+  PIN dout0[13]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 311.440 0.000 311.820 32.670 ;
+    END
+  END dout0[13]
+  PIN dout0[14]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 324.360 0.000 324.740 32.670 ;
+    END
+  END dout0[14]
+  PIN dout0[15]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 337.280 0.000 337.660 32.670 ;
+    END
+  END dout0[15]
+  PIN dout0[16]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 350.880 0.000 351.260 32.670 ;
+    END
+  END dout0[16]
+  PIN dout0[17]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 363.800 0.000 364.180 32.670 ;
+    END
+  END dout0[17]
+  PIN dout0[18]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 377.400 0.000 377.780 32.670 ;
+    END
+  END dout0[18]
+  PIN dout0[19]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 391.000 0.000 391.380 32.670 ;
+    END
+  END dout0[19]
+  PIN dout0[20]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 403.240 0.000 403.620 32.670 ;
+    END
+  END dout0[20]
+  PIN dout0[21]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 417.520 0.000 417.900 32.670 ;
+    END
+  END dout0[21]
+  PIN dout0[22]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 430.440 0.000 430.820 32.670 ;
+    END
+  END dout0[22]
+  PIN dout0[23]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 443.360 0.000 443.740 32.670 ;
+    END
+  END dout0[23]
+  PIN dout0[24]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 456.280 0.000 456.660 32.670 ;
+    END
+  END dout0[24]
+  PIN dout0[25]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 469.200 0.000 469.580 32.670 ;
+    END
+  END dout0[25]
+  PIN dout0[26]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 482.800 0.000 483.180 32.670 ;
+    END
+  END dout0[26]
+  PIN dout0[27]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 495.720 0.000 496.100 32.670 ;
+    END
+  END dout0[27]
+  PIN dout0[28]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 509.320 0.000 509.700 32.670 ;
+    END
+  END dout0[28]
+  PIN dout0[29]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 522.240 0.000 522.620 32.670 ;
+    END
+  END dout0[29]
+  PIN dout0[30]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 535.160 0.000 535.540 32.670 ;
+    END
+  END dout0[30]
+  PIN dout0[31]
+    DIRECTION OUTPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 549.260 33.320 578.380 33.700 ;
+    END
+  END dout0[31]
+  PIN addr0[0]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 104.720 0.000 105.100 14.990 ;
+    END
+  END addr0[0]
+  PIN addr0[1]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met4 ;
+        RECT 117.640 0.000 118.020 14.990 ;
+    END
+  END addr0[1]
+  PIN addr0[2]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 132.600 78.430 132.980 ;
+    END
+  END addr0[2]
+  PIN addr0[3]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 135.320 78.430 135.700 ;
+    END
+  END addr0[3]
+  PIN addr0[4]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 141.440 78.430 141.820 ;
+    END
+  END addr0[4]
+  PIN addr0[5]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 143.480 79.260 143.860 ;
+    END
+  END addr0[5]
+  PIN addr0[6]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 150.280 79.260 150.660 ;
+    END
+  END addr0[6]
+  PIN addr0[7]
+    DIRECTION INPUT ;
+    PORT
+      LAYER met3 ;
+        RECT 0.000 151.640 9.900 152.020 ;
+    END
+  END addr0[7]
+  PIN vccd1
+    DIRECTION INOUT ;
+    USE POWER ; 
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met4 ;
+        RECT 4.760 4.760 6.500 351.940 ;
+      LAYER met3 ;
+        RECT 4.760 4.760 573.620 6.500 ;
+      LAYER met3 ;
+        RECT 4.760 350.200 573.620 351.940 ;
+      LAYER met4 ;
+        RECT 571.880 4.760 573.620 351.940 ;
+    END
+  END vccd1
+  PIN vssd1
+    DIRECTION INOUT ;
+    USE GROUND ; 
+    SHAPE ABUTMENT ;
+    PORT
+      LAYER met4 ;
+        RECT 575.280 1.360 577.020 355.340 ;
+      LAYER met3 ;
+        RECT 1.360 353.600 577.020 355.340 ;
+      LAYER met3 ;
+        RECT 1.360 1.360 577.020 3.100 ;
+      LAYER met4 ;
+        RECT 1.360 1.360 3.100 355.340 ;
+    END
+  END vssd1
+  OBS
+      LAYER li1 ;
+        RECT 8.575 8.445 569.385 347.845 ;
+      LAYER met1 ;
+        RECT 8.100 8.050 569.860 348.240 ;
+      LAYER met2 ;
+        RECT 8.100 8.050 569.860 348.240 ;
+      LAYER met3 ;
+        RECT 2.720 152.420 575.660 348.540 ;
+        RECT 10.300 151.240 575.660 152.420 ;
+        RECT 2.720 151.060 575.660 151.240 ;
+        RECT 79.660 149.880 575.660 151.060 ;
+        RECT 2.720 144.260 575.660 149.880 ;
+        RECT 79.660 143.080 575.660 144.260 ;
+        RECT 2.720 142.220 575.660 143.080 ;
+        RECT 78.830 141.040 575.660 142.220 ;
+        RECT 2.720 136.100 575.660 141.040 ;
+        RECT 78.830 134.920 575.660 136.100 ;
+        RECT 2.720 133.380 575.660 134.920 ;
+        RECT 78.830 132.200 575.660 133.380 ;
+        RECT 2.720 34.100 575.660 132.200 ;
+        RECT 2.720 32.920 548.860 34.100 ;
+        RECT 2.720 23.220 575.660 32.920 ;
+        RECT 15.620 22.040 575.660 23.220 ;
+        RECT 2.720 21.180 575.660 22.040 ;
+        RECT 16.420 20.000 575.660 21.180 ;
+        RECT 2.720 8.160 575.660 20.000 ;
+      LAYER met4 ;
+        RECT 9.520 33.070 568.860 350.580 ;
+        RECT 9.520 18.790 140.360 33.070 ;
+        RECT 9.520 2.720 37.680 18.790 ;
+        RECT 38.860 15.390 140.360 18.790 ;
+        RECT 38.860 2.720 104.320 15.390 ;
+        RECT 105.500 2.720 117.240 15.390 ;
+        RECT 118.420 2.720 130.840 15.390 ;
+        RECT 132.020 2.720 140.360 15.390 ;
+        RECT 141.540 15.390 153.280 33.070 ;
+        RECT 141.540 2.720 143.080 15.390 ;
+        RECT 144.260 2.720 153.280 15.390 ;
+        RECT 154.460 15.390 166.200 33.070 ;
+        RECT 154.460 2.720 157.360 15.390 ;
+        RECT 158.540 2.720 166.200 15.390 ;
+        RECT 167.380 15.390 179.120 33.070 ;
+        RECT 167.380 2.720 169.600 15.390 ;
+        RECT 170.780 2.720 179.120 15.390 ;
+        RECT 180.300 15.390 192.720 33.070 ;
+        RECT 180.300 2.720 182.520 15.390 ;
+        RECT 183.700 2.720 192.720 15.390 ;
+        RECT 193.900 15.390 205.640 33.070 ;
+        RECT 193.900 2.720 196.120 15.390 ;
+        RECT 197.300 2.720 205.640 15.390 ;
+        RECT 206.820 15.390 218.560 33.070 ;
+        RECT 206.820 2.720 209.040 15.390 ;
+        RECT 210.220 2.720 218.560 15.390 ;
+        RECT 219.740 15.390 232.160 33.070 ;
+        RECT 219.740 2.720 221.960 15.390 ;
+        RECT 223.140 2.720 232.160 15.390 ;
+        RECT 233.340 15.390 245.080 33.070 ;
+        RECT 233.340 2.720 235.560 15.390 ;
+        RECT 236.740 2.720 245.080 15.390 ;
+        RECT 246.260 15.390 258.000 33.070 ;
+        RECT 246.260 2.720 249.160 15.390 ;
+        RECT 250.340 2.720 258.000 15.390 ;
+        RECT 259.180 15.390 271.600 33.070 ;
+        RECT 259.180 2.720 262.080 15.390 ;
+        RECT 263.260 2.720 271.600 15.390 ;
+        RECT 272.780 15.390 284.520 33.070 ;
+        RECT 272.780 2.720 275.000 15.390 ;
+        RECT 276.180 2.720 284.520 15.390 ;
+        RECT 285.700 15.390 297.440 33.070 ;
+        RECT 285.700 2.720 287.920 15.390 ;
+        RECT 289.100 2.720 297.440 15.390 ;
+        RECT 298.620 15.390 311.040 33.070 ;
+        RECT 298.620 2.720 300.840 15.390 ;
+        RECT 302.020 2.720 311.040 15.390 ;
+        RECT 312.220 15.390 323.960 33.070 ;
+        RECT 312.220 2.720 314.440 15.390 ;
+        RECT 315.620 2.720 323.960 15.390 ;
+        RECT 325.140 15.390 336.880 33.070 ;
+        RECT 325.140 2.720 328.040 15.390 ;
+        RECT 329.220 2.720 336.880 15.390 ;
+        RECT 338.060 15.390 350.480 33.070 ;
+        RECT 338.060 2.720 340.280 15.390 ;
+        RECT 341.460 2.720 350.480 15.390 ;
+        RECT 351.660 15.390 363.400 33.070 ;
+        RECT 351.660 2.720 353.880 15.390 ;
+        RECT 355.060 2.720 363.400 15.390 ;
+        RECT 364.580 15.390 377.000 33.070 ;
+        RECT 364.580 2.720 366.800 15.390 ;
+        RECT 367.980 2.720 377.000 15.390 ;
+        RECT 378.180 15.390 390.600 33.070 ;
+        RECT 378.180 2.720 380.400 15.390 ;
+        RECT 381.580 2.720 390.600 15.390 ;
+        RECT 391.780 15.390 402.840 33.070 ;
+        RECT 391.780 2.720 392.640 15.390 ;
+        RECT 393.820 2.720 402.840 15.390 ;
+        RECT 404.020 15.390 417.120 33.070 ;
+        RECT 404.020 2.720 406.240 15.390 ;
+        RECT 407.420 2.720 417.120 15.390 ;
+        RECT 418.300 15.390 430.040 33.070 ;
+        RECT 418.300 2.720 419.840 15.390 ;
+        RECT 421.020 2.720 430.040 15.390 ;
+        RECT 431.220 15.390 442.960 33.070 ;
+        RECT 431.220 2.720 432.760 15.390 ;
+        RECT 433.940 2.720 442.960 15.390 ;
+        RECT 444.140 15.390 455.880 33.070 ;
+        RECT 444.140 2.720 445.000 15.390 ;
+        RECT 446.180 2.720 455.880 15.390 ;
+        RECT 457.060 15.390 468.800 33.070 ;
+        RECT 457.060 2.720 458.600 15.390 ;
+        RECT 459.780 2.720 468.800 15.390 ;
+        RECT 469.980 15.390 482.400 33.070 ;
+        RECT 469.980 2.720 471.520 15.390 ;
+        RECT 472.700 2.720 482.400 15.390 ;
+        RECT 483.580 15.390 495.320 33.070 ;
+        RECT 483.580 2.720 484.440 15.390 ;
+        RECT 485.620 2.720 495.320 15.390 ;
+        RECT 496.500 15.390 508.920 33.070 ;
+        RECT 496.500 2.720 498.720 15.390 ;
+        RECT 499.900 2.720 508.920 15.390 ;
+        RECT 510.100 15.390 521.840 33.070 ;
+        RECT 510.100 2.720 511.640 15.390 ;
+        RECT 512.820 2.720 521.840 15.390 ;
+        RECT 523.020 15.390 534.760 33.070 ;
+        RECT 523.020 2.720 523.880 15.390 ;
+        RECT 525.060 2.720 534.760 15.390 ;
+        RECT 535.940 15.390 568.860 33.070 ;
+        RECT 535.940 2.720 537.480 15.390 ;
+        RECT 538.660 2.720 568.860 15.390 ;
+  END
+END sram_32_256_sky130A
+END LIBRARY
+
diff --git a/openlane/user_proj_example/config.tcl b/openlane/user_proj_example/config.tcl
index 94af8ba..71545ce 100755
--- a/openlane/user_proj_example/config.tcl
+++ b/openlane/user_proj_example/config.tcl
@@ -22,21 +22,29 @@
 
 set ::env(VERILOG_FILES) "\
 	$::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
-	$script_dir/../../verilog/rtl/user_proj_example.v"
+	$script_dir/../../verilog/rtl/user_proj_example.v \
+	$script_dir/../../verilog/rtl/clk_gate.v \
+	$script_dir/../../verilog/rtl/rvmyth.v"
+set ::env(VERILOG_INCLUDE_DIRS) "\
+	$script_dir/../../verilog/include"
 
 set ::env(DESIGN_IS_CORE) 0
 
-set ::env(CLOCK_PORT) "wb_clk_i"
-set ::env(CLOCK_NET) "counter.clk"
-set ::env(CLOCK_PERIOD) "10"
+set ::env(CLOCK_PORT) "CLK"
+set ::env(CLOCK_NET) "CLK"
+set ::env(CLOCK_PERIOD) "50"
 
 set ::env(FP_SIZING) absolute
-set ::env(DIE_AREA) "0 0 900 600"
+set ::env(DIE_AREA) "0 0 1500 1500"
 
-set ::env(FP_PIN_ORDER_CFG) $script_dir/pin_order.cfg
+set ::env(PL_TARGET_DENSITY) 0.2
 
-set ::env(PL_BASIC_PLACEMENT) 1
-set ::env(PL_TARGET_DENSITY) 0.05
+# You can draw more power domains if you need to 
+set ::env(VDD_NETS) [list {vccd1}]
+set ::env(GND_NETS) [list {vssd1}]
+
+set ::env(PL_RESIZER_HOLD_SLACK_MARGIN) 0.8
+set ::env(GLB_RESIZER_HOLD_SLACK_MARGIN) 0.8
 
 # Maximum layer used for routing is metal 4.
 # This is because this macro will be inserted in a top level (user_project_wrapper) 
@@ -44,10 +52,7 @@
 # in this macro and the top level metal 5 stripes, we have to restrict routes to metal4.  
 set ::env(GLB_RT_MAXLAYER) 5
 
-# You can draw more power domains if you need to 
-set ::env(VDD_NETS) [list {vccd1}]
-set ::env(GND_NETS) [list {vssd1}]
-
 set ::env(DIODE_INSERTION_STRATEGY) 4 
+
 # If you're going to use multiple power domains, then disable cvc run.
-set ::env(RUN_CVC) 1
+set ::env(RUN_CVC) 1
\ No newline at end of file
diff --git a/openlane/user_project_wrapper/config.tcl b/openlane/user_project_wrapper/config.tcl
index 5006ced..7d2b8a4 100755
--- a/openlane/user_project_wrapper/config.tcl
+++ b/openlane/user_project_wrapper/config.tcl
@@ -38,10 +38,10 @@
 	$script_dir/../../verilog/rtl/user_project_wrapper.v"
 
 ## Clock configurations
-set ::env(CLOCK_PORT) "user_clock2"
-set ::env(CLOCK_NET) "mprj.clk"
+set ::env(CLOCK_PORT) "wb_clk_i"
+set ::env(CLOCK_NET) "wb_clk_i"
 
-set ::env(CLOCK_PERIOD) "10"
+set ::env(CLOCK_PERIOD) "50"
 
 ## Internal Macros
 ### Macro PDN Connections
@@ -54,13 +54,16 @@
 ### Black-box verilog and views
 set ::env(VERILOG_FILES_BLACKBOX) "\
 	$::env(CARAVEL_ROOT)/verilog/rtl/defines.v \
-	$script_dir/../../verilog/rtl/user_proj_example.v"
+	$script_dir/../../verilog/rtl/user_proj_example.v \
+	$script_dir/../../verilog/rtl/sram_32_256_sky130A.v"
 
 set ::env(EXTRA_LEFS) "\
-	$script_dir/../../lef/user_proj_example.lef"
+	$script_dir/../../lef/user_proj_example.lef \
+	$script_dir/../../lef/sram_32_256_sky130A.lef"
 
 set ::env(EXTRA_GDS_FILES) "\
-	$script_dir/../../gds/user_proj_example.gds"
+	$script_dir/../../gds/user_proj_example.gds \
+	$script_dir/../../gds/sram_32_256_sky130A.gds"
 
 set ::env(GLB_RT_MAXLAYER) 5
 
@@ -82,4 +85,4 @@
 set ::env(DIODE_INSERTION_STRATEGY) 0
 set ::env(FILL_INSERTION) 0
 set ::env(TAP_DECAP_INSERTION) 0
-set ::env(CLOCK_TREE_SYNTH) 0
+set ::env(CLOCK_TREE_SYNTH) 0
\ No newline at end of file
diff --git a/verilog/gl/clk_gate.v b/verilog/gl/clk_gate.v
new file mode 100644
index 0000000..6df5b7d
--- /dev/null
+++ b/verilog/gl/clk_gate.v
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2015, Steven F. Hoover
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * The name of Steven F. Hoover
+      may not be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+`include "sp_verilog.vh"
+
+
+// Clock gate module used by SandPiper default project.
+
+module clk_gate (output gated_clk, input free_clk, func_en, pwr_en, gating_override);
+
+   assign gated_clk = free_clk;
+endmodule
diff --git a/verilog/gl/rvmyth.v b/verilog/gl/rvmyth.v
new file mode 100644
index 0000000..9e96890
--- /dev/null
+++ b/verilog/gl/rvmyth.v
@@ -0,0 +1,269 @@
+//_\TLV_version 1d: tl-x.org, generated by SandPiper(TM) 1.11-2021/01/28-beta
+`include "sp_verilog.vh" //_\SV
+   // Included URL: "https://raw.githubusercontent.com/shivanishah269/risc-v-core/master/FPGA_Implementation/riscv_shell_lib.tlv"// Included URL: "https://raw.githubusercontent.com/stevehoover/warp-v_includes/2d6d36baa4d2bc62321f982f78c8fe1456641a43/risc-v_defs.tlv"
+
+   module rvmyth (
+      output reg [9:0] OUT,
+      input CLK,
+      input reset,
+      
+      output [7:0] imem_addr,
+      input [31:0] imem_data
+   );
+
+   wire clk = CLK;
+   
+`include "rvmyth_gen.v"
+generate //_\TLV
+   //_|cpu
+      //_@0
+         assign CPU_reset_a0 = reset;
+      
+      //Fetch
+         // Next PC
+         assign CPU_pc_a0[31:0] = (CPU_reset_a1) ? 32'd0 : 
+                     (CPU_valid_taken_br_a3) ? CPU_br_tgt_pc_a3 : 
+                     (CPU_valid_load_a3) ? CPU_inc_pc_a3 : 
+                     (CPU_valid_jump_a3 && CPU_is_jal_a3) ? CPU_br_tgt_pc_a3 :
+                     (CPU_valid_jump_a3 && CPU_is_jalr_a3) ? CPU_jalr_tgt_pc_a3 : CPU_inc_pc_a1;
+         
+      //_@1
+         assign imem_addr = CPU_pc_a0[9:2];
+         assign CPU_instr_a1[31:0] = imem_data;
+         assign CPU_inc_pc_a1[31:0] = CPU_pc_a1 + 32'd4;
+                   
+      // Decode   
+         assign CPU_is_i_instr_a1 = CPU_instr_a1[6:2] == 5'b00000 ||
+                     CPU_instr_a1[6:2] == 5'b00001 ||
+                     CPU_instr_a1[6:2] == 5'b00100 ||
+                     CPU_instr_a1[6:2] == 5'b00110 ||
+                     CPU_instr_a1[6:2] == 5'b11001;
+         assign CPU_is_r_instr_a1 = CPU_instr_a1[6:2] == 5'b01011 ||
+                     CPU_instr_a1[6:2] == 5'b10100 ||
+                     CPU_instr_a1[6:2] == 5'b01100 ||
+                     CPU_instr_a1[6:2] == 5'b01101;                       
+         assign CPU_is_b_instr_a1 = CPU_instr_a1[6:2] == 5'b11000;
+         assign CPU_is_u_instr_a1 = CPU_instr_a1[6:2] == 5'b00101 ||
+                     CPU_instr_a1[6:2] == 5'b01101;
+         assign CPU_is_s_instr_a1 = CPU_instr_a1[6:2] == 5'b01000 ||
+                     CPU_instr_a1[6:2] == 5'b01001;
+         assign CPU_is_j_instr_a1 = CPU_instr_a1[6:2] == 5'b11011;
+         
+         assign CPU_imm_a1[31:0] = CPU_is_i_instr_a1 ? { {21{CPU_instr_a1[31]}} , CPU_instr_a1[30:20] } :
+                     CPU_is_s_instr_a1 ? { {21{CPU_instr_a1[31]}} , CPU_instr_a1[30:25] , CPU_instr_a1[11:8] , CPU_instr_a1[7] } :
+                     CPU_is_b_instr_a1 ? { {20{CPU_instr_a1[31]}} , CPU_instr_a1[7] , CPU_instr_a1[30:25] , CPU_instr_a1[11:8] , 1'b0} :
+                     CPU_is_u_instr_a1 ? { CPU_instr_a1[31:12] , 12'b0} : 
+                     CPU_is_j_instr_a1 ? { {12{CPU_instr_a1[31]}} , CPU_instr_a1[19:12] , CPU_instr_a1[20] , CPU_instr_a1[30:21] , 1'b0} : 32'b0;
+         
+         assign CPU_rs2_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1;
+         assign CPU_rs1_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1 || CPU_is_i_instr_a1;
+         assign CPU_rd_valid_a1 = CPU_is_r_instr_a1 || CPU_is_i_instr_a1 || CPU_is_u_instr_a1 || CPU_is_j_instr_a1;
+         assign CPU_funct3_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1 || CPU_is_i_instr_a1;
+         assign CPU_funct7_valid_a1 = CPU_is_r_instr_a1;
+         
+         //_?$rs2_valid
+            assign CPU_rs2_a1[4:0] = CPU_instr_a1[24:20];
+         //_?$rs1_valid
+            assign CPU_rs1_a1[4:0] = CPU_instr_a1[19:15];
+         //_?$rd_valid
+            assign CPU_rd_a1[4:0] = CPU_instr_a1[11:7];
+         //_?$funct3_valid
+            assign CPU_funct3_a1[2:0] = CPU_instr_a1[14:12];
+         //_?$funct7_valid
+            assign CPU_funct7_a1[6:0] = CPU_instr_a1[31:25];
+               
+         assign CPU_opcode_a1[6:0] = CPU_instr_a1[6:0];
+         
+         assign CPU_dec_bits_a1[10:0] = {CPU_funct7_a1[5],CPU_funct3_a1,CPU_opcode_a1};
+         
+         // Branch Instruction
+         assign CPU_is_beq_a1 = CPU_dec_bits_a1[9:0] == 10'b000_1100011;
+         assign CPU_is_bne_a1 = CPU_dec_bits_a1[9:0] == 10'b001_1100011;
+         assign CPU_is_blt_a1 = CPU_dec_bits_a1[9:0] == 10'b100_1100011;
+         assign CPU_is_bge_a1 = CPU_dec_bits_a1[9:0] == 10'b101_1100011;
+         assign CPU_is_bltu_a1 = CPU_dec_bits_a1[9:0] == 10'b110_1100011;
+         assign CPU_is_bgeu_a1 = CPU_dec_bits_a1[9:0] == 10'b111_1100011;
+         
+         // Arithmetic Instruction
+         assign CPU_is_add_a1 = CPU_dec_bits_a1 == 11'b0_000_0110011;
+         assign CPU_is_addi_a1 = CPU_dec_bits_a1[9:0] == 10'b000_0010011;
+         assign CPU_is_or_a1 = CPU_dec_bits_a1 == 11'b0_110_0110011;
+         assign CPU_is_ori_a1 = CPU_dec_bits_a1[9:0] == 10'b110_0010011;
+         assign CPU_is_xor_a1 = CPU_dec_bits_a1 == 11'b0_100_0110011;
+         assign CPU_is_xori_a1 = CPU_dec_bits_a1[9:0] == 10'b100_0010011;
+         assign CPU_is_and_a1 = CPU_dec_bits_a1 == 11'b0_111_0110011;
+         assign CPU_is_andi_a1 = CPU_dec_bits_a1[9:0] == 10'b111_0010011;
+         assign CPU_is_sub_a1 = CPU_dec_bits_a1 == 11'b1_000_0110011;
+         assign CPU_is_slti_a1 = CPU_dec_bits_a1[9:0] == 10'b010_0010011;
+         assign CPU_is_sltiu_a1 = CPU_dec_bits_a1[9:0] == 10'b011_0010011;
+         assign CPU_is_slli_a1 = CPU_dec_bits_a1 == 11'b0_001_0010011;
+         assign CPU_is_srli_a1 = CPU_dec_bits_a1 == 11'b0_101_0010011;
+         assign CPU_is_srai_a1 = CPU_dec_bits_a1 == 11'b1_101_0010011;
+         assign CPU_is_sll_a1 = CPU_dec_bits_a1 == 11'b0_001_0110011;
+         assign CPU_is_slt_a1 = CPU_dec_bits_a1 == 11'b0_010_0110011;
+         assign CPU_is_sltu_a1 = CPU_dec_bits_a1 == 11'b0_011_0110011;
+         assign CPU_is_srl_a1 = CPU_dec_bits_a1 == 11'b0_101_0110011;
+         assign CPU_is_sra_a1 = CPU_dec_bits_a1 == 11'b1_101_0110011;
+         
+         // Load Instruction
+         assign CPU_is_load_a1 = CPU_dec_bits_a1[6:0] == 7'b0000011;
+         
+         // Store Instruction
+         assign CPU_is_sb_a1 = CPU_dec_bits_a1[9:0] == 10'b000_0100011;
+         assign CPU_is_sh_a1 = CPU_dec_bits_a1[9:0] == 10'b001_0100011;
+         assign CPU_is_sw_a1 = CPU_dec_bits_a1[9:0] == 10'b010_0100011;
+         
+         // Jump Instruction
+         assign CPU_is_lui_a1 = CPU_dec_bits_a1[6:0] == 7'b0110111;
+         assign CPU_is_auipc_a1 = CPU_dec_bits_a1[6:0] == 7'b0010111;
+         assign CPU_is_jal_a1 = CPU_dec_bits_a1[6:0] == 7'b1101111;
+         assign CPU_is_jalr_a1 = CPU_dec_bits_a1[9:0] == 10'b000_1100111;
+         
+         assign CPU_is_jump_a1 = CPU_is_jal_a1 || CPU_is_jalr_a1;
+         
+      //_@2   
+      // Register File Read
+         assign CPU_rf_rd_en1_a2 = CPU_rs1_valid_a2;
+         //_?$rf_rd_en1
+            assign CPU_rf_rd_index1_a2[4:0] = CPU_rs1_a2[4:0];
+         
+         assign CPU_rf_rd_en2_a2 = CPU_rs2_valid_a2;
+         //_?$rf_rd_en2
+            assign CPU_rf_rd_index2_a2[4:0] = CPU_rs2_a2[4:0];
+               
+      // Branch Target PC       
+         assign CPU_br_tgt_pc_a2[31:0] = CPU_pc_a2 + CPU_imm_a2;
+      
+      // Jump Target PC
+         assign CPU_jalr_tgt_pc_a2[31:0] = CPU_src1_value_a2 + CPU_imm_a2;
+         
+      // Input signals to ALU
+         assign CPU_src1_value_a2[31:0] = ((CPU_rd_a3 == CPU_rs1_a2) && CPU_rf_wr_en_a3) ? CPU_result_a3 : CPU_rf_rd_data1_a2[31:0];
+         assign CPU_src2_value_a2[31:0] = ((CPU_rd_a3 == CPU_rs2_a2) && CPU_rf_wr_en_a3) ? CPU_result_a3 : CPU_rf_rd_data2_a2[31:0];
+         
+      //_@3   
+         
+      // ALU
+         assign CPU_sltu_result_a3 = CPU_src1_value_a3 < CPU_src2_value_a3 ;
+         assign CPU_sltiu_result_a3 = CPU_src1_value_a3 < CPU_imm_a3 ;
+         
+         assign CPU_result_a3[31:0] = CPU_is_addi_a3 ? CPU_src1_value_a3 + CPU_imm_a3 :
+                           CPU_is_add_a3 ? CPU_src1_value_a3 + CPU_src2_value_a3 : 
+                           CPU_is_or_a3 ? CPU_src1_value_a3 | CPU_src2_value_a3 : 
+                           CPU_is_ori_a3 ? CPU_src1_value_a3 | CPU_imm_a3 :
+                           CPU_is_xor_a3 ? CPU_src1_value_a3 ^ CPU_src2_value_a3 :
+                           CPU_is_xori_a3 ? CPU_src1_value_a3 ^ CPU_imm_a3 :
+                           CPU_is_and_a3 ? CPU_src1_value_a3 & CPU_src2_value_a3 :
+                           CPU_is_andi_a3 ? CPU_src1_value_a3 & CPU_imm_a3 :
+                           CPU_is_sub_a3 ? CPU_src1_value_a3 - CPU_src2_value_a3 :
+                           CPU_is_slti_a3 ? ((CPU_src1_value_a3[31] == CPU_imm_a3[31]) ? CPU_sltiu_result_a3 : {31'b0,CPU_src1_value_a3[31]}) :
+                           CPU_is_sltiu_a3 ? CPU_sltiu_result_a3 :
+                           CPU_is_slli_a3 ? CPU_src1_value_a3 << CPU_imm_a3[5:0] :
+                           CPU_is_srli_a3 ? CPU_src1_value_a3 >> CPU_imm_a3[5:0] :
+                           CPU_is_srai_a3 ? ({{32{CPU_src1_value_a3[31]}}, CPU_src1_value_a3} >> CPU_imm_a3[4:0]) :
+                           CPU_is_sll_a3 ? CPU_src1_value_a3 << CPU_src2_value_a3[4:0] :
+                           CPU_is_slt_a3 ? ((CPU_src1_value_a3[31] == CPU_src2_value_a3[31]) ? CPU_sltu_result_a3 : {31'b0,CPU_src1_value_a3[31]}) :
+                           CPU_is_sltu_a3 ? CPU_sltu_result_a3 :
+                           CPU_is_srl_a3 ? CPU_src1_value_a3 >> CPU_src2_value_a3[5:0] :
+                           CPU_is_sra_a3 ? ({{32{CPU_src1_value_a3[31]}}, CPU_src1_value_a3} >> CPU_src2_value_a3[4:0]) :
+                           CPU_is_lui_a3 ? ({CPU_imm_a3[31:12], 12'b0}) :
+                           CPU_is_auipc_a3 ? CPU_pc_a3 + CPU_imm_a3 :
+                           CPU_is_jal_a3 ? CPU_pc_a3 + 4 :
+                           CPU_is_jalr_a3 ? CPU_pc_a3 + 4 : 
+                           (CPU_is_load_a3 || CPU_is_s_instr_a3) ? CPU_src1_value_a3 + CPU_imm_a3 : 32'bx;
+                           
+      // Register File Write
+         assign CPU_rf_wr_en_a3 = (CPU_rd_valid_a3 && CPU_valid_a3 && CPU_rd_a3 != 5'b0) || CPU_valid_load_a5;
+         //_?$rf_wr_en
+            assign CPU_rf_wr_index_a3[4:0] = !CPU_valid_a3 ? CPU_rd_a5[4:0] : CPU_rd_a3[4:0];
+      
+         assign CPU_rf_wr_data_a3[31:0] = !CPU_valid_a3 ? CPU_ld_data_a5[31:0] : CPU_result_a3[31:0];
+      
+      // Branch
+         assign CPU_taken_br_a3 = CPU_is_beq_a3 ? (CPU_src1_value_a3 == CPU_src2_value_a3) :
+                     CPU_is_bne_a3 ? (CPU_src1_value_a3 != CPU_src2_value_a3) :
+                     CPU_is_blt_a3 ? ((CPU_src1_value_a3 < CPU_src2_value_a3) ^ (CPU_src1_value_a3[31] != CPU_src2_value_a3[31])) :
+                     CPU_is_bge_a3 ? ((CPU_src1_value_a3 >= CPU_src2_value_a3) ^ (CPU_src1_value_a3[31] != CPU_src2_value_a3[31])) :
+                     CPU_is_bltu_a3 ? (CPU_src1_value_a3 < CPU_src2_value_a3) :
+                     CPU_is_bgeu_a3 ? (CPU_src1_value_a3 >= CPU_src2_value_a3) : 1'b0;
+                     
+         assign CPU_valid_taken_br_a3 = CPU_valid_a3 && CPU_taken_br_a3;
+         
+      // Load
+         assign CPU_valid_load_a3 = CPU_valid_a3 && CPU_is_load_a3;
+         assign CPU_valid_a3 = !(CPU_valid_taken_br_a4 || CPU_valid_taken_br_a5 || CPU_valid_load_a4 || CPU_valid_load_a5 || CPU_valid_jump_a4 || CPU_valid_jump_a5);
+      
+      // Jump
+         assign CPU_valid_jump_a3 = CPU_valid_a3 && CPU_is_jump_a3;
+                  
+      //_@4
+         assign CPU_dmem_rd_en_a4 = CPU_valid_load_a4;
+         assign CPU_dmem_wr_en_a4 = CPU_valid_a4 && CPU_is_s_instr_a4;
+         assign CPU_dmem_addr_a4[3:0] = CPU_result_a4[5:2];
+         assign CPU_dmem_wr_data_a4[31:0] = CPU_src2_value_a4[31:0];
+         
+      //_@5   
+         assign CPU_ld_data_a5[31:0] = CPU_dmem_rd_data_a5[31:0];
+         
+      // Note: Because of the magic we are using for visualisation, if visualisation is enabled below,
+      //       be sure to avoid having unassigned signals (which you might be using for random inputs)
+      //       other than those specifically expected in the labs. You'll get strange errors for these.
+
+         `BOGUS_USE(CPU_is_beq_a5 CPU_is_bne_a5 CPU_is_blt_a5 CPU_is_bge_a5 CPU_is_bltu_a5 CPU_is_bgeu_a5)
+         `BOGUS_USE(CPU_is_sb_a5 CPU_is_sh_a5 CPU_is_sw_a5)
+   // Assert these to end simulation (before Makerchip cycle limit).
+   /*SV_plus*/
+      always @ (posedge CLK) begin
+         OUT = CPU_Xreg_value_a5[17];                
+      end
+   
+   // Macro instantiations for:
+   //  o instruction memory
+   //  o register file
+   //  o data memory
+   //  o CPU visualization
+   //_|cpu
+      // m4+imem(@1)    // Args: (read stage)
+      //_\source /raw.githubusercontent.com/shivanishah269/riscvcore/master/FPGAImplementation/riscvshelllib.tlv 31   // Instantiated from rvmyth.tlv, 226 as: m4+rf(@2, @3)
+         // Reg File
+         //_@3
+            for (xreg = 0; xreg <= 31; xreg=xreg+1) begin : L1_CPU_Xreg //_/xreg
+
+               // For $wr.
+               wire L1_wr_a3;
+
+               assign L1_wr_a3 = CPU_rf_wr_en_a3 && (CPU_rf_wr_index_a3 != 5'b0) && (CPU_rf_wr_index_a3 == xreg);
+               assign CPU_Xreg_value_a3[xreg][31:0] = CPU_reset_a3 ?   xreg           :
+                              L1_wr_a3        ?   CPU_rf_wr_data_a3 :
+                                             CPU_Xreg_value_a4[xreg][31:0];
+            end
+         //_@2
+            //_?$rf_rd_en1
+               assign CPU_rf_rd_data1_a2[31:0] = CPU_Xreg_value_a4[CPU_rf_rd_index1_a2];
+            //_?$rf_rd_en2
+               assign CPU_rf_rd_data2_a2[31:0] = CPU_Xreg_value_a4[CPU_rf_rd_index2_a2];
+            `BOGUS_USE(CPU_rf_rd_data1_a2 CPU_rf_rd_data2_a2) 
+      //_\end_source  // Args: (read stage, write stage) - if equal, no register bypass is required
+      //_\source /raw.githubusercontent.com/shivanishah269/riscvcore/master/FPGAImplementation/riscvshelllib.tlv 48   // Instantiated from rvmyth.tlv, 227 as: m4+dmem(@4)
+         // Data Memory
+         //_@4
+            for (dmem = 0; dmem <= 15; dmem=dmem+1) begin : L1_CPU_Dmem //_/dmem
+
+               // For $wr.
+               wire L1_wr_a4;
+
+               assign L1_wr_a4 = CPU_dmem_wr_en_a4 && (CPU_dmem_addr_a4 == dmem);
+               assign CPU_Dmem_value_a4[dmem][31:0] = CPU_reset_a4 ?   dmem :
+                              L1_wr_a4        ?   CPU_dmem_wr_data_a4 :
+                                             CPU_Dmem_value_a5[dmem][31:0];
+                                        
+            end
+            //_?$dmem_rd_en
+               assign CPU_dmem_rd_data_a4[31:0] = CPU_Dmem_value_a5[CPU_dmem_addr_a4];
+            //`BOGUS_USE($dmem_rd_data)
+      //_\end_source    // Args: (read/write stage)
+endgenerate
+
+//_\SV
+   
+   endmodule
diff --git a/verilog/gl/sram_32_256_sky130A.v b/verilog/gl/sram_32_256_sky130A.v
new file mode 100644
index 0000000..d45d17e
--- /dev/null
+++ b/verilog/gl/sram_32_256_sky130A.v
@@ -0,0 +1,72 @@
+// OpenRAM SRAM model
+// Words: 256
+// Word size: 32
+
+module sram_32_256_sky130A(
+`ifdef USE_POWER_PINS
+    vccd1,
+    vssd1,
+`endif
+// Port 0: RW
+    clk0,csb0,web0,addr0,din0,dout0
+  );
+
+  parameter DATA_WIDTH = 32 ;
+  parameter ADDR_WIDTH = 8 ;
+  parameter RAM_DEPTH = 1 << ADDR_WIDTH;
+  // FIXME: This delay is arbitrary.
+  parameter DELAY = 3 ;
+  parameter VERBOSE = 1 ; //Set to 0 to only display warnings
+  parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
+
+`ifdef USE_POWER_PINS
+    inout vccd1;
+    inout vssd1;
+`endif
+  input  clk0; // clock
+  input   csb0; // active low chip select
+  input  web0; // active low write control
+  input [ADDR_WIDTH-1:0]  addr0;
+  input [DATA_WIDTH-1:0]  din0;
+  output [DATA_WIDTH-1:0] dout0;
+
+  reg  csb0_reg;
+  reg  web0_reg;
+  reg [ADDR_WIDTH-1:0]  addr0_reg;
+  reg [DATA_WIDTH-1:0]  din0_reg;
+  reg [DATA_WIDTH-1:0]  dout0;
+
+  // All inputs are registers
+  always @(posedge clk0)
+  begin
+    csb0_reg = csb0;
+    web0_reg = web0;
+    addr0_reg = addr0;
+    din0_reg = din0;
+    #(T_HOLD) dout0 = 32'bx;
+    if ( !csb0_reg && web0_reg && VERBOSE ) 
+      $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
+    if ( !csb0_reg && !web0_reg && VERBOSE )
+      $display($time," Writing %m addr0=%b din0=%b",addr0_reg,din0_reg);
+  end
+
+reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];
+
+  // Memory Write Block Port 0
+  // Write Operation : When web0 = 0, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_WRITE0
+    if ( !csb0_reg && !web0_reg ) begin
+        mem[addr0_reg][31:0] = din0_reg[31:0];
+    end
+  end
+
+  // Memory Read Block Port 0
+  // Read Operation : When web0 = 1, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_READ0
+    if (!csb0_reg && web0_reg)
+       dout0 <= #(DELAY) mem[addr0_reg];
+  end
+
+endmodule
diff --git a/verilog/include/rvmyth_gen.v b/verilog/include/rvmyth_gen.v
new file mode 100644
index 0000000..0a70a27
--- /dev/null
+++ b/verilog/include/rvmyth_gen.v
@@ -0,0 +1,706 @@
+// Generated by SandPiper(TM) 1.11-2021/01/28-beta from Redwood EDA.
+// Redwood EDA does not claim intellectual property rights to this file and provides no warranty regarding its correctness or quality.
+
+
+`include "sandpiper_gen.vh"
+
+
+genvar dmem, xreg;
+
+
+//
+// Signals declared top-level.
+//
+
+// For |cpu$br_tgt_pc.
+wire [31:0] CPU_br_tgt_pc_a2;
+reg  [31:0] CPU_br_tgt_pc_a3;
+
+// For |cpu$dec_bits.
+wire [10:0] CPU_dec_bits_a1;
+
+// For |cpu$dmem_addr.
+wire [3:0] CPU_dmem_addr_a4;
+
+// For |cpu$dmem_rd_data.
+wire [31:0] CPU_dmem_rd_data_a4;
+reg  [31:0] CPU_dmem_rd_data_a5;
+
+// For |cpu$dmem_rd_en.
+wire CPU_dmem_rd_en_a4;
+
+// For |cpu$dmem_wr_data.
+wire [31:0] CPU_dmem_wr_data_a4;
+
+// For |cpu$dmem_wr_en.
+wire CPU_dmem_wr_en_a4;
+
+// For |cpu$funct3.
+wire [2:0] CPU_funct3_a1;
+
+// For |cpu$funct3_valid.
+wire CPU_funct3_valid_a1;
+
+// For |cpu$funct7.
+wire [6:0] CPU_funct7_a1;
+
+// For |cpu$funct7_valid.
+wire CPU_funct7_valid_a1;
+
+// For |cpu$imm.
+wire [31:0] CPU_imm_a1;
+reg  [31:0] CPU_imm_a2,
+            CPU_imm_a3;
+
+// For |cpu$inc_pc.
+wire [31:0] CPU_inc_pc_a1;
+reg  [31:0] CPU_inc_pc_a2,
+            CPU_inc_pc_a3;
+
+// For |cpu$instr.
+wire [31:0] CPU_instr_a1;
+
+// For |cpu$is_add.
+wire CPU_is_add_a1;
+reg  CPU_is_add_a2,
+     CPU_is_add_a3;
+
+// For |cpu$is_addi.
+wire CPU_is_addi_a1;
+reg  CPU_is_addi_a2,
+     CPU_is_addi_a3;
+
+// For |cpu$is_and.
+wire CPU_is_and_a1;
+reg  CPU_is_and_a2,
+     CPU_is_and_a3;
+
+// For |cpu$is_andi.
+wire CPU_is_andi_a1;
+reg  CPU_is_andi_a2,
+     CPU_is_andi_a3;
+
+// For |cpu$is_auipc.
+wire CPU_is_auipc_a1;
+reg  CPU_is_auipc_a2,
+     CPU_is_auipc_a3;
+
+// For |cpu$is_b_instr.
+wire CPU_is_b_instr_a1;
+
+// For |cpu$is_beq.
+wire CPU_is_beq_a1;
+reg  CPU_is_beq_a2,
+     CPU_is_beq_a3,
+     CPU_is_beq_a4,
+     CPU_is_beq_a5;
+
+// For |cpu$is_bge.
+wire CPU_is_bge_a1;
+reg  CPU_is_bge_a2,
+     CPU_is_bge_a3,
+     CPU_is_bge_a4,
+     CPU_is_bge_a5;
+
+// For |cpu$is_bgeu.
+wire CPU_is_bgeu_a1;
+reg  CPU_is_bgeu_a2,
+     CPU_is_bgeu_a3,
+     CPU_is_bgeu_a4,
+     CPU_is_bgeu_a5;
+
+// For |cpu$is_blt.
+wire CPU_is_blt_a1;
+reg  CPU_is_blt_a2,
+     CPU_is_blt_a3,
+     CPU_is_blt_a4,
+     CPU_is_blt_a5;
+
+// For |cpu$is_bltu.
+wire CPU_is_bltu_a1;
+reg  CPU_is_bltu_a2,
+     CPU_is_bltu_a3,
+     CPU_is_bltu_a4,
+     CPU_is_bltu_a5;
+
+// For |cpu$is_bne.
+wire CPU_is_bne_a1;
+reg  CPU_is_bne_a2,
+     CPU_is_bne_a3,
+     CPU_is_bne_a4,
+     CPU_is_bne_a5;
+
+// For |cpu$is_i_instr.
+wire CPU_is_i_instr_a1;
+
+// For |cpu$is_j_instr.
+wire CPU_is_j_instr_a1;
+
+// For |cpu$is_jal.
+wire CPU_is_jal_a1;
+reg  CPU_is_jal_a2,
+     CPU_is_jal_a3;
+
+// For |cpu$is_jalr.
+wire CPU_is_jalr_a1;
+reg  CPU_is_jalr_a2,
+     CPU_is_jalr_a3;
+
+// For |cpu$is_jump.
+wire CPU_is_jump_a1;
+reg  CPU_is_jump_a2,
+     CPU_is_jump_a3;
+
+// For |cpu$is_load.
+wire CPU_is_load_a1;
+reg  CPU_is_load_a2,
+     CPU_is_load_a3;
+
+// For |cpu$is_lui.
+wire CPU_is_lui_a1;
+reg  CPU_is_lui_a2,
+     CPU_is_lui_a3;
+
+// For |cpu$is_or.
+wire CPU_is_or_a1;
+reg  CPU_is_or_a2,
+     CPU_is_or_a3;
+
+// For |cpu$is_ori.
+wire CPU_is_ori_a1;
+reg  CPU_is_ori_a2,
+     CPU_is_ori_a3;
+
+// For |cpu$is_r_instr.
+wire CPU_is_r_instr_a1;
+
+// For |cpu$is_s_instr.
+wire CPU_is_s_instr_a1;
+reg  CPU_is_s_instr_a2,
+     CPU_is_s_instr_a3,
+     CPU_is_s_instr_a4;
+
+// For |cpu$is_sb.
+wire CPU_is_sb_a1;
+reg  CPU_is_sb_a2,
+     CPU_is_sb_a3,
+     CPU_is_sb_a4,
+     CPU_is_sb_a5;
+
+// For |cpu$is_sh.
+wire CPU_is_sh_a1;
+reg  CPU_is_sh_a2,
+     CPU_is_sh_a3,
+     CPU_is_sh_a4,
+     CPU_is_sh_a5;
+
+// For |cpu$is_sll.
+wire CPU_is_sll_a1;
+reg  CPU_is_sll_a2,
+     CPU_is_sll_a3;
+
+// For |cpu$is_slli.
+wire CPU_is_slli_a1;
+reg  CPU_is_slli_a2,
+     CPU_is_slli_a3;
+
+// For |cpu$is_slt.
+wire CPU_is_slt_a1;
+reg  CPU_is_slt_a2,
+     CPU_is_slt_a3;
+
+// For |cpu$is_slti.
+wire CPU_is_slti_a1;
+reg  CPU_is_slti_a2,
+     CPU_is_slti_a3;
+
+// For |cpu$is_sltiu.
+wire CPU_is_sltiu_a1;
+reg  CPU_is_sltiu_a2,
+     CPU_is_sltiu_a3;
+
+// For |cpu$is_sltu.
+wire CPU_is_sltu_a1;
+reg  CPU_is_sltu_a2,
+     CPU_is_sltu_a3;
+
+// For |cpu$is_sra.
+wire CPU_is_sra_a1;
+reg  CPU_is_sra_a2,
+     CPU_is_sra_a3;
+
+// For |cpu$is_srai.
+wire CPU_is_srai_a1;
+reg  CPU_is_srai_a2,
+     CPU_is_srai_a3;
+
+// For |cpu$is_srl.
+wire CPU_is_srl_a1;
+reg  CPU_is_srl_a2,
+     CPU_is_srl_a3;
+
+// For |cpu$is_srli.
+wire CPU_is_srli_a1;
+reg  CPU_is_srli_a2,
+     CPU_is_srli_a3;
+
+// For |cpu$is_sub.
+wire CPU_is_sub_a1;
+reg  CPU_is_sub_a2,
+     CPU_is_sub_a3;
+
+// For |cpu$is_sw.
+wire CPU_is_sw_a1;
+reg  CPU_is_sw_a2,
+     CPU_is_sw_a3,
+     CPU_is_sw_a4,
+     CPU_is_sw_a5;
+
+// For |cpu$is_u_instr.
+wire CPU_is_u_instr_a1;
+
+// For |cpu$is_xor.
+wire CPU_is_xor_a1;
+reg  CPU_is_xor_a2,
+     CPU_is_xor_a3;
+
+// For |cpu$is_xori.
+wire CPU_is_xori_a1;
+reg  CPU_is_xori_a2,
+     CPU_is_xori_a3;
+
+// For |cpu$jalr_tgt_pc.
+wire [31:0] CPU_jalr_tgt_pc_a2;
+reg  [31:0] CPU_jalr_tgt_pc_a3;
+
+// For |cpu$ld_data.
+wire [31:0] CPU_ld_data_a5;
+
+// For |cpu$opcode.
+wire [6:0] CPU_opcode_a1;
+
+// For |cpu$pc.
+wire [31:0] CPU_pc_a0;
+reg  [31:0] CPU_pc_a1,
+            CPU_pc_a2,
+            CPU_pc_a3;
+
+// For |cpu$rd.
+wire [4:0] CPU_rd_a1;
+reg  [4:0] CPU_rd_a2,
+           CPU_rd_a3,
+           CPU_rd_a4,
+           CPU_rd_a5;
+
+// For |cpu$rd_valid.
+wire CPU_rd_valid_a1;
+reg  CPU_rd_valid_a2,
+     CPU_rd_valid_a3,
+     CPU_rd_valid_a4;
+
+// For |cpu$reset.
+wire CPU_reset_a0;
+reg  CPU_reset_a1,
+     CPU_reset_a2,
+     CPU_reset_a3,
+     CPU_reset_a4;
+
+// For |cpu$result.
+wire [31:0] CPU_result_a3;
+reg  [5:2] CPU_result_a4;
+
+// For |cpu$rf_rd_data1.
+wire [31:0] CPU_rf_rd_data1_a2;
+
+// For |cpu$rf_rd_data2.
+wire [31:0] CPU_rf_rd_data2_a2;
+
+// For |cpu$rf_rd_en1.
+wire CPU_rf_rd_en1_a2;
+
+// For |cpu$rf_rd_en2.
+wire CPU_rf_rd_en2_a2;
+
+// For |cpu$rf_rd_index1.
+wire [4:0] CPU_rf_rd_index1_a2;
+
+// For |cpu$rf_rd_index2.
+wire [4:0] CPU_rf_rd_index2_a2;
+
+// For |cpu$rf_wr_data.
+wire [31:0] CPU_rf_wr_data_a3;
+
+// For |cpu$rf_wr_en.
+wire CPU_rf_wr_en_a3;
+
+// For |cpu$rf_wr_index.
+wire [4:0] CPU_rf_wr_index_a3;
+
+// For |cpu$rs1.
+wire [4:0] CPU_rs1_a1;
+reg  [4:0] CPU_rs1_a2;
+
+// For |cpu$rs1_valid.
+wire CPU_rs1_valid_a1;
+reg  CPU_rs1_valid_a2;
+
+// For |cpu$rs2.
+wire [4:0] CPU_rs2_a1;
+reg  [4:0] CPU_rs2_a2;
+
+// For |cpu$rs2_valid.
+wire CPU_rs2_valid_a1;
+reg  CPU_rs2_valid_a2;
+
+// For |cpu$sltiu_result.
+wire CPU_sltiu_result_a3;
+
+// For |cpu$sltu_result.
+wire CPU_sltu_result_a3;
+
+// For |cpu$src1_value.
+wire [31:0] CPU_src1_value_a2;
+reg  [31:0] CPU_src1_value_a3;
+
+// For |cpu$src2_value.
+wire [31:0] CPU_src2_value_a2;
+reg  [31:0] CPU_src2_value_a3,
+            CPU_src2_value_a4;
+
+// For |cpu$taken_br.
+wire CPU_taken_br_a3;
+
+// For |cpu$valid.
+wire CPU_valid_a3;
+reg  CPU_valid_a4;
+
+// For |cpu$valid_jump.
+wire CPU_valid_jump_a3;
+reg  CPU_valid_jump_a4,
+     CPU_valid_jump_a5;
+
+// For |cpu$valid_load.
+wire CPU_valid_load_a3;
+reg  CPU_valid_load_a4,
+     CPU_valid_load_a5;
+
+// For |cpu$valid_taken_br.
+wire CPU_valid_taken_br_a3;
+reg  CPU_valid_taken_br_a4,
+     CPU_valid_taken_br_a5;
+
+// For |cpu/dmem$value.
+wire [31:0] CPU_Dmem_value_a4 [15:0];
+reg  [31:0] CPU_Dmem_value_a5 [15:0];
+
+// For |cpu/xreg$value.
+wire [31:0] CPU_Xreg_value_a3 [31:0];
+reg  [31:0] CPU_Xreg_value_a4 [31:0],
+            CPU_Xreg_value_a5 [31:0];
+
+
+//
+// Scope: |cpu
+//
+
+// Clock signals.
+wire clkP_CPU_dmem_rd_en_a5 ;
+wire clkP_CPU_rd_valid_a2 ;
+wire clkP_CPU_rd_valid_a3 ;
+wire clkP_CPU_rd_valid_a4 ;
+wire clkP_CPU_rd_valid_a5 ;
+wire clkP_CPU_rs1_valid_a2 ;
+wire clkP_CPU_rs2_valid_a2 ;
+
+
+generate
+
+
+   //
+   // Scope: |cpu
+   //
+
+      // For $br_tgt_pc.
+      always @(posedge clk) CPU_br_tgt_pc_a3[31:0] <= CPU_br_tgt_pc_a2[31:0];
+
+      // For $dmem_rd_data.
+      always @(posedge clkP_CPU_dmem_rd_en_a5) CPU_dmem_rd_data_a5[31:0] <= CPU_dmem_rd_data_a4[31:0];
+
+      // For $imm.
+      always @(posedge clk) CPU_imm_a2[31:0] <= CPU_imm_a1[31:0];
+      always @(posedge clk) CPU_imm_a3[31:0] <= CPU_imm_a2[31:0];
+
+      // For $inc_pc.
+      always @(posedge clk) CPU_inc_pc_a2[31:0] <= CPU_inc_pc_a1[31:0];
+      always @(posedge clk) CPU_inc_pc_a3[31:0] <= CPU_inc_pc_a2[31:0];
+
+      // For $is_add.
+      always @(posedge clk) CPU_is_add_a2 <= CPU_is_add_a1;
+      always @(posedge clk) CPU_is_add_a3 <= CPU_is_add_a2;
+
+      // For $is_addi.
+      always @(posedge clk) CPU_is_addi_a2 <= CPU_is_addi_a1;
+      always @(posedge clk) CPU_is_addi_a3 <= CPU_is_addi_a2;
+
+      // For $is_and.
+      always @(posedge clk) CPU_is_and_a2 <= CPU_is_and_a1;
+      always @(posedge clk) CPU_is_and_a3 <= CPU_is_and_a2;
+
+      // For $is_andi.
+      always @(posedge clk) CPU_is_andi_a2 <= CPU_is_andi_a1;
+      always @(posedge clk) CPU_is_andi_a3 <= CPU_is_andi_a2;
+
+      // For $is_auipc.
+      always @(posedge clk) CPU_is_auipc_a2 <= CPU_is_auipc_a1;
+      always @(posedge clk) CPU_is_auipc_a3 <= CPU_is_auipc_a2;
+
+      // For $is_beq.
+      always @(posedge clk) CPU_is_beq_a2 <= CPU_is_beq_a1;
+      always @(posedge clk) CPU_is_beq_a3 <= CPU_is_beq_a2;
+      always @(posedge clk) CPU_is_beq_a4 <= CPU_is_beq_a3;
+      always @(posedge clk) CPU_is_beq_a5 <= CPU_is_beq_a4;
+
+      // For $is_bge.
+      always @(posedge clk) CPU_is_bge_a2 <= CPU_is_bge_a1;
+      always @(posedge clk) CPU_is_bge_a3 <= CPU_is_bge_a2;
+      always @(posedge clk) CPU_is_bge_a4 <= CPU_is_bge_a3;
+      always @(posedge clk) CPU_is_bge_a5 <= CPU_is_bge_a4;
+
+      // For $is_bgeu.
+      always @(posedge clk) CPU_is_bgeu_a2 <= CPU_is_bgeu_a1;
+      always @(posedge clk) CPU_is_bgeu_a3 <= CPU_is_bgeu_a2;
+      always @(posedge clk) CPU_is_bgeu_a4 <= CPU_is_bgeu_a3;
+      always @(posedge clk) CPU_is_bgeu_a5 <= CPU_is_bgeu_a4;
+
+      // For $is_blt.
+      always @(posedge clk) CPU_is_blt_a2 <= CPU_is_blt_a1;
+      always @(posedge clk) CPU_is_blt_a3 <= CPU_is_blt_a2;
+      always @(posedge clk) CPU_is_blt_a4 <= CPU_is_blt_a3;
+      always @(posedge clk) CPU_is_blt_a5 <= CPU_is_blt_a4;
+
+      // For $is_bltu.
+      always @(posedge clk) CPU_is_bltu_a2 <= CPU_is_bltu_a1;
+      always @(posedge clk) CPU_is_bltu_a3 <= CPU_is_bltu_a2;
+      always @(posedge clk) CPU_is_bltu_a4 <= CPU_is_bltu_a3;
+      always @(posedge clk) CPU_is_bltu_a5 <= CPU_is_bltu_a4;
+
+      // For $is_bne.
+      always @(posedge clk) CPU_is_bne_a2 <= CPU_is_bne_a1;
+      always @(posedge clk) CPU_is_bne_a3 <= CPU_is_bne_a2;
+      always @(posedge clk) CPU_is_bne_a4 <= CPU_is_bne_a3;
+      always @(posedge clk) CPU_is_bne_a5 <= CPU_is_bne_a4;
+
+      // For $is_jal.
+      always @(posedge clk) CPU_is_jal_a2 <= CPU_is_jal_a1;
+      always @(posedge clk) CPU_is_jal_a3 <= CPU_is_jal_a2;
+
+      // For $is_jalr.
+      always @(posedge clk) CPU_is_jalr_a2 <= CPU_is_jalr_a1;
+      always @(posedge clk) CPU_is_jalr_a3 <= CPU_is_jalr_a2;
+
+      // For $is_jump.
+      always @(posedge clk) CPU_is_jump_a2 <= CPU_is_jump_a1;
+      always @(posedge clk) CPU_is_jump_a3 <= CPU_is_jump_a2;
+
+      // For $is_load.
+      always @(posedge clk) CPU_is_load_a2 <= CPU_is_load_a1;
+      always @(posedge clk) CPU_is_load_a3 <= CPU_is_load_a2;
+
+      // For $is_lui.
+      always @(posedge clk) CPU_is_lui_a2 <= CPU_is_lui_a1;
+      always @(posedge clk) CPU_is_lui_a3 <= CPU_is_lui_a2;
+
+      // For $is_or.
+      always @(posedge clk) CPU_is_or_a2 <= CPU_is_or_a1;
+      always @(posedge clk) CPU_is_or_a3 <= CPU_is_or_a2;
+
+      // For $is_ori.
+      always @(posedge clk) CPU_is_ori_a2 <= CPU_is_ori_a1;
+      always @(posedge clk) CPU_is_ori_a3 <= CPU_is_ori_a2;
+
+      // For $is_s_instr.
+      always @(posedge clk) CPU_is_s_instr_a2 <= CPU_is_s_instr_a1;
+      always @(posedge clk) CPU_is_s_instr_a3 <= CPU_is_s_instr_a2;
+      always @(posedge clk) CPU_is_s_instr_a4 <= CPU_is_s_instr_a3;
+
+      // For $is_sb.
+      always @(posedge clk) CPU_is_sb_a2 <= CPU_is_sb_a1;
+      always @(posedge clk) CPU_is_sb_a3 <= CPU_is_sb_a2;
+      always @(posedge clk) CPU_is_sb_a4 <= CPU_is_sb_a3;
+      always @(posedge clk) CPU_is_sb_a5 <= CPU_is_sb_a4;
+
+      // For $is_sh.
+      always @(posedge clk) CPU_is_sh_a2 <= CPU_is_sh_a1;
+      always @(posedge clk) CPU_is_sh_a3 <= CPU_is_sh_a2;
+      always @(posedge clk) CPU_is_sh_a4 <= CPU_is_sh_a3;
+      always @(posedge clk) CPU_is_sh_a5 <= CPU_is_sh_a4;
+
+      // For $is_sll.
+      always @(posedge clk) CPU_is_sll_a2 <= CPU_is_sll_a1;
+      always @(posedge clk) CPU_is_sll_a3 <= CPU_is_sll_a2;
+
+      // For $is_slli.
+      always @(posedge clk) CPU_is_slli_a2 <= CPU_is_slli_a1;
+      always @(posedge clk) CPU_is_slli_a3 <= CPU_is_slli_a2;
+
+      // For $is_slt.
+      always @(posedge clk) CPU_is_slt_a2 <= CPU_is_slt_a1;
+      always @(posedge clk) CPU_is_slt_a3 <= CPU_is_slt_a2;
+
+      // For $is_slti.
+      always @(posedge clk) CPU_is_slti_a2 <= CPU_is_slti_a1;
+      always @(posedge clk) CPU_is_slti_a3 <= CPU_is_slti_a2;
+
+      // For $is_sltiu.
+      always @(posedge clk) CPU_is_sltiu_a2 <= CPU_is_sltiu_a1;
+      always @(posedge clk) CPU_is_sltiu_a3 <= CPU_is_sltiu_a2;
+
+      // For $is_sltu.
+      always @(posedge clk) CPU_is_sltu_a2 <= CPU_is_sltu_a1;
+      always @(posedge clk) CPU_is_sltu_a3 <= CPU_is_sltu_a2;
+
+      // For $is_sra.
+      always @(posedge clk) CPU_is_sra_a2 <= CPU_is_sra_a1;
+      always @(posedge clk) CPU_is_sra_a3 <= CPU_is_sra_a2;
+
+      // For $is_srai.
+      always @(posedge clk) CPU_is_srai_a2 <= CPU_is_srai_a1;
+      always @(posedge clk) CPU_is_srai_a3 <= CPU_is_srai_a2;
+
+      // For $is_srl.
+      always @(posedge clk) CPU_is_srl_a2 <= CPU_is_srl_a1;
+      always @(posedge clk) CPU_is_srl_a3 <= CPU_is_srl_a2;
+
+      // For $is_srli.
+      always @(posedge clk) CPU_is_srli_a2 <= CPU_is_srli_a1;
+      always @(posedge clk) CPU_is_srli_a3 <= CPU_is_srli_a2;
+
+      // For $is_sub.
+      always @(posedge clk) CPU_is_sub_a2 <= CPU_is_sub_a1;
+      always @(posedge clk) CPU_is_sub_a3 <= CPU_is_sub_a2;
+
+      // For $is_sw.
+      always @(posedge clk) CPU_is_sw_a2 <= CPU_is_sw_a1;
+      always @(posedge clk) CPU_is_sw_a3 <= CPU_is_sw_a2;
+      always @(posedge clk) CPU_is_sw_a4 <= CPU_is_sw_a3;
+      always @(posedge clk) CPU_is_sw_a5 <= CPU_is_sw_a4;
+
+      // For $is_xor.
+      always @(posedge clk) CPU_is_xor_a2 <= CPU_is_xor_a1;
+      always @(posedge clk) CPU_is_xor_a3 <= CPU_is_xor_a2;
+
+      // For $is_xori.
+      always @(posedge clk) CPU_is_xori_a2 <= CPU_is_xori_a1;
+      always @(posedge clk) CPU_is_xori_a3 <= CPU_is_xori_a2;
+
+      // For $jalr_tgt_pc.
+      always @(posedge clk) CPU_jalr_tgt_pc_a3[31:0] <= CPU_jalr_tgt_pc_a2[31:0];
+
+      // For $pc.
+      always @(posedge clk) CPU_pc_a1[31:0] <= CPU_pc_a0[31:0];
+      always @(posedge clk) CPU_pc_a2[31:0] <= CPU_pc_a1[31:0];
+      always @(posedge clk) CPU_pc_a3[31:0] <= CPU_pc_a2[31:0];
+
+      // For $rd.
+      always @(posedge clkP_CPU_rd_valid_a2) CPU_rd_a2[4:0] <= CPU_rd_a1[4:0];
+      always @(posedge clkP_CPU_rd_valid_a3) CPU_rd_a3[4:0] <= CPU_rd_a2[4:0];
+      always @(posedge clkP_CPU_rd_valid_a4) CPU_rd_a4[4:0] <= CPU_rd_a3[4:0];
+      always @(posedge clkP_CPU_rd_valid_a5) CPU_rd_a5[4:0] <= CPU_rd_a4[4:0];
+
+      // For $rd_valid.
+      always @(posedge clk) CPU_rd_valid_a2 <= CPU_rd_valid_a1;
+      always @(posedge clk) CPU_rd_valid_a3 <= CPU_rd_valid_a2;
+      always @(posedge clk) CPU_rd_valid_a4 <= CPU_rd_valid_a3;
+
+      // For $reset.
+      always @(posedge clk) CPU_reset_a1 <= CPU_reset_a0;
+      always @(posedge clk) CPU_reset_a2 <= CPU_reset_a1;
+      always @(posedge clk) CPU_reset_a3 <= CPU_reset_a2;
+      always @(posedge clk) CPU_reset_a4 <= CPU_reset_a3;
+
+      // For $result.
+      always @(posedge clk) CPU_result_a4[5:2] <= CPU_result_a3[5:2];
+
+      // For $rs1.
+      always @(posedge clkP_CPU_rs1_valid_a2) CPU_rs1_a2[4:0] <= CPU_rs1_a1[4:0];
+
+      // For $rs1_valid.
+      always @(posedge clk) CPU_rs1_valid_a2 <= CPU_rs1_valid_a1;
+
+      // For $rs2.
+      always @(posedge clkP_CPU_rs2_valid_a2) CPU_rs2_a2[4:0] <= CPU_rs2_a1[4:0];
+
+      // For $rs2_valid.
+      always @(posedge clk) CPU_rs2_valid_a2 <= CPU_rs2_valid_a1;
+
+      // For $src1_value.
+      always @(posedge clk) CPU_src1_value_a3[31:0] <= CPU_src1_value_a2[31:0];
+
+      // For $src2_value.
+      always @(posedge clk) CPU_src2_value_a3[31:0] <= CPU_src2_value_a2[31:0];
+      always @(posedge clk) CPU_src2_value_a4[31:0] <= CPU_src2_value_a3[31:0];
+
+      // For $valid.
+      always @(posedge clk) CPU_valid_a4 <= CPU_valid_a3;
+
+      // For $valid_jump.
+      always @(posedge clk) CPU_valid_jump_a4 <= CPU_valid_jump_a3;
+      always @(posedge clk) CPU_valid_jump_a5 <= CPU_valid_jump_a4;
+
+      // For $valid_load.
+      always @(posedge clk) CPU_valid_load_a4 <= CPU_valid_load_a3;
+      always @(posedge clk) CPU_valid_load_a5 <= CPU_valid_load_a4;
+
+      // For $valid_taken_br.
+      always @(posedge clk) CPU_valid_taken_br_a4 <= CPU_valid_taken_br_a3;
+      always @(posedge clk) CPU_valid_taken_br_a5 <= CPU_valid_taken_br_a4;
+
+
+      //
+      // Scope: /dmem[15:0]
+      //
+      for (dmem = 0; dmem <= 15; dmem=dmem+1) begin : L1gen_CPU_Dmem
+         // For $value.
+         always @(posedge clk) CPU_Dmem_value_a5[dmem][31:0] <= CPU_Dmem_value_a4[dmem][31:0];
+
+      end
+
+      //
+      // Scope: /xreg[31:0]
+      //
+      for (xreg = 0; xreg <= 31; xreg=xreg+1) begin : L1gen_CPU_Xreg
+         // For $value.
+         always @(posedge clk) CPU_Xreg_value_a4[xreg][31:0] <= CPU_Xreg_value_a3[xreg][31:0];
+         always @(posedge clk) CPU_Xreg_value_a5[xreg][31:0] <= CPU_Xreg_value_a4[xreg][31:0];
+
+      end
+
+
+
+endgenerate
+
+
+
+//
+// Gated clocks.
+//
+
+generate
+
+
+
+   //
+   // Scope: |cpu
+   //
+
+      clk_gate gen_clkP_CPU_dmem_rd_en_a5(clkP_CPU_dmem_rd_en_a5, clk, 1'b1, CPU_dmem_rd_en_a4, 1'b0);
+      clk_gate gen_clkP_CPU_rd_valid_a2(clkP_CPU_rd_valid_a2, clk, 1'b1, CPU_rd_valid_a1, 1'b0);
+      clk_gate gen_clkP_CPU_rd_valid_a3(clkP_CPU_rd_valid_a3, clk, 1'b1, CPU_rd_valid_a2, 1'b0);
+      clk_gate gen_clkP_CPU_rd_valid_a4(clkP_CPU_rd_valid_a4, clk, 1'b1, CPU_rd_valid_a3, 1'b0);
+      clk_gate gen_clkP_CPU_rd_valid_a5(clkP_CPU_rd_valid_a5, clk, 1'b1, CPU_rd_valid_a4, 1'b0);
+      clk_gate gen_clkP_CPU_rs1_valid_a2(clkP_CPU_rs1_valid_a2, clk, 1'b1, CPU_rs1_valid_a1, 1'b0);
+      clk_gate gen_clkP_CPU_rs2_valid_a2(clkP_CPU_rs2_valid_a2, clk, 1'b1, CPU_rs2_valid_a1, 1'b0);
+
+
+
+endgenerate
diff --git a/verilog/include/sandpiper.vh b/verilog/include/sandpiper.vh
new file mode 100644
index 0000000..26d3f19
--- /dev/null
+++ b/verilog/include/sandpiper.vh
@@ -0,0 +1,71 @@
+/*
+Copyright (c) 2015, Steven F. Hoover
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * The name of Steven F. Hoover
+      may not be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+// Project-independent SandPiper header file.
+
+`ifndef SANDPIPER_VH
+`define SANDPIPER_VH
+
+
+// Note, these have no SP prefix, so collisions are possible.
+     
+
+`ifdef WHEN
+   // Make sure user definition does not collide.
+   !!!ERROR: WHEN macro already defined
+`else
+   `ifdef SP_PHYS
+      // Phys compilation disabled X-injection.
+      `define WHEN(valid_sig)
+   `else
+      // Inject X.
+      `define WHEN(valid_sig) !valid_sig ? 'x :
+   `endif
+`endif
+
+
+// SandPiper does not generate set/reset flops.  Reset is implemented as combinational
+// logic, and it is up to synthesis to infer set/reset flops when possible.
+//`ifdef RESET
+//   // Make sure user definition does not collide.
+//   !!!ERROR: RESET macro already defined
+//`else
+//   `define RESET(i, reset) ((reset) ? '0 : i)
+//`endif
+//
+//`ifdef SET
+//   // Make sure user definition does not collide.
+//   !!!ERROR: SET macro already defined
+//`else
+//   `define SET(i, set) ((set) ? '1 : i)
+//`endif
+
+// Since SandPiper required use of all signals, this is useful to create a
+// bogus use and keep SandPiper happy when a signal, by intent, has no uses.
+`define BOGUS_USE(ignore)
+
+`endif  // SANDPIPER_VH
diff --git a/verilog/include/sandpiper_gen.vh b/verilog/include/sandpiper_gen.vh
new file mode 100644
index 0000000..d063661
--- /dev/null
+++ b/verilog/include/sandpiper_gen.vh
@@ -0,0 +1,4 @@
+// This just verifies that sandpiper.vh has been included.
+`ifndef SANDPIPER_VH
+  !!!ERROR: SandPiper project's sp_<proj>.vh file must include sandpiper.vh.
+`endif
diff --git a/verilog/include/sp_default.vh b/verilog/include/sp_default.vh
new file mode 100644
index 0000000..a733969
--- /dev/null
+++ b/verilog/include/sp_default.vh
@@ -0,0 +1,8 @@
+`ifndef SP_DEFAULT
+`define SP_DEFAULT
+
+// File included by SandPiper-generated code for the default project configuration.
+`include "sandpiper.vh"
+
+
+`endif  // SP_DEFAULT
diff --git a/verilog/include/sp_verilog.vh b/verilog/include/sp_verilog.vh
new file mode 100644
index 0000000..0c28412
--- /dev/null
+++ b/verilog/include/sp_verilog.vh
@@ -0,0 +1,65 @@
+`ifndef SP_DEFAULT
+`define SP_DEFAULT
+/*
+Copyright (c) 2015, Steven F. Hoover
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * The name of Steven F. Hoover
+      may not be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+
+// File included by SandPiper-generated code for the default project configuration.
+`include "sandpiper.vh"
+
+
+// Latch macros.  Inject 'x in simulation for clk === 'x.
+
+// A-phase latch.
+`ifdef SP_PHYS
+`define TLV_LATCH(in, out, clk) \
+always @ (in, clk) begin        \
+  if (clk === 1'b1)             \
+    out <= in;                  \
+  else if (clk === 1'bx)        \
+    out <= 'x;                  \
+end
+`else
+`define TLV_LATCH(in, out, clk) always @ (in, clk) if (clk == 1'b1) out <= in;
+`endif  // SP_PHYS
+
+// B-phase latch.
+`ifdef SP_PHYS
+`define TLV_BLATCH(out, in, clk) \
+always @ (in, clk) begin         \
+  if (!clk === 1'b1)             \
+    out <= in;                   \
+  else if (!clk === 1'bx)        \
+    out <= 'x;                   \
+end
+`else
+`define TLV_BLATCH(out, in, clk) always @ (in, clk) if (!clk == 1'b1) out <= in;
+`endif  // SP_PHYS
+
+
+	   
+`endif  // SP_DEFAULT
diff --git a/verilog/rtl/clk_gate.v b/verilog/rtl/clk_gate.v
new file mode 100644
index 0000000..6df5b7d
--- /dev/null
+++ b/verilog/rtl/clk_gate.v
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2015, Steven F. Hoover
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * The name of Steven F. Hoover
+      may not be used to endorse or promote products derived from this software
+      without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+`include "sp_verilog.vh"
+
+
+// Clock gate module used by SandPiper default project.
+
+module clk_gate (output gated_clk, input free_clk, func_en, pwr_en, gating_override);
+
+   assign gated_clk = free_clk;
+endmodule
diff --git a/verilog/rtl/rvmyth.v b/verilog/rtl/rvmyth.v
new file mode 100644
index 0000000..9e96890
--- /dev/null
+++ b/verilog/rtl/rvmyth.v
@@ -0,0 +1,269 @@
+//_\TLV_version 1d: tl-x.org, generated by SandPiper(TM) 1.11-2021/01/28-beta
+`include "sp_verilog.vh" //_\SV
+   // Included URL: "https://raw.githubusercontent.com/shivanishah269/risc-v-core/master/FPGA_Implementation/riscv_shell_lib.tlv"// Included URL: "https://raw.githubusercontent.com/stevehoover/warp-v_includes/2d6d36baa4d2bc62321f982f78c8fe1456641a43/risc-v_defs.tlv"
+
+   module rvmyth (
+      output reg [9:0] OUT,
+      input CLK,
+      input reset,
+      
+      output [7:0] imem_addr,
+      input [31:0] imem_data
+   );
+
+   wire clk = CLK;
+   
+`include "rvmyth_gen.v"
+generate //_\TLV
+   //_|cpu
+      //_@0
+         assign CPU_reset_a0 = reset;
+      
+      //Fetch
+         // Next PC
+         assign CPU_pc_a0[31:0] = (CPU_reset_a1) ? 32'd0 : 
+                     (CPU_valid_taken_br_a3) ? CPU_br_tgt_pc_a3 : 
+                     (CPU_valid_load_a3) ? CPU_inc_pc_a3 : 
+                     (CPU_valid_jump_a3 && CPU_is_jal_a3) ? CPU_br_tgt_pc_a3 :
+                     (CPU_valid_jump_a3 && CPU_is_jalr_a3) ? CPU_jalr_tgt_pc_a3 : CPU_inc_pc_a1;
+         
+      //_@1
+         assign imem_addr = CPU_pc_a0[9:2];
+         assign CPU_instr_a1[31:0] = imem_data;
+         assign CPU_inc_pc_a1[31:0] = CPU_pc_a1 + 32'd4;
+                   
+      // Decode   
+         assign CPU_is_i_instr_a1 = CPU_instr_a1[6:2] == 5'b00000 ||
+                     CPU_instr_a1[6:2] == 5'b00001 ||
+                     CPU_instr_a1[6:2] == 5'b00100 ||
+                     CPU_instr_a1[6:2] == 5'b00110 ||
+                     CPU_instr_a1[6:2] == 5'b11001;
+         assign CPU_is_r_instr_a1 = CPU_instr_a1[6:2] == 5'b01011 ||
+                     CPU_instr_a1[6:2] == 5'b10100 ||
+                     CPU_instr_a1[6:2] == 5'b01100 ||
+                     CPU_instr_a1[6:2] == 5'b01101;                       
+         assign CPU_is_b_instr_a1 = CPU_instr_a1[6:2] == 5'b11000;
+         assign CPU_is_u_instr_a1 = CPU_instr_a1[6:2] == 5'b00101 ||
+                     CPU_instr_a1[6:2] == 5'b01101;
+         assign CPU_is_s_instr_a1 = CPU_instr_a1[6:2] == 5'b01000 ||
+                     CPU_instr_a1[6:2] == 5'b01001;
+         assign CPU_is_j_instr_a1 = CPU_instr_a1[6:2] == 5'b11011;
+         
+         assign CPU_imm_a1[31:0] = CPU_is_i_instr_a1 ? { {21{CPU_instr_a1[31]}} , CPU_instr_a1[30:20] } :
+                     CPU_is_s_instr_a1 ? { {21{CPU_instr_a1[31]}} , CPU_instr_a1[30:25] , CPU_instr_a1[11:8] , CPU_instr_a1[7] } :
+                     CPU_is_b_instr_a1 ? { {20{CPU_instr_a1[31]}} , CPU_instr_a1[7] , CPU_instr_a1[30:25] , CPU_instr_a1[11:8] , 1'b0} :
+                     CPU_is_u_instr_a1 ? { CPU_instr_a1[31:12] , 12'b0} : 
+                     CPU_is_j_instr_a1 ? { {12{CPU_instr_a1[31]}} , CPU_instr_a1[19:12] , CPU_instr_a1[20] , CPU_instr_a1[30:21] , 1'b0} : 32'b0;
+         
+         assign CPU_rs2_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1;
+         assign CPU_rs1_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1 || CPU_is_i_instr_a1;
+         assign CPU_rd_valid_a1 = CPU_is_r_instr_a1 || CPU_is_i_instr_a1 || CPU_is_u_instr_a1 || CPU_is_j_instr_a1;
+         assign CPU_funct3_valid_a1 = CPU_is_r_instr_a1 || CPU_is_s_instr_a1 || CPU_is_b_instr_a1 || CPU_is_i_instr_a1;
+         assign CPU_funct7_valid_a1 = CPU_is_r_instr_a1;
+         
+         //_?$rs2_valid
+            assign CPU_rs2_a1[4:0] = CPU_instr_a1[24:20];
+         //_?$rs1_valid
+            assign CPU_rs1_a1[4:0] = CPU_instr_a1[19:15];
+         //_?$rd_valid
+            assign CPU_rd_a1[4:0] = CPU_instr_a1[11:7];
+         //_?$funct3_valid
+            assign CPU_funct3_a1[2:0] = CPU_instr_a1[14:12];
+         //_?$funct7_valid
+            assign CPU_funct7_a1[6:0] = CPU_instr_a1[31:25];
+               
+         assign CPU_opcode_a1[6:0] = CPU_instr_a1[6:0];
+         
+         assign CPU_dec_bits_a1[10:0] = {CPU_funct7_a1[5],CPU_funct3_a1,CPU_opcode_a1};
+         
+         // Branch Instruction
+         assign CPU_is_beq_a1 = CPU_dec_bits_a1[9:0] == 10'b000_1100011;
+         assign CPU_is_bne_a1 = CPU_dec_bits_a1[9:0] == 10'b001_1100011;
+         assign CPU_is_blt_a1 = CPU_dec_bits_a1[9:0] == 10'b100_1100011;
+         assign CPU_is_bge_a1 = CPU_dec_bits_a1[9:0] == 10'b101_1100011;
+         assign CPU_is_bltu_a1 = CPU_dec_bits_a1[9:0] == 10'b110_1100011;
+         assign CPU_is_bgeu_a1 = CPU_dec_bits_a1[9:0] == 10'b111_1100011;
+         
+         // Arithmetic Instruction
+         assign CPU_is_add_a1 = CPU_dec_bits_a1 == 11'b0_000_0110011;
+         assign CPU_is_addi_a1 = CPU_dec_bits_a1[9:0] == 10'b000_0010011;
+         assign CPU_is_or_a1 = CPU_dec_bits_a1 == 11'b0_110_0110011;
+         assign CPU_is_ori_a1 = CPU_dec_bits_a1[9:0] == 10'b110_0010011;
+         assign CPU_is_xor_a1 = CPU_dec_bits_a1 == 11'b0_100_0110011;
+         assign CPU_is_xori_a1 = CPU_dec_bits_a1[9:0] == 10'b100_0010011;
+         assign CPU_is_and_a1 = CPU_dec_bits_a1 == 11'b0_111_0110011;
+         assign CPU_is_andi_a1 = CPU_dec_bits_a1[9:0] == 10'b111_0010011;
+         assign CPU_is_sub_a1 = CPU_dec_bits_a1 == 11'b1_000_0110011;
+         assign CPU_is_slti_a1 = CPU_dec_bits_a1[9:0] == 10'b010_0010011;
+         assign CPU_is_sltiu_a1 = CPU_dec_bits_a1[9:0] == 10'b011_0010011;
+         assign CPU_is_slli_a1 = CPU_dec_bits_a1 == 11'b0_001_0010011;
+         assign CPU_is_srli_a1 = CPU_dec_bits_a1 == 11'b0_101_0010011;
+         assign CPU_is_srai_a1 = CPU_dec_bits_a1 == 11'b1_101_0010011;
+         assign CPU_is_sll_a1 = CPU_dec_bits_a1 == 11'b0_001_0110011;
+         assign CPU_is_slt_a1 = CPU_dec_bits_a1 == 11'b0_010_0110011;
+         assign CPU_is_sltu_a1 = CPU_dec_bits_a1 == 11'b0_011_0110011;
+         assign CPU_is_srl_a1 = CPU_dec_bits_a1 == 11'b0_101_0110011;
+         assign CPU_is_sra_a1 = CPU_dec_bits_a1 == 11'b1_101_0110011;
+         
+         // Load Instruction
+         assign CPU_is_load_a1 = CPU_dec_bits_a1[6:0] == 7'b0000011;
+         
+         // Store Instruction
+         assign CPU_is_sb_a1 = CPU_dec_bits_a1[9:0] == 10'b000_0100011;
+         assign CPU_is_sh_a1 = CPU_dec_bits_a1[9:0] == 10'b001_0100011;
+         assign CPU_is_sw_a1 = CPU_dec_bits_a1[9:0] == 10'b010_0100011;
+         
+         // Jump Instruction
+         assign CPU_is_lui_a1 = CPU_dec_bits_a1[6:0] == 7'b0110111;
+         assign CPU_is_auipc_a1 = CPU_dec_bits_a1[6:0] == 7'b0010111;
+         assign CPU_is_jal_a1 = CPU_dec_bits_a1[6:0] == 7'b1101111;
+         assign CPU_is_jalr_a1 = CPU_dec_bits_a1[9:0] == 10'b000_1100111;
+         
+         assign CPU_is_jump_a1 = CPU_is_jal_a1 || CPU_is_jalr_a1;
+         
+      //_@2   
+      // Register File Read
+         assign CPU_rf_rd_en1_a2 = CPU_rs1_valid_a2;
+         //_?$rf_rd_en1
+            assign CPU_rf_rd_index1_a2[4:0] = CPU_rs1_a2[4:0];
+         
+         assign CPU_rf_rd_en2_a2 = CPU_rs2_valid_a2;
+         //_?$rf_rd_en2
+            assign CPU_rf_rd_index2_a2[4:0] = CPU_rs2_a2[4:0];
+               
+      // Branch Target PC       
+         assign CPU_br_tgt_pc_a2[31:0] = CPU_pc_a2 + CPU_imm_a2;
+      
+      // Jump Target PC
+         assign CPU_jalr_tgt_pc_a2[31:0] = CPU_src1_value_a2 + CPU_imm_a2;
+         
+      // Input signals to ALU
+         assign CPU_src1_value_a2[31:0] = ((CPU_rd_a3 == CPU_rs1_a2) && CPU_rf_wr_en_a3) ? CPU_result_a3 : CPU_rf_rd_data1_a2[31:0];
+         assign CPU_src2_value_a2[31:0] = ((CPU_rd_a3 == CPU_rs2_a2) && CPU_rf_wr_en_a3) ? CPU_result_a3 : CPU_rf_rd_data2_a2[31:0];
+         
+      //_@3   
+         
+      // ALU
+         assign CPU_sltu_result_a3 = CPU_src1_value_a3 < CPU_src2_value_a3 ;
+         assign CPU_sltiu_result_a3 = CPU_src1_value_a3 < CPU_imm_a3 ;
+         
+         assign CPU_result_a3[31:0] = CPU_is_addi_a3 ? CPU_src1_value_a3 + CPU_imm_a3 :
+                           CPU_is_add_a3 ? CPU_src1_value_a3 + CPU_src2_value_a3 : 
+                           CPU_is_or_a3 ? CPU_src1_value_a3 | CPU_src2_value_a3 : 
+                           CPU_is_ori_a3 ? CPU_src1_value_a3 | CPU_imm_a3 :
+                           CPU_is_xor_a3 ? CPU_src1_value_a3 ^ CPU_src2_value_a3 :
+                           CPU_is_xori_a3 ? CPU_src1_value_a3 ^ CPU_imm_a3 :
+                           CPU_is_and_a3 ? CPU_src1_value_a3 & CPU_src2_value_a3 :
+                           CPU_is_andi_a3 ? CPU_src1_value_a3 & CPU_imm_a3 :
+                           CPU_is_sub_a3 ? CPU_src1_value_a3 - CPU_src2_value_a3 :
+                           CPU_is_slti_a3 ? ((CPU_src1_value_a3[31] == CPU_imm_a3[31]) ? CPU_sltiu_result_a3 : {31'b0,CPU_src1_value_a3[31]}) :
+                           CPU_is_sltiu_a3 ? CPU_sltiu_result_a3 :
+                           CPU_is_slli_a3 ? CPU_src1_value_a3 << CPU_imm_a3[5:0] :
+                           CPU_is_srli_a3 ? CPU_src1_value_a3 >> CPU_imm_a3[5:0] :
+                           CPU_is_srai_a3 ? ({{32{CPU_src1_value_a3[31]}}, CPU_src1_value_a3} >> CPU_imm_a3[4:0]) :
+                           CPU_is_sll_a3 ? CPU_src1_value_a3 << CPU_src2_value_a3[4:0] :
+                           CPU_is_slt_a3 ? ((CPU_src1_value_a3[31] == CPU_src2_value_a3[31]) ? CPU_sltu_result_a3 : {31'b0,CPU_src1_value_a3[31]}) :
+                           CPU_is_sltu_a3 ? CPU_sltu_result_a3 :
+                           CPU_is_srl_a3 ? CPU_src1_value_a3 >> CPU_src2_value_a3[5:0] :
+                           CPU_is_sra_a3 ? ({{32{CPU_src1_value_a3[31]}}, CPU_src1_value_a3} >> CPU_src2_value_a3[4:0]) :
+                           CPU_is_lui_a3 ? ({CPU_imm_a3[31:12], 12'b0}) :
+                           CPU_is_auipc_a3 ? CPU_pc_a3 + CPU_imm_a3 :
+                           CPU_is_jal_a3 ? CPU_pc_a3 + 4 :
+                           CPU_is_jalr_a3 ? CPU_pc_a3 + 4 : 
+                           (CPU_is_load_a3 || CPU_is_s_instr_a3) ? CPU_src1_value_a3 + CPU_imm_a3 : 32'bx;
+                           
+      // Register File Write
+         assign CPU_rf_wr_en_a3 = (CPU_rd_valid_a3 && CPU_valid_a3 && CPU_rd_a3 != 5'b0) || CPU_valid_load_a5;
+         //_?$rf_wr_en
+            assign CPU_rf_wr_index_a3[4:0] = !CPU_valid_a3 ? CPU_rd_a5[4:0] : CPU_rd_a3[4:0];
+      
+         assign CPU_rf_wr_data_a3[31:0] = !CPU_valid_a3 ? CPU_ld_data_a5[31:0] : CPU_result_a3[31:0];
+      
+      // Branch
+         assign CPU_taken_br_a3 = CPU_is_beq_a3 ? (CPU_src1_value_a3 == CPU_src2_value_a3) :
+                     CPU_is_bne_a3 ? (CPU_src1_value_a3 != CPU_src2_value_a3) :
+                     CPU_is_blt_a3 ? ((CPU_src1_value_a3 < CPU_src2_value_a3) ^ (CPU_src1_value_a3[31] != CPU_src2_value_a3[31])) :
+                     CPU_is_bge_a3 ? ((CPU_src1_value_a3 >= CPU_src2_value_a3) ^ (CPU_src1_value_a3[31] != CPU_src2_value_a3[31])) :
+                     CPU_is_bltu_a3 ? (CPU_src1_value_a3 < CPU_src2_value_a3) :
+                     CPU_is_bgeu_a3 ? (CPU_src1_value_a3 >= CPU_src2_value_a3) : 1'b0;
+                     
+         assign CPU_valid_taken_br_a3 = CPU_valid_a3 && CPU_taken_br_a3;
+         
+      // Load
+         assign CPU_valid_load_a3 = CPU_valid_a3 && CPU_is_load_a3;
+         assign CPU_valid_a3 = !(CPU_valid_taken_br_a4 || CPU_valid_taken_br_a5 || CPU_valid_load_a4 || CPU_valid_load_a5 || CPU_valid_jump_a4 || CPU_valid_jump_a5);
+      
+      // Jump
+         assign CPU_valid_jump_a3 = CPU_valid_a3 && CPU_is_jump_a3;
+                  
+      //_@4
+         assign CPU_dmem_rd_en_a4 = CPU_valid_load_a4;
+         assign CPU_dmem_wr_en_a4 = CPU_valid_a4 && CPU_is_s_instr_a4;
+         assign CPU_dmem_addr_a4[3:0] = CPU_result_a4[5:2];
+         assign CPU_dmem_wr_data_a4[31:0] = CPU_src2_value_a4[31:0];
+         
+      //_@5   
+         assign CPU_ld_data_a5[31:0] = CPU_dmem_rd_data_a5[31:0];
+         
+      // Note: Because of the magic we are using for visualisation, if visualisation is enabled below,
+      //       be sure to avoid having unassigned signals (which you might be using for random inputs)
+      //       other than those specifically expected in the labs. You'll get strange errors for these.
+
+         `BOGUS_USE(CPU_is_beq_a5 CPU_is_bne_a5 CPU_is_blt_a5 CPU_is_bge_a5 CPU_is_bltu_a5 CPU_is_bgeu_a5)
+         `BOGUS_USE(CPU_is_sb_a5 CPU_is_sh_a5 CPU_is_sw_a5)
+   // Assert these to end simulation (before Makerchip cycle limit).
+   /*SV_plus*/
+      always @ (posedge CLK) begin
+         OUT = CPU_Xreg_value_a5[17];                
+      end
+   
+   // Macro instantiations for:
+   //  o instruction memory
+   //  o register file
+   //  o data memory
+   //  o CPU visualization
+   //_|cpu
+      // m4+imem(@1)    // Args: (read stage)
+      //_\source /raw.githubusercontent.com/shivanishah269/riscvcore/master/FPGAImplementation/riscvshelllib.tlv 31   // Instantiated from rvmyth.tlv, 226 as: m4+rf(@2, @3)
+         // Reg File
+         //_@3
+            for (xreg = 0; xreg <= 31; xreg=xreg+1) begin : L1_CPU_Xreg //_/xreg
+
+               // For $wr.
+               wire L1_wr_a3;
+
+               assign L1_wr_a3 = CPU_rf_wr_en_a3 && (CPU_rf_wr_index_a3 != 5'b0) && (CPU_rf_wr_index_a3 == xreg);
+               assign CPU_Xreg_value_a3[xreg][31:0] = CPU_reset_a3 ?   xreg           :
+                              L1_wr_a3        ?   CPU_rf_wr_data_a3 :
+                                             CPU_Xreg_value_a4[xreg][31:0];
+            end
+         //_@2
+            //_?$rf_rd_en1
+               assign CPU_rf_rd_data1_a2[31:0] = CPU_Xreg_value_a4[CPU_rf_rd_index1_a2];
+            //_?$rf_rd_en2
+               assign CPU_rf_rd_data2_a2[31:0] = CPU_Xreg_value_a4[CPU_rf_rd_index2_a2];
+            `BOGUS_USE(CPU_rf_rd_data1_a2 CPU_rf_rd_data2_a2) 
+      //_\end_source  // Args: (read stage, write stage) - if equal, no register bypass is required
+      //_\source /raw.githubusercontent.com/shivanishah269/riscvcore/master/FPGAImplementation/riscvshelllib.tlv 48   // Instantiated from rvmyth.tlv, 227 as: m4+dmem(@4)
+         // Data Memory
+         //_@4
+            for (dmem = 0; dmem <= 15; dmem=dmem+1) begin : L1_CPU_Dmem //_/dmem
+
+               // For $wr.
+               wire L1_wr_a4;
+
+               assign L1_wr_a4 = CPU_dmem_wr_en_a4 && (CPU_dmem_addr_a4 == dmem);
+               assign CPU_Dmem_value_a4[dmem][31:0] = CPU_reset_a4 ?   dmem :
+                              L1_wr_a4        ?   CPU_dmem_wr_data_a4 :
+                                             CPU_Dmem_value_a5[dmem][31:0];
+                                        
+            end
+            //_?$dmem_rd_en
+               assign CPU_dmem_rd_data_a4[31:0] = CPU_Dmem_value_a5[CPU_dmem_addr_a4];
+            //`BOGUS_USE($dmem_rd_data)
+      //_\end_source    // Args: (read/write stage)
+endgenerate
+
+//_\SV
+   
+   endmodule
diff --git a/verilog/rtl/sram_32_256_sky130A.v b/verilog/rtl/sram_32_256_sky130A.v
new file mode 100644
index 0000000..d45d17e
--- /dev/null
+++ b/verilog/rtl/sram_32_256_sky130A.v
@@ -0,0 +1,72 @@
+// OpenRAM SRAM model
+// Words: 256
+// Word size: 32
+
+module sram_32_256_sky130A(
+`ifdef USE_POWER_PINS
+    vccd1,
+    vssd1,
+`endif
+// Port 0: RW
+    clk0,csb0,web0,addr0,din0,dout0
+  );
+
+  parameter DATA_WIDTH = 32 ;
+  parameter ADDR_WIDTH = 8 ;
+  parameter RAM_DEPTH = 1 << ADDR_WIDTH;
+  // FIXME: This delay is arbitrary.
+  parameter DELAY = 3 ;
+  parameter VERBOSE = 1 ; //Set to 0 to only display warnings
+  parameter T_HOLD = 1 ; //Delay to hold dout value after posedge. Value is arbitrary
+
+`ifdef USE_POWER_PINS
+    inout vccd1;
+    inout vssd1;
+`endif
+  input  clk0; // clock
+  input   csb0; // active low chip select
+  input  web0; // active low write control
+  input [ADDR_WIDTH-1:0]  addr0;
+  input [DATA_WIDTH-1:0]  din0;
+  output [DATA_WIDTH-1:0] dout0;
+
+  reg  csb0_reg;
+  reg  web0_reg;
+  reg [ADDR_WIDTH-1:0]  addr0_reg;
+  reg [DATA_WIDTH-1:0]  din0_reg;
+  reg [DATA_WIDTH-1:0]  dout0;
+
+  // All inputs are registers
+  always @(posedge clk0)
+  begin
+    csb0_reg = csb0;
+    web0_reg = web0;
+    addr0_reg = addr0;
+    din0_reg = din0;
+    #(T_HOLD) dout0 = 32'bx;
+    if ( !csb0_reg && web0_reg && VERBOSE ) 
+      $display($time," Reading %m addr0=%b dout0=%b",addr0_reg,mem[addr0_reg]);
+    if ( !csb0_reg && !web0_reg && VERBOSE )
+      $display($time," Writing %m addr0=%b din0=%b",addr0_reg,din0_reg);
+  end
+
+reg [DATA_WIDTH-1:0]    mem [0:RAM_DEPTH-1];
+
+  // Memory Write Block Port 0
+  // Write Operation : When web0 = 0, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_WRITE0
+    if ( !csb0_reg && !web0_reg ) begin
+        mem[addr0_reg][31:0] = din0_reg[31:0];
+    end
+  end
+
+  // Memory Read Block Port 0
+  // Read Operation : When web0 = 1, csb0 = 0
+  always @ (negedge clk0)
+  begin : MEM_READ0
+    if (!csb0_reg && web0_reg)
+       dout0 <= #(DELAY) mem[addr0_reg];
+  end
+
+endmodule
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 26081e9..a1dd5b8 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -14,152 +14,37 @@
 // SPDX-License-Identifier: Apache-2.0
 
 `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 user_proj_example #(
-    parameter BITS = 32
-)(
+module user_proj_example (
 `ifdef USE_POWER_PINS
     inout vccd1,	// User area 1 1.8V supply
     inout vssd1,	// User area 1 digital ground
 `endif
+    output [9:0] OUT,
+    input CLK,
+    input reset,
 
-    // 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_oenb,
-
-    // 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,
-
-    // IRQ
-    output [2:0] irq
+    output mem_wr,
+    output [7:0] mem_addr,
+    input init_en,
+    input [7:0] init_addr,
+    input [31:0] imem_data
 );
-    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 [7:0]  imem_addr;
 
-    wire [31:0] rdata; 
-    wire [31:0] wdata;
-    wire [BITS-1:0] count;
+    assign mem_wr   = init_en ? 1'b0 : 1'b1;
+    assign mem_addr = init_en ? init_addr : imem_addr;
 
-    wire valid;
-    wire [3:0] wstrb;
-    wire [31:0] la_write;
+    rvmyth core (
+        .OUT(OUT),
+        .CLK(CLK),
+        .reset(reset),
 
-    // 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}};
-
-    // 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)
+        .imem_addr(imem_addr),
+        .imem_data(imem_data)
     );
 
 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
+`default_nettype wire
\ No newline at end of file
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 5ee1cee..c08f62d 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -22,10 +22,6 @@
  * This wrapper enumerates all of the pins available to the
  * user for the user project.
  *
- * An example user project is provided in this wrapper.  The
- * example should be removed and replaced with the actual
- * user project.
- *
  *-------------------------------------------------------------
  */
 
@@ -81,43 +77,40 @@
 /*--------------------------------------*/
 /* User project is instantiated  here   */
 /*--------------------------------------*/
+    wire        mem_wr;
+    wire [7:0]  mem_addr;
+    
+    wire [31:0] imem_data;
 
-user_proj_example mprj (
+    user_proj_example mprj (
 `ifdef USE_POWER_PINS
-	.vccd1(vccd1),	// User area 1 1.8V power
-	.vssd1(vssd1),	// User area 1 digital ground
+        .vccd1(vccd1),	// User area 1 1.8V supply
+        .vssd1(vssd1),	// User area 1 digital ground
 `endif
+        .OUT(wbs_dat_o[9:0]),
+        .CLK(wb_clk_i),
+        .reset(wb_rst_i),
 
-    .wb_clk_i(wb_clk_i),
-    .wb_rst_i(wb_rst_i),
+        .mem_wr(mem_wr),
+        .mem_addr(mem_addr),
+        .init_en(wbs_sel_i[0]),
+        .init_addr(wbs_adr_i[7:0]),
+        .imem_data(imem_data)
+    );
 
-    // 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_oenb (la_oenb),
-
-    // IO Pads
-
-    .io_in (io_in),
-    .io_out(io_out),
-    .io_oeb(io_oeb),
-
-    // IRQ
-    .irq(user_irq)
-);
+    sram_32_256_sky130A mem (
+`ifdef USE_POWER_PINS
+        .vccd1(vccd1),	// User area 1 1.8V supply
+        .vssd1(vssd1),	// User area 1 digital ground
+`endif
+        .clk0(wb_clk_i),
+        .csb0(1'b0),
+        .web0(mem_wr),
+        .addr0(mem_addr),
+        .din0(wbs_dat_i),
+        .dout0(imem_data)
+    );
 
 endmodule	// user_project_wrapper
 
-`default_nettype wire
+`default_nettype wire
\ No newline at end of file