added sarlogic verilog code
diff --git a/verilog/sarlogic/sarlogic.v b/verilog/sarlogic/sarlogic.v
new file mode 100755
index 0000000..fe656f5
--- /dev/null
+++ b/verilog/sarlogic/sarlogic.v
@@ -0,0 +1,152 @@
+`timescale 1ns/10ps
+
+// Classic SAR algorithm + Offset calibration.
+
+module sarlogic(
+    input           clk,
+    input           rstn,
+    input           en,
+    input           comp,
+    input           cal,
+    output          valid,
+    output  [9:0]   result,
+    output  		sample,
+    output  [9:0]   ctlp,
+    output  [9:0]   ctln,
+    output  [4:0]   trim,
+    output  [4:0]   trimb,
+    output          clkc);
+
+    reg             calibrate;
+    reg     [2:0]   state;
+    reg     [9:0]   mask;
+    reg     [4:0]   trim_mask;
+    reg     [9:0]   result;
+    reg     [4:0]   trim_val;
+    reg             sample;
+    reg             co_clk;
+    reg             en_co_clk;
+    reg     [3:0]   cal_count;
+    reg     [3:0]   cal_itt;
+    reg             res_valid;
+
+    parameter sInit=0, sWait=1, sSample=2, sConv=3, sDone=4, sCal=5;
+
+    initial begin
+        state <= sInit;
+        mask <= 0;
+        trim_mask <= 0;
+        result <= 0;
+        co_clk <= 0;
+        en_co_clk <= 0;
+        cal_itt <= 0;
+        cal_count <= 7;
+        trim_val <= 0;
+        calibrate <= 0;
+        res_valid <= 0;
+    end
+
+    always @(clk) begin
+        clkc <= (~clk & en_co_clk);
+    end
+
+    always @(posedge clk or negedge rstn) begin
+
+        if (!rstn) begin
+            state <= sInit;
+            mask <= 0;
+            trim_mask <= 0;
+            result <= 0;
+            co_clk <= 0;
+            en_co_clk <= 0;
+            cal_itt <= 0;
+            cal_count <= 7;
+            trim_val <= 0;
+            calibrate <= 0;
+            res_valid <= 0;
+        end
+        else begin
+            case (state)
+
+                sInit : begin
+                    trim_val <= 5'b10000;
+                    state <= sWait;
+                end
+
+                sWait : begin
+                    if(en) begin
+                        result <= 0;
+                        cal_itt <= 0;
+                        cal_count <= 7;
+                        state <= sSample;
+                        calibrate <= cal;
+		    		    mask <= 10'b1000000000;
+                        en_co_clk <= 1;
+                        res_valid <= 0;
+                    end
+                    else state <= sWait;
+                end
+
+		    	sSample : begin
+                    if (calibrate) begin
+                        state <= sCal;
+                        trim_val <= 5'b00000;
+		    		    trim_mask <= 5'b10000;
+                    end
+                    else begin
+                        state <= sConv;
+                    end
+		    	end
+
+                sConv : begin
+                	if (comp) result  <= result | mask;
+                    mask <= mask >> 1;                
+                    if (mask[0]) begin
+                        state <= sDone;
+                        en_co_clk <=0;
+                    end
+                end
+
+                sCal: begin
+                    if(cal_itt == 7) begin
+                        if (cal_count > 7) begin
+                            trim_val <= trim_val | trim_mask;
+                        end
+                        trim_mask <= trim_mask >> 1;
+                        if (trim_mask[0]) begin
+                            state <= sDone;
+                            en_co_clk <=0;
+                            calibrate <= 0;
+                        end else begin
+                            cal_itt = 0;
+                            state <= sCal;
+                        end 
+                        cal_count <= 7;
+                    end else begin
+                        if (comp) begin
+                            cal_count <= cal_count - 1;
+                        end else begin
+		    				cal_count <= cal_count + 1;
+                        end
+                        cal_itt <= cal_itt + 1;
+                    end 
+                end
+
+                sDone : begin
+                    state <= sWait;
+                    res_valid <= 1;
+                end
+
+            endcase
+        end
+    end
+
+    assign trim   = (trim_val | trim_mask );
+    assign trimb  = ~(trim_val | trim_mask);
+    assign sample = (state==sSample) || (state==sCal);
+    assign valid  = (1 && res_valid);
+	assign ctlp   = result | mask;
+	assign ctln   = ~(result | mask);
+
+endmodule
+