diff --git a/verilog/multilib.v b/verilog/multilib.v
deleted file mode 100644
index 624ba9d..0000000
--- a/verilog/multilib.v
+++ /dev/null
@@ -1,229 +0,0 @@
-module binvert(output ib,input b);
-	assign ib = ~b;
-endmodule
-
-module band2 (input wire i0, i1, output wire o);
-  assign o = i0 & i1;
-endmodule
-
-module bor2 (input wire i0, i1, output wire o);
-  assign o = i0 | i1;
-endmodule
-
-module bxor2 (input wire i0, i1, output wire o);
-  assign o = i0 ^ i1;
-endmodule
-
-module bnand2 (input wire i0, i1, output wire o);
-   wire t;
-   band2 and2_0 (i0, i1, t);
-   binvert invert_0 (t, o);
-endmodule
-
-module bnor2 (input wire i0, i1, output wire o);
-   wire t;
-   bor2 or2_0 (i0, i1, t);
-   binvert invert_0 (t, o);
-endmodule
-
-module bxnor2 (input wire i0, i1, output wire o);
-   wire t;
-   bxor2 xor2_0 (i0, i1, t);
-   binvert invert_0 (t, o);
-endmodule
-
-module band3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   band2 and2_0 (i0, i1, t);
-   band2 and2_1 (i2, t, o);
-endmodule
-
-module bor3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   bor2 or2_0 (i0, i1, t);
-   bor2 or2_1 (i2, t, o);
-endmodule
-
-module bnor3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   bor2 or2_0 (i0, i1, t);
-   bnor2 nor2_0 (i2, t, o);
-endmodule
-
-module bnand3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   band2 and2_0 (i0, i1, t);
-   bnand2 nand2_1 (i2, t, o);
-endmodule
-
-module bxor3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   bxor2 xor2_0 (i0, i1, t);
-   bxor2 xor2_1 (i2, t, o);
-endmodule
-
-module bxnor3 (input wire i0, i1, i2, output wire o);
-   wire t;
-   bxor2 xor2_0 (i0, i1, t);
-   bxnor2 xnor2_0 (i2, t, o);
-endmodule
-
-module bfa (input wire i0, i1, cin, output wire sum, cout);
-   wire t0, t1, t2;
-   bxor3 _i0 (i0, i1, cin, sum);
-   band2 _i1 (i0, i1, t0);
-   band2 _i2 (i1, cin, t1);
-   band2 _i3 (cin, i0, t2);
-   bor3 _i4 (t0, t1, t2, cout);
-endmodule
-
-
-module Adder(a,b,sum);
-	input [15:0] a,b;
-	output [15:0]sum;
-	wire cout;
-	wire [15:0] q;
-	bfa fa1(a[0],b[0],1'b0,sum[0],q[0]);
-	bfa fa2(a[1],b[1],q[0],sum[1],q[1]);
-	bfa fa3(a[2],b[2],q[1],sum[2],q[2]);
-	bfa fa4(a[3],b[3],q[2],sum[3],q[3]);
-	bfa fa5(a[4],b[4],q[3],sum[4],q[4]);
-	bfa fa6(a[5],b[5],q[4],sum[5],q[5]);
-	bfa fa7(a[6],b[6],q[5],sum[6],q[6]);
-	bfa fa8(a[7],b[7],q[6],sum[7],q[7]);
-	bfa fa9(a[8],b[8],q[7],sum[8],q[8]);
-	bfa fa10(a[9],b[9],q[8],sum[9],q[9]);
-	bfa fa11(a[10],b[10],q[9],sum[10],q[10]);
-	bfa fa12(a[11],b[11],q[10],sum[11],q[11]);
-	bfa fa13(a[12],b[12],q[11],sum[12],q[12]);
-	bfa fa14(a[13],b[13],q[12],sum[13],q[13]);
-	bfa fa15(a[14],b[14],q[13],sum[14],q[14]);
-	bfa fa16(a[15],b[15],q[14],sum[15],cout);	
-endmodule
-
-module subtractor(a,b,sum);
-	input [15:0] a,b;
-	output [15:0]sum;
-	wire [15:0] ib;
-	wire cout;
-	binvert b1(ib[0],b[0]);
-	binvert b2(ib[1],b[1]);
-	binvert b3(ib[2],b[2]);
-	binvert b4(ib[3],b[3]);
-	binvert b5(ib[4],b[4]);
-	binvert b6(ib[5],b[5]);
-	binvert b7(ib[6],b[6]);
-	binvert b8(ib[7],b[7]);
-	binvert b9(ib[8],b[8]);
-	binvert b10(ib[9],b[9]);
-	binvert b11(ib[10],b[10]);
-	binvert b12(ib[11],b[11]);
-	binvert b13(ib[12],b[12]);
-	binvert b14(ib[13],b[13]);
-	binvert b15(ib[14],b[14]);
-	binvert b16(ib[15],b[15]);
-
-
-	wire [15:0] q;
-	bfa fa1(a[0],ib[0],1'b1,sum[0],q[0]);
-	bfa fa2(a[1],ib[1],q[0],sum[1],q[1]);
-	bfa fa3(a[2],ib[2],q[1],sum[2],q[2]);
-	bfa fa4(a[3],ib[3],q[2],sum[3],q[3]);
-	bfa fa5(a[4],ib[4],q[3],sum[4],q[4]);
-	bfa fa6(a[5],ib[5],q[4],sum[5],q[5]);
-	bfa fa7(a[6],ib[6],q[5],sum[6],q[6]);
-	bfa fa8(a[7],ib[7],q[6],sum[7],q[7]);
-	bfa fa9(a[8],ib[8],q[7],sum[8],q[8]);
-	bfa fa10(a[9],ib[9],q[8],sum[9],q[9]);
-	bfa fa11(a[10],ib[10],q[9],sum[10],q[10]);
-	bfa fa12(a[11],ib[11],q[10],sum[11],q[11]);
-	bfa fa13(a[12],ib[12],q[11],sum[12],q[12]);
-	bfa fa14(a[13],ib[13],q[12],sum[13],q[13]);
-	bfa fa15(a[14],ib[14],q[13],sum[14],q[14]);
-	bfa fa16(a[15],ib[15],q[14],sum[15],cout);
-
-endmodule
-
-
-
-module booth_substep(input wire signed [15:0]a,Q,input wire signed q0,input wire signed [15:0] m,output reg signed [15:0] f8,output reg signed [15:0] l8,output reg cq0);
-	wire [15:0] addam,subam;
-	Adder myadd(a,m,addam);
-	subtractor mysub(a,m,subam);
-	// Still need to fix this part
-		always @(*) begin	
-		if(Q[0] == q0) begin
-			 cq0 = Q[0];
-			l8 = Q>>1;
-			l8[15] = a[0];
-			 f8 = a>>1;
-			if (a[15] == 1)
-			f8[15] = 1;
-		end
-
-		else if(Q[0] == 1 && q0 ==0) begin
-			 cq0 = Q[0];
-				l8 = Q>>1;
-			 l8[15] = subam[0];
-			 f8 = subam>>1;
-			if (subam[15] == 1)
-			f8[15] = 1;
-		end
-
-		else begin
-			 cq0 = Q[0];
-				l8 = Q>>1;
-			 l8[15] = addam[0];
-			 f8 = addam>>1;
-			if (addam[15] == 1)
-			f8[15] = 1;
-		end
-						
-			
-			
-			 	
-		
-	
-end	
-endmodule 
-	
-
-
- 
-module mul16x16_signed(input CLK,input signed[15:0]A,B,output reg signed [31:0] P);
-	wire signed [15:0]Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10,Q11,Q12,Q13,Q14,Q15;
-	wire signed [15:0] m;
-
-	//The next two lines may need to be changed
-	wire signed [15:0] A1,A0,A3,A2,A8,A9,A10,A11;
-	wire signed [15:0] A4,A5,A6,A7,A12,A13,A14,A15;
-	wire signed[15:0] q0;
-	wire signed[31:0] c;
-	wire qout;
-	//These need to be changed and added to
-	booth_substep step1(16'b0000000000000000,a,1'b0,b,A1,Q1,q0[1]);
-	booth_substep step2(A1,Q1,q0[1],b,A2,Q2,q0[2]);
-	booth_substep step3(A2,Q2,q0[2],b,A3,Q3,q0[3]);
-	booth_substep step4(A3,Q3,q0[3],b,A4,Q4,q0[4]);
-	booth_substep step5(A4,Q4,q0[4],b,A5,Q5,q0[5]);
-	booth_substep step6(A5,Q5,q0[5],b,A6,Q6,q0[6]);
-	booth_substep step7(A6,Q6,q0[6],b,A7,Q7,q0[7]);
-	booth_substep step8(A7,Q7,q0[7],b,A8,Q8,q0[8]);
-	booth_substep step9(A8,Q8,q0[8],b,A9,Q9,q0[9]);
-	booth_substep step10(A9,Q9,q0[9],b,A10,Q10,q0[10]);
-	booth_substep step11(A10,Q10,q0[10],b,A11,Q11,q0[11]);
-	booth_substep step12(A11,Q11,q0[11],b,A12,Q12,q0[12]);
-	booth_substep step13(A12,Q12,q0[12],b,A13,Q13,q0[13]);
-	booth_substep step14(A13,Q13,q0[13],b,A14,Q14,q0[14]);
-	booth_substep step15(A14,Q14,q0[14],b,A15,Q15,q0[15]);
-	booth_substep step16(A15,Q15,q0[15],b,c[31:16],c[15:0],qout);
-	
-	always@(posedge CLK)	P <= c;
-	
-	 
-endmodule
-
-module mul16_unsigned(input CLK, input signed[15:0]A,B,output signed [31:0] P);
-	mul16x16_signed(CLK, A, B, P);
-endmodule
-
