Advertisement
Tavi33

Divider #2

May 10th, 2016
89
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 [3:0] inA,
  6.    input [3:0] inB,
  7.    output [4:0] rem,
  8.    output [3:0] quot
  9.  
  10. );
  11.  
  12. reg [1:0] q;
  13. reg [3:0] A;
  14. reg [3:0] B;
  15. reg [4:0] P;
  16. reg [2:0] k;
  17. reg [3:0] cnt;
  18.  
  19. reg[3:0] state,state_nxt;
  20. localparam s0=3'd0, s1=3'd1,s2=3'd2,s3=3'd3;
  21.  
  22. always @(posedge clk or posedge rst)
  23. begin
  24.     if (rst) begin
  25.       state <= s0;
  26.       A <= inA;
  27.       B <= inB;
  28.       q <= 1'b0;
  29.       k <= 3'b0;
  30.       P <= 5'b0;
  31.       cnt <= 4'd3;
  32.    end
  33.    else begin
  34.       case(state)
  35.         s0:
  36.            if(B[3] == 1'd0)
  37.               begin
  38.                   {P[4:0], A[3:0], B[3:0]} <= {P[3:0],A[3:0],B[3:0],1'b0};
  39.                   k <= k + 1'b1;
  40.                   state <= s0;
  41.               end
  42.            else
  43.               state <= s1;
  44.         s1:
  45.         if(cnt > 0)
  46.            case({A[3],A[2],A[1]})
  47.               3'd0,3'd7: begin
  48.                   q <= 2'd0;
  49.                   {P, A} <= {P[3:0],A,1'b0};
  50.                   cnt <= cnt - 1;
  51.                   state <= s1;
  52.               end
  53.               default:
  54.                  begin
  55.                      if(P[4] == 1) begin
  56.                         q <= 2'b01;
  57.                         {P, A} <= {P[3:0],A,1'b0};
  58.                         P <= P + {1'b0,B};
  59.                         cnt <= cnt - 1;
  60.                         state <= s1;
  61.                      end
  62.                      else
  63.                      begin
  64.                         q <= 2'b10;
  65.                         {P, A} <= {P[3:0],A[3:1],1'b0};
  66.                         P <= P - {1'b0,B};
  67.                         cnt <= cnt - 1;
  68.                         state <= s1;
  69.                      end
  70.                  end
  71.            endcase
  72.        else state <= s2;
  73.        s2:
  74.           begin
  75.               if(P[4] == 1)
  76.               begin
  77.                  P <= P + {1'b0,B};
  78.                  A <= A - 1'b1;
  79.                  //P <= P << k;
  80.               end
  81.           end
  82.   endcase
  83.    end
  84. end
  85.  
  86. assign rem = P[3:0];
  87. assign quot = A;
  88.  
  89. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement