-
Notifications
You must be signed in to change notification settings - Fork 19
/
wbmouse.txt
98 lines (98 loc) · 3.07 KB
/
wbmouse.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
################################################################################
##
## Filename: wbmouse.txt
## {{{
## Project: AutoFPGA, a utility for composing FPGA designs from peripherals
##
## Purpose: A description of how to create/modify Verilog files, add or
## subtract them, etc., this one focusing specifically on a
## wishbone controlled mouse.
##
## Creator: Dan Gisselquist, Ph.D.
## Gisselquist Technology, LLC
##
################################################################################
## }}}
## Copyright (C) 2017-2024, Gisselquist Technology, LLC
## {{{
## This program is free software (firmware): you can redistribute it and/or
## modify it under the terms of the GNU General Public License as published
## by the Free Software Foundation, either version 3 of the License, or (at
## your option) any later version.
##
## This program is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with this program. (It's in the $(ROOT)/doc directory. Run make with no
## target there if the PDF file isn't present.) If not, see
## <http://www.gnu.org/licenses/> for a copy.
## }}}
## License: GPL, v3, as defined and found on www.gnu.org,
## {{{
## http://www.gnu.org/licenses/gpl.html
##
################################################################################
##
## }}}
@PREFIX=mous
@NADDR=4
@ACCESS=MOUSE_ACCESS
@SLAVE.TYPE=DOUBLE
@SLAVE.BUS=wb
@RTL.MAKE.GROUP=WBMOUSE
@RTL.MAKE.FILES=wbmouse.v llps2.v
@INT.MOUSE.WIRE= mous_interrupt
@INT.MOUSE.PIC= buspic syspic
@TOP.PORTLIST=
// The PS/2 Mouse
io_ps2_clk, io_ps2_data
@TOP.IODECL=
inout wire io_ps2_clk, io_ps2_data;
@TOP.DEFNS=
wire [1:0] w_ps2;
@TOP.MAIN=
// The PS/2 Mouse
{ io_ps2_clk, io_ps2_data }, w_ps2
@TOP.INSERT=
// WB-Mouse
//
// Adjustments necessary to turn the PS/2 logic to pull-up logic,
// with a high impedence state if not used.
assign io_ps2_clk = (w_ps2[1])? 1'bz:1'b0;
assign io_ps2_data = (w_ps2[0])? 1'bz:1'b0;
@MAIN.PORTLIST=
// The PS/2 Mouse
i_ps2, o_ps2
@MAIN.IODECL=
// The PS/2 Mouse
input [1:0] i_ps2;
output wire [1:0] o_ps2;
@MAIN.DEFNS=
// scrn_mouse is a 32-bit field containing 16-bits of x-position and
// 16-bits of y position, limited to the size of the screen.
wire [31:0] scrn_mouse;
@MAIN.INSERT=
wbmouse themouse(i_clk,
@$(SLAVE.PORTLIST),
i_ps2, o_ps2,
scrn_mouse, mous_interrupt);
@MAIN.ALT=
// If there is no mouse, declare mouse types of things to be .. absent
assign scrn_mouse = 32'h00;
assign o_ps2 = 2'b11;
@REGS.N=4
@REGS.0= 0 R_MOUSE_STAT MSTAT
@REGS.1= 1 R_MOUSE_RAW MRAW
@REGS.2= 2 R_SCRN_MOUSE MOUSE
@REGS.3= 3 R_SCRN_SIZE MSIZ
@BDEF.DEFN=
// Mouse definitions
typedef struct WBMOUSE_S {
unsigned m_bus, m_raw, m_screen, m_size;
} WBMOUSE;
@BDEF.IOTYPE=WBMOUSE
@BDEF.OSDEF=_BOARD_HAS_WBMOUSE
@BDEF.OSVAL=static volatile @$.BDEF.IOTYPE *const _mouse = ((@$.BDEF.IOTYPE *)@$.REGBASE);