//************************************************************************ // Verilog obfuncation test V1.0 using sqrt.v from the book DSP with FPGAs // Author: Dr. Uwe Meyer-Baese EMAIL: Uwe.Meyer-Baese@ieee.org //************************************************************************ module sqrt128( input clk, reset, input [16:0] x_in, output [16:0] a_o, imm_o, f_o , output reg [2:0] ind_o, output reg [1:0] count_o, output [16:0] x_o, pre_o, post_o, output reg [16:0] f_out); parameter load = 0, mac = 1, scale = 2, denorm = 3, nop = 4; parameter start = 0, leftshift = 1, sop = 2, rightshift = 3, done = 4; reg [2:0] lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 , llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 ; reg [16:0] l111l1lll1ll1l1l1111lll111111lllll1ll111llll111l1l1llll111l1lll1ll1lll1111ll1lllll1l11l11111lll11l11l1lll1llll1ll11llll11ll1111l ; reg signed [16:0] l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll , l11ll1ll11ll1l1l11lll111lll11lll1ll1llllll1l11111l111l11l1l11l1l1111ll11111111l11l111l11l111l1l1llll1111llllll11l1l1ll1lll11ll11 , l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l , l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l ; reg [16:0] l1l1llll1l11l1ll11lll1l1l11l1lll1l1l11ll11llll1111llll11111l1l1111l1111l1lll1l11lll1l1l1l111lllll1lllll11llll1ll111ll11l1l11l11l , l1ll11l1lll111lll1l1l1111l1l1lll11l11ll11l1l111l11111111ll1llllll1l1l1llll1ll1111l1lll11l11ll1l1ll11lllll1l111llll11ll1ll1l1l11l ; wire signed [16:0] l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [0:4]; assign l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 0] = 7563; assign l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 1] = 42299; assign l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 2] = -29129; assign l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 3] = 15813; assign l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 4] = -3778; always@( posedge reset or posedge clk) begin: States reg signed [3:0] ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l ; reg [1:0] l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 ; if( reset) lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= start; else begin case( lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 ) start: begin lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= leftshift; ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l = 4; l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l <= x_in; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= load; l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 = 0; end leftshift: begin l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 = l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 + 1; l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll <= l1l1llll1l11l1ll11lll1l1l11l1lll1l1l11ll11llll1111llll11111l1l1111l1111l1lll1l11lll1l1l1l111lllll1lllll11llll1ll111ll11l1l11l11l ; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= scale; l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l <= l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ 4]; if( l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 == 3) begin lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= sop; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= load; l111l1lll1ll1l1l1111lll111111lllll1ll111llll111l1l1llll111l1lll1ll1lll1111ll1lllll1l11l11111lll11l11l1lll1llll1ll11llll11ll1111l <= l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; end end sop: begin ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l = ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l - 1; l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll <= l111l1lll1ll1l1l1111lll111111lllll1ll111llll111l1l1llll111l1lll1ll1lll1111ll1lllll1l11l11111lll11l11l1lll1llll1ll11llll11ll1111l ; if( ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l == -1) begin lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= rightshift; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= denorm; l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll <= l1ll11l1lll111lll1l1l1111l1l1lll11l11ll11l1l111l11111111ll1llllll1l1l1llll1ll1111l1lll11l11ll1l1ll11lllll1l111llll11ll1ll1l1l11l ; end else begin l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l <= l1l1l111ll11ll1llll1111lllllll1lllll1ll111ll111l11l1ll1ll1l1l111l1ll111l1l111l1l111l1ll1ll11llll11l11l11l111llll1l1ll111111111l1 [ ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l ]; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= mac; end end rightshift: begin lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= done; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= nop; end done: begin f_out <= l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 <= nop; lll11111l1lll1l1ll11ll111lll11l111ll1lll111111l111l11ll1ll11l1l1l1ll111lll11llll111111lll1l1111llll1ll1l1l11ll111lll111l11llll11 <= start; end endcase end ind_o <= ll1lll1ll1lll1ll11111llllll1l11l1l1ll111lll1l1l11l1l111111l1l1ll1lll111l1llllll1l11l111l1ll11l1l1l1l1lll1ll111ll111lll111l11111l ; count_o <= l11lll1l111ll1lll111ll11l11l1111l1ll1111l1l11lll1l1l11ll11l11111llll111l1ll1ll1l1ll1111l1lll11l1l1ll11ll1lll1lllll1l111l1lll1ll1 ; end always@( posedge clk) begin: ALU case( llllll11l1l11111l1ll1lll1l11111l1l1l11l11ll11l1ll1111ll1l11111l111111ll11llllll11l1l111ll11l11lllll1lll111lll11l1l11lll11111lll1 ) load: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <= l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l ; mac: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <=( l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll * l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l / 32768)+ l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l ; scale: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <= l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll * l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; denorm: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <=( l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll * l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l / 32768); nop: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <= l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; default: l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l <= l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; endcase end always@* begin: EXP reg [16:0] l1l11ll11l1llllll1l1ll1l1111llll111l1l11l1l1lllllllll1111lllllll1ll1111lll111111l1lll1l11l1l1l1lll11ll1111l11111ll111l1ll11ll1l1 ; reg [16:0] l111ll1lllll11l111111l1lll1ll111l111ll1l1l111ll11lll11l1llll11ll1ll1lll111111l11ll1ll1l1l11l1l11lll1111l1l11ll1ll111ll1l11lll11l , llllllll11l11ll1ll1lll1lll1lll1l111lll11l11lll11l11lll1l11ll11l1lll1111lll1ll1lll1lllll1llll1l1ll11lll1l1l11111ll11lll1ll11lll11 ; integer K, L; l1l11ll11l1llllll1l1ll1l1111llll111l1l11l1l1lllllllll1111lllllll1ll1111lll111111l1lll1l11l1l1l1lll11ll1111l11111ll111l1ll11ll1l1 = x_in; for( K = 0; K <= 15; K = K +1) if( l1l11ll11l1llllll1l1ll1l1111llll111l1l11l1l1lllllllll1111lllllll1ll1111lll111111l1lll1l11l1l1l1lll11ll1111l11111ll111l1ll11ll1l1 [ K] == 1) L <= K; l1l1llll1l11l1ll11lll1l1l11l1lll1l1l11ll11llll1111llll11111l1l1111l1111l1lll1l11lll1l1l1l111lllll1lllll11llll1ll111ll11l1l11l11l = 1<<( 14- L); l111ll1lllll11l111111l1lll1ll111l111ll1l1l111ll11lll11l1llll11ll1ll1lll111111l11ll1ll1l1l11l1l11lll1111l1l11ll1ll111ll1l11lll11l = 1; for( K = 0; K <= 7; K = K +1) begin if( l1l11ll11l1llllll1l1ll1l1111llll111l1l11l1l1lllllllll1111lllllll1ll1111lll111111l1lll1l11l1l1l1lll11ll1111l11111ll111l1ll11ll1l1 [ 2* K] == 1) l111ll1lllll11l111111l1lll1ll111l111ll1l1l111ll11lll11l1llll11ll1ll1lll111111l11ll1ll1l1l11l1l11lll1111l1l11ll1ll111ll1l11lll11l = 1<<( K +8); if( l1l11ll11l1llllll1l1ll1l1111llll111l1l11l1l1lllllllll1111lllllll1ll1111lll111111l1lll1l11l1l1l1lll11ll1111l11111ll111l1ll11ll1l1 [ 2* K +1] == 1) l111ll1lllll11l111111l1lll1ll111l111ll1l1l111ll11lll11l1llll11ll1ll1lll111111l11ll1ll1l1l11l1l11lll1111l1l11ll1ll111ll1l11lll11l =( 1<<( K +9))-( 1<<( K +7))-( 1<<( K +5))+( 1<<( K +3))+( 1<<( K +1))+( 1<<( K -5)); end l1ll11l1lll111lll1l1l1111l1l1lll11l11ll11l1l111l11111111ll1llllll1l1l1llll1ll1111l1lll11l11ll1l1ll11lllll1l111llll11ll1ll1l1l11l <= l111ll1lllll11l111111l1lll1ll111l111ll1l1l111ll11lll11l1llll11ll1ll1lll111111l11ll1ll1l1l11l1l11lll1111l1l11ll1ll111ll1l11lll11l ; end assign a_o = l11llll1l11llll1lllll1ll11llll1llll111l11111111l1l11lll1ll1lll11llll1l1l11ll111ll1111l111l1l11l1lllll1l11ll1l11l1l1l111ll1l111ll ; assign imm_o = l11llll1llll1ll1l1lll1llll11l11l1ll1lll1111l1lll1111ll1111111l1111l11111l1111l11l11l11ll1l11ll11llll1l11l11111llll11ll11l1l11l1l ; assign f_o = l11l1l1l1l1l111lll111l1l1ll1lll111ll1ll11l111ll11ll1l1lll1111l1lll11l1l1ll1lll1111l111ll1ll111l111l1l1lll11l1l1ll1l1111l1l111l1l ; assign pre_o = l1l1llll1l11l1ll11lll1l1l11l1lll1l1l11ll11llll1111llll11111l1l1111l1111l1lll1l11lll1l1l1l111lllll1lllll11llll1ll111ll11l1l11l11l ; assign post_o = l1ll11l1lll111lll1l1l1111l1l1lll11l11ll11l1l111l11111111ll1llllll1l1l1llll1ll1111l1lll11l11ll1l1ll11lllll1l111llll11ll1ll1l1l11l ; assign x_o = l111l1lll1ll1l1l1111lll111111lllll1ll111llll111l1l1llll111l1lll1ll1lll1111ll1lllll1l11l11111lll11l11l1lll1llll1ll11llll11ll1111l ; // No Warranty! What so ever ! copyright 2011 Uwe Meyer-Baese endmodule