diff --git a/README.md b/README.md
index b6dd62f..4b98435 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
 # Pre-Trained Neural Network for MNIST
 
-This project implements a pre-trained neural network for hand-written digits from MNIST dataset.
\ No newline at end of file
+This project implements a pre-trained fully connected neural network (FCNN) for hand-written digits from MNIST dataset. It takes images from MNIST dataset (28x28) and output single digit prediction. All parameters (weights and bias) are pre-trained and hard-coded.
+
+This repository contains a Verilog implementation of the FCNN, targeting the OpenLane flow for the Skywater 130nm process and is an entry for the Google/Efabless MPW-3 shuttle.
\ No newline at end of file
diff --git a/verilog/rtl/LICENSE b/verilog/rtl/LICENSE
new file mode 100644
index 0000000..7190840
--- /dev/null
+++ b/verilog/rtl/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Vipin Kizheppatt
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 351d409..65ca516 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -244,200 +244,6 @@
         end
     end
 
-    // wire [`numNeuronLayer2-1:0] o2_valid;
-    // wire [`numNeuronLayer2*`dataWidth-1:0] x2_out;
-    // reg [`numNeuronLayer2*`dataWidth-1:0] holdData_2;
-    // reg [`dataWidth-1:0] out_data_2;
-    // reg data_out_valid_2;
-
-    // Layer_2 #(.NN(`numNeuronLayer2),.numWeight(`numWeightLayer2),.dataWidth(`dataWidth),.layerNum(2),.sigmoidSize(`sigmoidSize),.weightIntWidth(`weightIntWidth),.actType(`Layer2ActType)) l2(
-    //     .clk(clk),
-    //     .rst(reset),
-    // //	.weightValid(weightValid),
-    // //	.biasValid(biasValid),
-    // //	.weightValue(weightValue),
-    // //	.biasValue(biasValue),
-    // //	.config_layer_num(config_layer_num),
-    // //	.config_neuron_num(config_neuron_num),
-    //     .x_valid(data_out_valid_1),
-    //     .x_in(out_data_1),
-    //     .o_valid(o2_valid),
-    //     .x_out(x2_out)
-    // );
-
-    // //State machine for data pipelining
-
-    // reg       state_2;
-    // integer   count_2;
-    // always @(posedge clk)
-    // begin
-    //     if(reset)
-    //     begin
-    //         state_2 <= IDLE;
-    //         count_2 <= 0;
-    //         data_out_valid_2 <=0;
-    //     end
-    //     else
-    //     begin
-    //         case(state_2)
-    //             IDLE: begin
-    //                 count_2 <= 0;
-    //                 data_out_valid_2 <=0;
-    //                 if (o2_valid[0] == 1'b1)
-    //                 begin
-    //                     holdData_2 <= x2_out;
-    //                     state_2 <= SEND;
-    //                 end
-    //             end
-    //             SEND: begin
-    //                 out_data_2 <= holdData_2[`dataWidth-1:0];
-    //                 holdData_2 <= holdData_2>>`dataWidth;
-    //                 count_2 <= count_2 +1;
-    //                 data_out_valid_2 <= 1;
-    //                 if (count_2 == `numNeuronLayer2)
-    //                 begin
-    //                     state_2 <= IDLE;
-    //                     data_out_valid_2 <= 0;
-    //                 end
-    //             end
-    //         endcase
-    //     end
-    // end
-
-    // wire [`numNeuronLayer3-1:0] o3_valid;
-    // wire [`numNeuronLayer3*`dataWidth-1:0] x3_out;
-    // reg [`numNeuronLayer3*`dataWidth-1:0] holdData_3;
-    // reg [`dataWidth-1:0] out_data_3;
-    // reg data_out_valid_3;
-
-    // Layer_3 #(.NN(`numNeuronLayer3),.numWeight(`numWeightLayer3),.dataWidth(`dataWidth),.layerNum(3),.sigmoidSize(`sigmoidSize),.weightIntWidth(`weightIntWidth),.actType(`Layer3ActType)) l3(
-    //     .clk(clk),
-    //     .rst(reset),
-    // //	.weightValid(weightValid),
-    // //	.biasValid(biasValid),
-    // //	.weightValue(weightValue),
-    // //	.biasValue(biasValue),
-    // //	.config_layer_num(config_layer_num),
-    // //	.config_neuron_num(config_neuron_num),
-    //     .x_valid(data_out_valid_2),
-    //     .x_in(out_data_2),
-    //     .o_valid(o3_valid),
-    //     .x_out(x3_out)
-    // );
-
-    // //State machine for data pipelining
-
-    // reg       state_3;
-    // integer   count_3;
-    // always @(posedge clk)
-    // begin
-    //     if(reset)
-    //     begin
-    //         state_3 <= IDLE;
-    //         count_3 <= 0;
-    //         data_out_valid_3 <=0;
-    //     end
-    //     else
-    //     begin
-    //         case(state_3)
-    //             IDLE: begin
-    //                 count_3 <= 0;
-    //                 data_out_valid_3 <=0;
-    //                 if (o3_valid[0] == 1'b1)
-    //                 begin
-    //                     holdData_3 <= x3_out;
-    //                     state_3 <= SEND;
-    //                 end
-    //             end
-    //             SEND: begin
-    //                 out_data_3 <= holdData_3[`dataWidth-1:0];
-    //                 holdData_3 <= holdData_3>>`dataWidth;
-    //                 count_3 <= count_3 +1;
-    //                 data_out_valid_3 <= 1;
-    //                 if (count_3 == `numNeuronLayer3)
-    //                 begin
-    //                     state_3 <= IDLE;
-    //                     data_out_valid_3 <= 0;
-    //                 end
-    //             end
-    //         endcase
-    //     end
-    // end
-
-    // wire [`numNeuronLayer4-1:0] o4_valid;
-    // wire [`numNeuronLayer4*`dataWidth-1:0] x4_out;
-    // reg [`numNeuronLayer4*`dataWidth-1:0] holdData_4;
-    // reg [`dataWidth-1:0] out_data_4;
-    // reg data_out_valid_4;
-
-    // Layer_4 #(.NN(`numNeuronLayer4),.numWeight(`numWeightLayer4),.dataWidth(`dataWidth),.layerNum(4),.sigmoidSize(`sigmoidSize),.weightIntWidth(`weightIntWidth),.actType(`Layer4ActType)) l4(
-    //     .clk(clk),
-    //     .rst(reset),
-    // //	.weightValid(weightValid),
-    // //	.biasValid(biasValid),
-    // //	.weightValue(weightValue),
-    // //	.biasValue(biasValue),
-    // //	.config_layer_num(config_layer_num),
-    // //	.config_neuron_num(config_neuron_num),
-    //     .x_valid(data_out_valid_1),
-    //     .x_in(out_data_1),
-    //     .o_valid(o4_valid),
-    //     .x_out(x4_out)
-    // );
-
-    // //State machine for data pipelining
-
-    // reg       state_4;
-    // integer   count_4;
-    // always @(posedge clk)
-    // begin
-    //     if(reset)
-    //     begin
-    //         state_4 <= IDLE;
-    //         count_4 <= 0;
-    //         data_out_valid_4 <=0;
-    //     end
-    //     else
-    //     begin
-    //         case(state_4)
-    //             IDLE: begin
-    //                 count_4 <= 0;
-    //                 data_out_valid_4 <=0;
-    //                 if (o4_valid[0] == 1'b1)
-    //                 begin
-    //                     holdData_4 <= x4_out;
-    //                     state_4 <= SEND;
-    //                 end
-    //             end
-    //             SEND: begin
-    //                 out_data_4 <= holdData_4[`dataWidth-1:0];
-    //                 holdData_4 <= holdData_4>>`dataWidth;
-    //                 count_4 <= count_4 +1;
-    //                 data_out_valid_4 <= 1;
-    //                 if (count_4 == `numNeuronLayer4)
-    //                 begin
-    //                     state_4 <= IDLE;
-    //                     data_out_valid_4 <= 0;
-    //                 end
-    //             end
-    //         endcase
-    //     end
-    // end
-
-    // reg [`numNeuronLayer4*`dataWidth-1:0] holdData_5;
-    // assign rdata = holdData_5[`dataWidth-1:0];
-
-    // always @(posedge clk)
-    //     begin
-    //         if (o4_valid[0] == 1'b1)
-    //             holdData_5 <= x4_out;
-    //         else if(!ready)
-    //         begin
-    //             holdData_5 <= holdData_5>>`dataWidth;
-    //         end
-    //     end
-
-
     maxFinder #(.numInput(`numNeuronLayer1),.inputWidth(`dataWidth))
         mFind(
             .i_clk(clk),
@@ -447,91 +253,6 @@
             .o_data_valid(out_valid)
         );
 
-    // always @(posedge clk) begin
-    //     if(rst)
-    //         count <= 32'b0;
-    //     else if(wbs_stb_i && wbs_cyc_i && wbs_we_i && wbs_adr_i == USER_ADDRESS) begin
-    //         count <= wbs_dat_i;
-    //     end
-    // end
-
-    // // acks
-    // always @(posedge clk) begin
-    //     if(rst)
-    //         wack <= 0;
-    //     else
-    //         // return ack immediately
-    //         wack <= (wbs_stb_i && wbs_adr_i == USER_ADDRESS);
-    // end
-
 endmodule
 
-
-//     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;
-//             count <= count + 1;
-
-//             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
-//         end
-//     end
-
-// 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
