MouseX.v.html 957 B

12345678910111213141516171819202122232425262728
  1. `timescale 1ns / 1ps
  2. // N.Wirth 10.10.2012
  3. module MouseX(
  4. input clk,
  5. input [6:0] in,
  6. output [27:0] out);
  7. reg x00, x01, x10, x11, y00, y01, y10, y11;
  8. reg ML, MM, MR; // keys
  9. reg [9:0] x, y; // counters
  10. wire xup, xdn, yup, ydn;
  11. assign xup = ~x00&~x01&~x10&x11 | ~x00&x01&x10&x11 | x00&~x01&~x10&~x11 | x00&x01&x10&~x11;
  12. assign yup = ~y00&~y01&~y10&y11 | ~y00&y01&y10&y11 | y00&~y01&~y10&~y11 | y00&y01&y10&~y11;
  13. assign xdn = ~x00&~x01&x10&~x11 | ~x00&x01&~x10&~x11 | x00&~x01&x10&x11 | x00&x01&~x10&x11;
  14. assign ydn = ~y00&~y01&y10&~y11 | ~y00&y01&~y10&~y11 | y00&~y01&y10&y11 | y00&y01&~y10&y11;
  15. assign out = {1'b0, ML, MM, MR, 2'b0, y, 2'b0, x};
  16. always @ (posedge clk) begin
  17. x00 <= in[3]; x01 <= x00; x10 <= in[2]; x11 <= x10;
  18. y00 <= in[1]; y01 <= y00; y10 <= in[0]; y11 <= y10;
  19. MR <= ~in[4]; MM <= ~in[5]; ML <= ~in[6];
  20. x <= xup ? x+1 : xdn ? x-1 : x;
  21. y <= yup ? y+1 : ydn ? y-1 : y;
  22. end
  23. endmodule