📄 ps2.v
字号:
// XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"
// SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR
// XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION
// AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION
// OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS
// IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,
// AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE
// FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY
// WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE
// IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR
// REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF
// INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE.
//
// (c) Copyright 2004 Xilinx, Inc.
// All rights reserved.
//
/*
-------------------------------------------------------------------------------
Title : PS/2 keyboard and mouse interface
Project : XUP Virtex-II Pro Development System
-------------------------------------------------------------------------------
File : PS2.v
Company : Xilinx, Inc.
Created : 2004/08/12
Last Update: 2005/01/26
Copyright : (c) Xilinx Inc, 2005
-------------------------------------------------------------------------------
Uses :
-------------------------------------------------------------------------------
Used by : HW_BIST.v
-------------------------------------------------------------------------------
Description: A keyboard is connected to the two PS/2 ports and the ASCII
characters are displayed on the SVGA monitor.
The PS/2 interface was obtained from OPENCORES.ORG.
Jan 26 2005: Added support for simplified PS2 manufacturing test
Conventions:
All external port signals are UPPER CASE.
All internal signals are LOWER CASE and are active HIGH.
-------------------------------------------------------------------------------
*/
module PS2
(
clock,
reset,
PS2_KBD_CLK,
PS2_KBD_DATA,
ps2_kbd_ascii,
PS2_MOUSE_CLK,
PS2_MOUSE_DATA,
ps2_mouse_ascii,
PS2_M_CLK_IN,
PS2_K_CLK_IN,
PS2_M_DATA_IN,
PS2_K_DATA_IN,
TST_PS2,
PS2_M_CLK_OUT,
PS2_K_CLK_OUT,
PS2_M_DATA_OUT,
PS2_K_DATA_OUT
);
input clock;
input reset;
inout PS2_KBD_CLK;
inout PS2_KBD_DATA;
output [7:0] ps2_kbd_ascii;
inout PS2_MOUSE_CLK;
inout PS2_MOUSE_DATA;
output [7:0] ps2_mouse_ascii;
output PS2_M_CLK_IN; // data returned on the MOUSE CLOCK net
output PS2_K_CLK_IN; // data returned on the KEYBOARD CLOCK net
output PS2_M_DATA_IN; // data returned on the MOUSE DATA net
output PS2_K_DATA_IN; // data returned on the KEYBOARD DATA net
input TST_PS2; // flag to enable the test mode of the PS2 ports
input PS2_M_CLK_OUT; // data to drive out on the MOUSE CLOCK net
input PS2_K_CLK_OUT; // data to drive out on the KEYBOARD CLOCK net
input PS2_M_DATA_OUT; // data to drive out on the MOUSE DATA net
input PS2_K_DATA_OUT; // data to drive out on the KEYBOARD DATA net
// internal PS/2 interface signals
wire [7:0] ps2_mouse_scan_code;
wire [7:0] ps2_mouse_ascii;
wire [7:0] ps2_mouse_status;
wire ps2_mouse_key_data_ready;
wire ps2_mouse_key_released;
wire ps2_mouse_key_pressed = ~ps2_mouse_key_released;
wire [7:0] ps2_kbd_scan_code;
wire [7:0] ps2_kbd_ascii;
wire [7:0] ps2_kbd_status;
wire ps2_kbd_key_data_ready;
wire ps2_kbd_key_released;
wire ps2_kbd_key_pressed = ~ps2_mouse_key_released;
wire PS2_M_CLK_IN;
wire PS2_K_CLK_IN;
wire PS2_M_DATA_IN;
wire PS2_K_DATA_IN;
wire TST_PS2;
wire PS2_M_CLK_OUT;
wire PS2_K_CLK_OUT;
wire PS2_M_DATA_OUT;
wire PS2_K_DATA_OUT;
// the PS2 interface
ps2_keyboard_interface ps2_keyboard_interface (
.clk(clock),
.reset(reset),
.ps2_clk(PS2_KBD_CLK),
.ps2_data(PS2_KBD_DATA),
.rx_extended(ps2_kbd_status[5]),
.rx_released(ps2_kbd_key_released),
.rx_shift_key_on(ps2_kbd_status[7]),
.rx_scan_code(ps2_kbd_scan_code),
.rx_ascii(ps2_kbd_ascii),
.rx_data_ready(ps2_kbd_key_data_ready),
.rx_read(ps2_kbd_key_data_ready),
.tx_data(8'hFF),
.tx_write(1'b0),
.tx_write_ack_o(ps2_kbd_tx_write_ack_o),
.tx_error_no_keyboard_ack(ps2_kbd_status[4]),
// added for simplified manufacturing test
.tst_clk_in (PS2_K_CLK_IN),
.tst_data_in (PS2_K_DATA_IN),
.tst_enable (TST_PS2),
.tst_clk_out (PS2_K_CLK_OUT),
.tst_data_out (PS2_K_DATA_OUT)
);
ps2_keyboard_interface ps2_mouse_interface (
.clk(clock),
.reset(reset),
.ps2_clk(PS2_MOUSE_CLK),
.ps2_data(PS2_MOUSE_DATA),
.rx_extended(ps2_mouse_status[5]),
.rx_released(ps2_mouse_key_released),
.rx_shift_key_on(ps2_mouse_status[7]),
.rx_scan_code(ps2_mouse_scan_code),
.rx_ascii(ps2_mouse_ascii),
.rx_data_ready(ps2_mouse_key_data_ready),
.rx_read(ps2_mouse_key_data_ready),
.tx_data(8'hFF),
.tx_write(1'b0),
.tx_write_ack_o(ps2_mouse_tx_write_ack_o),
.tx_error_no_keyboard_ack(ps2_mouse_status[4]),
// added for simplified manufacturing test
.tst_clk_in (PS2_M_CLK_IN),
.tst_data_in (PS2_M_DATA_IN),
.tst_enable (TST_PS2),
.tst_clk_out (PS2_M_CLK_OUT),
.tst_data_out (PS2_M_DATA_OUT)
);
assign ps2_mouse_status[6] = ps2_mouse_key_released;
assign ps2_kbd_status[6] = ps2_kbd_key_released;
endmodule //PS2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -