Advertisement
Andruwkoo

sqrt

Apr 7th, 2020
508
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.94 KB | None | 0 0
  1. module sqrt
  2. #(parameter DATA_IN_WIDTH = 16)
  3. (
  4. input wire clk,
  5. input wire signed [ DATA_IN_WIDTH-1: 0 ] x1,
  6. input wire signed [ DATA_IN_WIDTH-1: 0 ] x2,
  7. output wire [ DATA_IN_WIDTH-1: 0 ] y
  8. );
  9.  
  10. localparam DATA_WIDTH_SQUARING = (2*DATA_IN_WIDTH) - 1;
  11. wire [ DATA_WIDTH_SQUARING-1 : 0 ] x1_2 = x1*x1;
  12. wire [ DATA_WIDTH_SQUARING-1 : 0 ] x2_2 = x2*x2;
  13.  
  14. localparam DATA_WIDTH_SUM = DATA_WIDTH_SQUARING+1;
  15. // wire [ DATA_WIDTH_SUM-1 : 0 ] x = x1_2 + x2_2;
  16. wire [ DATA_WIDTH_SUM-1 : 0 ] x = x1;
  17.  
  18. assign y[DATA_IN_WIDTH-1] = x[(DATA_WIDTH_SUM-1)-:2] == 2'b00 ? 1'b0 : 1'b1;
  19. genvar k;
  20. generate
  21. for(k = DATA_IN_WIDTH-2; k >= 0; k = k - 1)
  22. begin: gen
  23. assign y[k] = x[(DATA_WIDTH_SUM-1)-:(2*(DATA_IN_WIDTH-k))] <
  24. {y[DATA_IN_WIDTH-1:k+1],1'b1}*{y[DATA_IN_WIDTH-1:k+1],1'b1} ? 1'b0 : 1'b1;
  25. end
  26. endgenerate
  27.  
  28. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement