Advertisement
Guest User

Untitled

a guest
Oct 26th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module div (
  2.     input signed [31:0] A,
  3.     input signed [31:0] B,
  4.     input clk,
  5.     input reset,
  6.     input DivCon,
  7.     output reg signed [31:0] hi,
  8.     output reg signed [31:0] lo,
  9.     output reg exc
  10.    
  11. );
  12.  
  13. reg signed [63:0] remainder;
  14. reg signed [63:0] Divisor;
  15. reg signed [31:0] quo;
  16. reg signed [63:0] aux;
  17. reg t;
  18. reg signed [31:0]A1;
  19. reg signed [31:0]B1;
  20.  
  21.  
  22. integer i;
  23. initial begin
  24.     i = 34;
  25. end
  26. always @ (posedge clk) begin
  27.     if (reset == 1) begin
  28.         remainder = 64'b0;
  29.         Divisor = 64'b0;
  30.         quo = 32'b0;
  31.         aux = 64'b0;
  32.         t = 0;
  33.         A1 = 32'b0;
  34.         B1 = 32'b0;
  35.     end
  36.     if (DivCon == 1) begin
  37.         if (i > 33) begin
  38.             if (B == 0) begin
  39.                 exc = 1;
  40.             end
  41.             else begin
  42.            
  43.                 if (A < 0 && B < 0) begin
  44.                     A1 = ~A + 1;
  45.                     B1 = ~B + 1;
  46.                     remainder = {32'b0, A1};
  47.                     Divisor[63:32] = B1;
  48.                     t = 0;
  49.                 end
  50.                 else if (A < 0) begin
  51.                     A1 = ~A + 1;
  52.                     remainder = {32'b0, A1};
  53.                     Divisor[63:32] = B;
  54.                     t = 1;
  55.                 end
  56.                 else if (B < 0) begin
  57.                     B1 = ~B + 1;
  58.                     remainder = {32'b0, A};
  59.                     Divisor[63:32] = B1;
  60.                     t = 1;
  61.                 end
  62.                 else begin
  63.                     remainder = {32'b0, A};
  64.                     Divisor[63:32] = B;
  65.                     t = 0;
  66.                 end
  67.                 Divisor = Divisor <<< 1;
  68.                 Divisor[31:0] = 32'b0;
  69.                 quo = 32'b0;
  70.                 i = 0;
  71.             end
  72.         end
  73.     end
  74.     if (i < 34) begin
  75.         aux = ~Divisor + 1;
  76.         aux = remainder + aux;
  77.  
  78.         case (aux[63])
  79.             1'b1: begin
  80.                 quo = quo <<< 1;
  81.                 Divisor = Divisor >>> 1;
  82.             end
  83.             1'b0: begin
  84.                 quo = quo <<< 1;
  85.                 Divisor = Divisor >>> 1;
  86.                 quo = quo + 1;
  87.                 remainder = aux;
  88.             end
  89.         endcase
  90.         i = i + 1;
  91.         if (i == 34) begin
  92.             if (t == 1) begin
  93.                 A1 = ~quo + 1;
  94.             end
  95.             hi = A1;
  96.             lo = remainder;
  97.         end
  98.     end
  99. end
  100.  
  101. endmodule //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement