简要的分析一下原理:
键盘采用的是PS2协议
clkin信号是检测键盘是否按下的,rst是复位信号
所以
always @(posedge clkin)
begin
if(!rst) clk1 <= kbclk;
else begin
clk1 <= 1;
end
end
input clkin, kbdata, kbclk; //分别是键盘同步脉冲,键盘按下的数据和键盘被按下发出的脉冲
PS/2鼠标和键盘履行一种双向同步串行协议
换句话说,每次数据线上发送一位数据并且每在时钟线上发一个脉冲就被读入
每位在时钟的下降沿被主机读入
在这个实验中
kbdata
是00111100011
注意是高位在前
每次在时钟的上升沿存入数据,在时钟的下降沿写入数据

经过我的分析,上面那个波形是kbclk,下面那个是kbdata
always @(posedge clkin)
begin
if(!rst) clk1 <= kbclk;
else begin
clk1 <= 1;
end
end
如果复位信号没有被按下,clk1就是kbclk
always @(negedge clk1)
begin
m[9:0] <= {kbdata, s[8:1]};
end
always @(posedge clk1)
begin
s <= m;
end
通过kbclk去读取kbdata的数据,下降沿写入,上升沿存起来,然后不断地移位
就像这样不断地移位

最后判断一下是不是3
always @(q)
begin
if(s[7:0] == 8'b0001110)
begin
jgout <= 4'b1010;
q = 1;
end
else begin
jgout <= 4'b1011;
q = 0;
end
end
至于最后的实验任务,就是将输入和判断修改一下就行了


这样就能圆满的完成任务了
网友评论