3375|1

6892

帖子

0

TA的资源

五彩晶圆(高级)

楼主
 

Verilog 模拟 PS2 [复制链接]

 

1.明确接线关系,只需接4根线,VCC要 5V,3.3我测试过不能用,时钟和数据线要用bidir双向口线,FPGA可以不用外接上拉电阻。另外,USB键盘也可以用,只要用一个转接头转成PS2即可。
Verilog模拟PS2协议 
2.读取基本的键盘数据,不需要FPGA发送任何数据,只需读取键盘发回来的数据即可
如下面的时序图,每次键盘发送11个clock信号,我们需要做的事情就是在时钟的下降沿读取数据
Verilog模拟PS2协议 
3.如何来采样CLK低电平?
这里可以用一个FIFO来储存数据,如下面的程序,当ps2_clk信号处于下降沿时,ps2_clk_fallingedge值将被置高

reg [2:0] ps2_clkr;//用一个fifo来采样ps2_clk信号;
always @(posedge clk)
ps2_clkr <= {ps2_clkr[1:0], ps2_clk};

wire ps2_clk_risingedge = (ps2_clkr[2:1]==2'b01); // now we can detect ps2_clk rising edges
wire ps2_clk_fallingedge = (ps2_clkr[2:1]==2'b10); // and falling edges

4.当检测到第一个低电平时,我们只需要连续读取11个周期值就可以了,这里用一个变量i来控制

always @(posedge clk)
if(rst)
i <= 0;
else
begin
if(ps2_clk_fallingedge)
begin
data2 <= data;
data <= ps2_data;
if(i<10) i <= i 1;
else i <= 0;
end
end

最后来解释下这11个数据的功能,如下表
Verilog模拟PS2协议 
5.如果想进一步区分键值,就需要查表了,如下表
Verilog模拟PS2协议 
基本按键,键盘会发送“F0” “键码”
扩展按键,则发送“E0” “F0” “键码”
大家都来试一下吧,一个下午就能搞定!

附程序,晶振频率降至1MHz,用LED输出键值
//==============================================================
module ps2(clk, rst, ps2_clk, ps2_data, data ,data2);

input clk, rst, ps2_clk , ps2_data;
output [10:0] data;
output [10:0] data2;

reg [3:0] i;
reg [10:0] data;//another fifo
reg [10:0] data2;

reg [2:0] ps2_clkr;//用一个fifo来采样ps2_clk信号;
always @(posedge clk)
ps2_clkr <= {ps2_clkr[1:0], ps2_clk};

wire ps2_clk_risingedge = (ps2_clkr[2:1]==2'b01); // now we can detect ps2_clk rising edges
wire ps2_clk_fallingedge = (ps2_clkr[2:1]==2'b10); // and falling edges

always @(posedge clk)
if(rst)
i <= 0;
else
begin
if(ps2_clk_fallingedge)
begin
data2 <= data;
data <= ps2_data;
if(i<10) i <= i 1;
else i <= 0;
end
end

endmodule
//========================================================

此帖出自FPGA/CPLD论坛

最新回复

不错……  详情 回复 发表于 2011-2-23 18:31
点赞 关注
 

回复
举报

255

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
不错……
此帖出自FPGA/CPLD论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表