Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. module booth(prod, mcand, mplier);
  2.  
  3. input [31:0] mcand, mplier;
  4. output reg [63:0] prod;
  5.  
  6. //reg start = 1;
  7. reg [4:0] bit = 0;
  8. reg lostbit;
  9.  
  10.  
  11. wire [33:0] mcand_p1 = {mcand[31], mcand[31], mcand}; // times 1
  12. wire [33:0] mcand_p2 = {mcand[31], mcand, 1'b0}; // times 2
  13. wire [33:0] mcand_n1 = -mcand_p1; // times -1
  14. wire [33:0] mcand_n2 = -mcand_p2; // times -2
  15.  
  16. reg [1:0] mb;
  17. reg [33:0] hprod_next;
  18. reg [33:0] hprod_prev;
  19.  
  20.  
  21.  
  22. integer i;
  23.  
  24. always@(mcand, mplier) begin
  25.  
  26. bit = 5'b10000;
  27. prod = {32'b0, mplier};
  28. lostbit = 0;
  29.  
  30. for( i = 0; i < bit; i = i + 1) begin
  31.  
  32. hprod_prev = { prod[63], prod[63], prod[63:32] };
  33.  
  34. mb = prod[1:0];
  35.  
  36. case ( {mb,lostbit} )
  37. 3'b000: hprod_next = hprod_prev;
  38. 3'b001: hprod_next = hprod_prev + mcand_p1;
  39. 3'b010: hprod_next = hprod_prev + mcand_p1;
  40. 3'b011: hprod_next = hprod_prev + mcand_p2;
  41. 3'b100: hprod_next = hprod_prev + mcand_n2;
  42. 3'b101: hprod_next = hprod_prev + mcand_n1;
  43. 3'b110: hprod_next = hprod_prev + mcand_n1;
  44. 3'b111: hprod_next = hprod_prev;
  45. endcase
  46.  
  47. lostbit = prod[1];
  48.  
  49. prod = { hprod_next, prod[31:2] };
  50.  
  51. end
  52. end
  53. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement