PS/2键盘控制器
问题描述
问题在于顶级模块中的ps2_data和ps2_clk两个输入端口,这两个端口本来是需要与nvboard上的PS2_DAT和PS2_CLK相连接的,用于接收从键盘发送来的数据和时钟,但是我进行测试的时候,将两者的输入输出到led灯上,发现无论怎么按键盘,ps2_clk一直是0,ps2_data则刚开始是0,一旦按下键盘上任意一个键,就输出1,且一直是1(当然是1,一旦按下键盘,系统进入从键盘接收信息的模式,自然会阿静其置为0)。
刚刚试了一下,发现忘记还有置位端了;如果打开置位端,发现顶层模块中的counter可以正常计数,但是计数速度有点快了,但是这也说明了ready谁能够正常传出ps2_keyboard模块的。
- 时序处理的不对,根本就不熟悉时序、寄存器,就是不懂时序逻辑电路;
- 不懂ps2的运作原理;
顶级模块(top.v)
我觉得我的顶级模块应该没什么问题了:当时钟上升沿到来的时候,如果ready为1,则将counter加一,这里ready寄存器中的值是由上一个时钟决定的,具体内容在ps2_keyboard模块中。
ps2_keyboard模块
- 对判断时钟下降沿,如果判断成功,则将counter++,如果达到11位,则将其存储到fifo缓冲区中,并令ready为1;
- ready寄存器中的值应该会延迟一个周期,实际传出的是本周期内的值,如果ready上一周期为0,本周期由于采集数据完成,将ready置1,但是实际传出的ready还是0,导致顶级模块中的计数器会延缓一个clk时钟,但是并不影响显示;
其他模块
数码管译码表:
ascii查找表: