Divider.Lola.txt 595 B

1234567891011121314151617181920
  1. MODULE Divider( (*NW 14.9.2015*)
  2. IN clk, run, u: BIT;
  3. OUT stall: BIT;
  4. IN x, y: WORD; (*y > 0*)
  5. OUT quot, rem: WORD);
  6. REG (clk) S: [6] BIT;
  7. RQ: [64] BIT;
  8. VAR sign: BIT;
  9. x0, w0, w1: WORD;
  10. BEGIN stall := run & (S # 33);
  11. sign := x.31 & u;
  12. x0 := sign -> -x : x;
  13. w0 := RQ[62:31];
  14. w1 := w0 - y;
  15. S := run -> S+1 : 0;
  16. quot := ~sign -> RQ[31:0] : (RQ[63:32] = 0) -> -RQ[31:0] : -RQ[31:0] - 1;
  17. rem := ~sign -> RQ[63:32] : (RQ[63:32] = 0) -> 0 : y - RQ[63:32];
  18. RQ := (S = 0) -> {0'32, x0} : {w1.31 -> w0 : w1, RQ[30:0], ~w1[31]}
  19. END Divider.