11
实验一
简单的 PS2 接口设计
一、实验目的:
1. 掌握 PS2 接口的工作原理。
2.掌握简单 PS2 接口设计的方法。
二、实验任务
实现简单的 PS2 接口
三、实验原理
在了解 PS2 接口的原理之前,首先需要明确接 1 、 PS2 接口连接器线关系:
PS2 接口的引脚定义如下 ( 一共接四根线,一 根接地,一根接 VCC5.0 伏,还有两根做为 键盘数据以及时钟线 )
33
22 、、 PS2PS2 接口从键盘接收数据的工作原理接口从键盘接收数据的工作原理
PCPC 键盘采用键盘采用 22 -线-线 PS/2PS/2 串行总线与主机进行串行总线与主机进行 通信,本入门实验板就属于此种情况。
通信,本入门实验板就属于此种情况。 PS/2PS/2 总线包括时钟和数据线。键盘通过识别信号的 总线包括时钟和数据线。键盘通过识别信号的
时序来驱动总线,它采用
时序来驱动总线,它采用 1111 位的字包括一个起位的字包括一个起 始位、停止位和奇检验位。依次分别为起始位 始位、停止位和奇检验位。依次分别为起始位
、八位数据位(低位在前)、奇偶校验位、停
、八位数据位(低位在前)、奇偶校验位、停 止位。止位。
简单简单 PS2PS2 接口只需实现单键接收,无需接口只需实现单键接收,无需 检测是否有组合键产生,也无需实现主机 检测是否有组合键产生,也无需实现主机
与键盘的双向通信。故我们只需从键盘读 与键盘的双向通信。故我们只需从键盘读
取相关数据即可,无需向键盘发送数据。
取相关数据即可,无需向键盘发送数据。
注:向键盘发送数据是向键盘发送控制信注:向键盘发送数据是向键盘发送控制信 号,比如点亮键盘三盏指示灯。
号,比如点亮键盘三盏指示灯。
55
下图说明了
下图说明了 PS/2PS/2 总线的时序。只有当数总线的时序。只有当数 据转换发生时,时钟和数据信号才被驱 据转换发生时,时钟和数据信号才被驱 动,否则,它们以高电平的形式处于空 动,否则,它们以高电平的形式处于空
闲状态,时序定义了键盘与主机的通信。
闲状态,时序定义了键盘与主机的通信。
当时钟信号是高电平时,敲击键盘就会 当时钟信号是高电平时,敲击键盘就会
往数据线写
往数据线写 11 位字,在时钟低电平时,位字,在时钟低电平时,
主机主机 PCPC 读该数据线。读该数据线。
如上图所示,要读取键盘发送的数据,主机 只需在时钟的下降沿读取数据,并且连续读 取 11 次即可。
77
3 3 、 、 verilog verilog 实现 实现 可以用一个
可以用一个 FIFO FIFO 在实现监测时钟线下降沿 在实现监测时钟线下降沿 的功能: 的功能:
always @(posedge clk)
ps2_clkr <= {ps2_clkr[1:0], ps2_clk};
wire ps2_clk_risingedge=(ps2_clkr[2:1]==2'b01);
wire ps2_clk_fallingedge=(ps2_clkr[2:1]==2'b10);
在监测到一个下降沿时,连续读取
在监测到一个下降沿时,连续读取 1111 次数据线,次数据线,
实现从键盘接收按键扫描码的功能:
实现从键盘接收按键扫描码的功能:
always @(posedge clk) if(rst)
i <= 0;
else begin
if(ps2_clk_fallingedge) begin data2[i] <= data[i];
data[i] <= ps2_data;
if(i<10)
i <= i+1;
else i <= 0;
end end
99
4 4 、如何区分键盘是按下何健 、如何区分键盘是按下何健
键盘的处理器花费很多的时间来扫描或监视按 键盘的处理器花费很多的时间来扫描或监视按
键矩阵,如果它发现有键被按下释放或按 键矩阵,如果它发现有键被按下释放或按
住键盘将发送扫描码的信息包到计算机。
住键盘将发送扫描码的信息包到计算机。
扫描码有两种不同的类型通码和断码:当一个 扫描码有两种不同的类型通码和断码:当一个
键被按下或按住就发送通码,当一个键被 键被按下或按住就发送通码,当一个键被
释放就发送断码。每个按键被分配了唯一 释放就发送断码。每个按键被分配了唯一
的通码和断码这样主机通过查找唯一的扫 的通码和断码这样主机通过查找唯一的扫
描码就可以测定是哪个按键。
描码就可以测定是哪个按键。
每个键一整套的通断码组成了扫描码集,该集 每个键一整套的通断码组成了扫描码集,该集
即用来通过通断码查询所按是何健。
即用来通过通断码查询所按是何健。
以下为第二套扫描码集通码和断码示例:
以下为第二套扫描码集通码和断码示例:
比如键盘按下’
比如键盘按下’ A’A’ 键,则主机先后收到键,则主机先后收到 1C1C
、、 F0F0 、、 1C1C 三个数据包三个数据包
1111
55 、现代键盘扫描码集、现代键盘扫描码集
注意:在创建工程时,
注意:在创建工程时, spartan-3espartan-3e 板与板与 spsp artan-3
artan-3 开发板不一样,配置单如下:开发板不一样,配置单如下:
1313
另外,再将综合结果下载到实验板上验证实 另外,再将综合结果下载到实验板上验证实 现设计时,可能会发生不成功的情况,可 现设计时,可能会发生不成功的情况,可 右键单击右键单击 xilinxxilinx 中中 ProcessesProcesses 面板中的面板中的 GenGen
erate Programming File
erate Programming File ,对属性,对属性 PropertiePropertie ss 中作如下修改:中作如下修改:
实验内容实验内容
实现实现 SPARTAN3ESPARTAN3E 实验板对键盘单键输入的实验板对键盘单键输入的 接收接收 , , 并将接收到的键盘扫描码用并将接收到的键盘扫描码用 88 位位 ledled
灯显示输出 灯显示输出 ..
注注 :: 扫描码可参照实验原理扫描码可参照实验原理 (( 课本课本 P63)P63)
1515
UCFUCF 声明声明
// // 键盘输出时钟与数据线键盘输出时钟与数据线
NET “ps2_clk” LOC=“G14”;NET “ps2_clk” LOC=“G14”;
NET “ps2_data” LOC=“G13”;NET “ps2_data” LOC=“G13”;
//// 主板时钟与复位键主板时钟与复位键
NET “clk” LOC=“C9”;NET “clk” LOC=“C9”;
NET “rst” LOC=“K17”;NET “rst” LOC=“K17”;
UCFUCF 声明声明
//Led
//Led 显示通码数据显示通码数据
NET”data2[1]” LOC=“F12”;NET”data2[1]” LOC=“F12”;
NET”data2[2]” LOC=“E12”;NET”data2[2]” LOC=“E12”;
NET”data2[3]” LOC=“E11”;NET”data2[3]” LOC=“E11”;
NET”data2[4]” LOC=“F11”;NET”data2[4]” LOC=“F11”;
NET”data2[5]” LOC=“C11”;NET”data2[5]” LOC=“C11”;
NET”data2[6]” LOC=“D11”;NET”data2[6]” LOC=“D11”;
NET”data2[7]” LOC=“E9”;NET”data2[7]” LOC=“E9”;
NET”data2[8]” LOC=“F9”;NET”data2[8]” LOC=“F9”;