PS2.Lola.txt 706 B

12345678910111213141516171819202122232425
  1. MODULE PS2 (
  2. IN clk, rst, done: BIT;
  3. OUT rdy, shift: BIT;
  4. OUT data: BYTE;
  5. IN PS2C, PS2D: BIT);
  6. REG (clk)
  7. Q0, Q1: BIT; (*synchronizer and falling edge detector*)
  8. shreg: [11] BIT;
  9. inptr, outptr: [4] BIT;
  10. fifo: [16] BYTE;
  11. VAR endbit: BIT;
  12. BEGIN endbit := ~shreg.0; (*start bit reached correct pos*)
  13. shift := Q1 & ~Q0;
  14. Q0 := PS2C; Q1 := Q0;
  15. data := fifo[outptr];
  16. rdy := (inptr # outptr);
  17. shreg := (~rst | endbit) -> 7FFH'11:
  18. shift -> {PS2D, shreg[10:1]} : shreg;
  19. outptr := ~rst -> 0 : rdy & done -> outptr + 1 : outptr;
  20. inptr := ~rst -> 0 : endbit -> inptr + 1 : inptr;
  21. fifo[inptr] := endbit -> shreg[8:1] : fifo[inptr];
  22. END PS2.