Advertisement
Tavi33

Divider - WORKING

May 16th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module divider(
  2.  
  3.    input clk,
  4.    input rst,
  5.    input [7:0] inA,
  6.    input [7:0] inB,
  7.    output [7:0] rem,
  8.    output [7:0] quot
  9.  
  10. );
  11.  
  12. reg [1:0] q;
  13. reg [7:0] A;
  14. reg [7:0] B;
  15. reg [8:0] P;
  16. reg [2:0] k;
  17. reg [3:0] cnt;
  18. reg [1:0] ok;
  19.  
  20. reg[3:0] state,state_nxt;
  21. localparam s0=3'd0, s1=3'd1,s2=3'd2,s3=3'd3;
  22.  
  23. always @(posedge clk or posedge rst)
  24. begin
  25.     if (rst) begin
  26.       state <= s0;
  27.       A <= inA;
  28.       B <= inB;
  29.       q <= 1'b0;
  30.       k <= 3'b0;
  31.       P <= 5'b0;
  32.       cnt <= 4'd0;
  33.       ok <= 2'd0;
  34.    end
  35.    else begin
  36.       case(state)
  37.         s0:
  38.            if(B[7] == 1'd0)
  39.               begin
  40.                   B[7:1] <= B[6:0];
  41.                   B[0] <= 0;
  42.                   P[8:0] <= {P[7:0], A[7]};
  43.                   A[7:1] <= A[6:0];
  44.                   A[0] <= 0;
  45.                   k <= k + 1'b1;
  46.                   state <= s0;
  47.               end
  48.            else
  49.               state <= s1;
  50.         s1:
  51.         if(cnt < 8 || ok != 0)
  52.            begin
  53.              if(ok == 0) begin
  54.                 cnt <= cnt + 1;
  55.                 if(P[8:6] == 0 || P[8:6] == 7) begin
  56.                    P[8:0] <= {P[7:0], A[7]};
  57.                    A[7:1] <= A[6:0];
  58.                    A[0] <= 0;
  59.                 end
  60.                 else if(P[8] == 1) begin
  61.                    P[8:0] <= {P[7:0], A[7]};
  62.                    A[7:1] <= A[6:0];
  63.                    A[0] <= 0;
  64.                    ok <= 2'd1;
  65.                 end
  66.                 else begin
  67.                    P[8:0] <= {P[7:0], A[7]};
  68.                    A[7:1] <= A[6:0];
  69.                    A[0] <= 0;
  70.                    ok <= 2'd2;
  71.                 end
  72.              end
  73.              else begin
  74.                 if(ok == 1) begin
  75.                    ok <= 0;
  76.                    A <= A - 1'd1;
  77.                    P <= P + B;
  78.                 end
  79.                 else begin
  80.                    ok <= 0;
  81.                    A <= A + 1'd1;
  82.                    P <= P - B;
  83.                 end
  84.              end
  85.            end
  86.        else state <= s2;
  87.        s2:
  88.           if(P[8] == 1) begin
  89.              P <= P + B;
  90.              A <= A - 1'd1;
  91.           end
  92.           else begin
  93.              if(k > 0) begin
  94.                 P[7:0] <= P[8:1];
  95.                 P[8] <= 0;
  96.                 k <= k - 1'd1;
  97.              end
  98.              else begin
  99.                 state <= s3;
  100.              end
  101.           end
  102.       endcase
  103.    end
  104. end
  105.  
  106. assign quot = A;
  107. assign rem = P[7:0];
  108.  
  109. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement