feat(board): 板载 USB HID 口接 PS/2 鼠标,与板载按键并存

Nexys4DDR 的 USB HOST 口由板上芯片把 USB 键鼠转成 PS/2 信号(官方母版
Nexys4DDR_Master.xdc 标明 ps2_clk = F4、ps2_data = B2),所以不用写 USB 协议栈。

- cpu21_board_top.v:
  * USE_PS2_MOUSE 默认打开;原来是 if/else 二选一(选鼠标就没按键),现在
    cpu21_pointer 与 cpu21_ps2_mouse 同时例化,两路事件在顶层合并成 ev_valid/
    ev_dx/ev_dy/ev_btn(同拍优先 PS/2),板载按键一个不删
  * 新增 DEBUG_PS2_RX_LED(默认 1):把 PS/2 收到的字节数显示到 LED[15:3]
    (LED[2:0] 仍是中断指示)。没有调试器时靠它判断 PS/2 到底有没有数据:
    鼠标一动数字就跳 = 通了;一直是 0 = 根本没收到
- cpu21_board_top.xdc:ps2_clk/ps2_data 从 Pmod JA(C17/D18)改到板载 USB HID
  (F4/B2),并在注释里留了改回 Pmod 的方法

软件侧不用改:鼠标事件与按键事件格式相同,且 PS/2 的 dx/dy 天然满足
"8 个计数 = 一格"(saolei.c 里就是 acc_x += dx; while (acc_x >= 8) 移动一格)。
额外好处:鼠标右键 = 插旗(handle_event 本来就支持)。
This commit is contained in:
2026-09-23 21:50:18 +08:00
parent 64428bdd85
commit 77dd102675
2 changed files with 55 additions and 23 deletions
@@ -97,6 +97,9 @@ set_property -dict { PACKAGE_PIN D8 IOSTANDARD LVCMOS33 } [get_ports { vga_b[
set_property -dict { PACKAGE_PIN B11 IOSTANDARD LVCMOS33 } [get_ports { vga_hs }]
set_property -dict { PACKAGE_PIN B12 IOSTANDARD LVCMOS33 } [get_ports { vga_vs }]
## PS/2 鼠标(可选:Pmod JA 插 Pmod PS2,顶层 USE_PS2_MOUSE=1)
set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 PULLUP true } [get_ports { ps2_clk }]
set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 PULLUP true } [get_ports { ps2_data }]
## PS/2 鼠标:接**板载 USB HID 口**(板上芯片把 USB 键鼠转成 PS/2)
## Nexys4DDR_Master.xdc 里写明:ps2_clk = F4、ps2_data = B2
## 顶层参数 USE_PS2_MOUSE=1 启用;板载按键仍然可用(两路事件在顶层合并)
## 若改用 Pmod JA 上的 Pmod PS2,把下面两行的引脚换成 C17 / D18 即可
set_property -dict { PACKAGE_PIN F4 IOSTANDARD LVCMOS33 PULLUP true } [get_ports { ps2_clk }]
set_property -dict { PACKAGE_PIN B2 IOSTANDARD LVCMOS33 PULLUP true } [get_ports { ps2_data }]