⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2.v

📁 Viertex 2 开发板的接口程序
💻 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 + -