mirror of https://github.com/zxdos/zxuno.git
83 lines
2.3 KiB
Verilog
83 lines
2.3 KiB
Verilog
`timescale 1ns / 1ps
|
|
`default_nettype none
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
// Company:
|
|
// Engineer:
|
|
//
|
|
// Create Date: 18:52:22 06/30/2015
|
|
// Design Name:
|
|
// Module Name: ps2mouse_to_kmouse
|
|
// Project Name:
|
|
// Target Devices:
|
|
// Tool versions:
|
|
// Description:
|
|
//
|
|
// Dependencies:
|
|
//
|
|
// Revision:
|
|
// Revision 0.01 - File Created
|
|
// Additional Comments:
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////////
|
|
module ps2mouse_to_kmouse (
|
|
input wire clk,
|
|
input wire rst_n,
|
|
input wire [7:0] data,
|
|
input wire data_valid,
|
|
output reg [7:0] kmouse_x,
|
|
output reg [7:0] kmouse_y,
|
|
output reg [7:0] kmouse_buttons
|
|
);
|
|
|
|
parameter FIRST_FRAME = 2'd0,
|
|
SECOND_FRAME = 2'd1,
|
|
THIRD_FRAME = 2'd2,
|
|
CALCULATE_NEWXY = 2'd3;
|
|
|
|
initial begin
|
|
kmouse_x = 8'h00;
|
|
kmouse_y = 8'h00;
|
|
kmouse_buttons = 8'hFF;
|
|
end
|
|
|
|
reg [7:0] deltax, deltay;
|
|
reg [1:0] state = FIRST_FRAME;
|
|
|
|
always @(posedge clk) begin
|
|
if (rst_n == 1'b0) begin
|
|
kmouse_x <= 8'h00;
|
|
kmouse_y <= 8'h00;
|
|
kmouse_buttons <= 8'hFF;
|
|
state <= FIRST_FRAME;
|
|
end
|
|
else begin
|
|
case (state)
|
|
FIRST_FRAME:
|
|
if (data_valid == 1'b1) begin
|
|
if (data[3] == 1'b1) begin
|
|
kmouse_buttons <= {5'b11111,~data[2],~data[0],~data[1]};
|
|
state <= SECOND_FRAME;
|
|
end
|
|
end
|
|
SECOND_FRAME:
|
|
if (data_valid == 1'b1) begin
|
|
deltax <= data;
|
|
state <= THIRD_FRAME;
|
|
end
|
|
THIRD_FRAME:
|
|
if (data_valid == 1'b1) begin
|
|
deltay <= data;
|
|
state <= CALCULATE_NEWXY;
|
|
end
|
|
CALCULATE_NEWXY:
|
|
begin
|
|
kmouse_x <= kmouse_x + deltax;
|
|
kmouse_y <= kmouse_y + deltay;
|
|
state <= FIRST_FRAME;
|
|
end
|
|
endcase
|
|
end
|
|
end
|
|
endmodule
|