Advertisement
Guest User

Untitled

a guest
Oct 26th, 2018
138
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.     exc = 0;
  26. end
  27. always @ (posedge clk) begin
  28.     if (reset == 1) begin
  29.         remainder = 64'b0;
  30.         Divisor = 64'b0;
  31.         quo = 32'b0;
  32.         aux = 64'b0;
  33.         t = 0;
  34.         A1 = 32'b0;
  35.         B1 = 32'b0;
  36.         exc = 0;
  37.     end
  38.     if (DivCon == 1) begin
  39.         if (i > 33) begin
  40.             if (B == 0) begin
  41.                 exc = 1;
  42.             end
  43.             else begin
  44.            
  45.                 if (A < 0 && B < 0) begin
  46.                     A1 = ~A + 1;
  47.                     B1 = ~B + 1;
  48.                     remainder = {32'b0, A1};
  49.                     Divisor[63:32] = B1;
  50.                     t = 0;
  51.                 end
  52.                 else if (A < 0) begin
  53.                     A1 = ~A + 1;
  54.                     remainder = {32'b0, A1};
  55.                     Divisor[63:32] = B;
  56.                     t = 1;
  57.                 end
  58.                 else if (B < 0) begin
  59.                     B1 = ~B + 1;
  60.                     remainder = {32'b0, A};
  61.                     Divisor[63:32] = B1;
  62.                     t = 1;
  63.                 end
  64.                 else begin
  65.                     remainder = {32'b0, A};
  66.                     Divisor[63:32] = B;
  67.                     t = 0;
  68.                 end
  69.                 Divisor = Divisor <<< 1;
  70.                 Divisor[31:0] = 32'b0;
  71.                 quo = 32'b0;
  72.                 i = 0;
  73.             end
  74.         end
  75.     end
  76.     if (i < 34) begin
  77.         aux = ~Divisor + 1;
  78.         aux = remainder + aux;
  79.  
  80.         case (aux[63])
  81.             1'b1: begin
  82.                 quo = quo <<< 1;
  83.                 Divisor = Divisor >>> 1;
  84.             end
  85.             1'b0: begin
  86.                 quo = quo <<< 1;
  87.                 Divisor = Divisor >>> 1;
  88.                 quo = quo + 1;
  89.                 remainder = aux;
  90.             end
  91.         endcase
  92.         i = i + 1;
  93.         if (i == 34) begin
  94.             if (t == 1) begin
  95.                 A1 = ~quo + 1;
  96.                 hi = A1;
  97.             end
  98.             else begin
  99.                 hi = quo;
  100.             end
  101.             lo = remainder;
  102.         end
  103.     end
  104. end
  105.  
  106. endmodule //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement