verilog-PS2键盘.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:6 大小:42KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

verilog-PS2键盘.doc

verilog-PS2键盘.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

verilog的PS2键盘解码之前日志里深入探讨过PS/2键盘编解码以及数据传输协议,这次自己动手实现了利用FPGA接收键盘编码,然后通过串口传输到PC。做的比较简单,只是通过FPGA把大写字母A-Z转换成相应的ASCII码,只要字母按键被按下,就能在串口调试助手里显示相应大写字母。下面就共享代码吧!除了顶层模块,三个底层模块分别为PS/2传输处理模块、串口传输模块以及串口波特率选择模块(下面只给出顶层模块和PS/2传输处理模块的verilog代码,串口部分的可以参考上一篇日志http://blog.ednchina.com/ilove314/153551/Message.aspx)。moduleps2_key(clk,rst_n,ps2k_clk,ps2k_data,rs232_tx);inputclk;//50M时钟信号inputrst_n;//复位信号inputps2k_clk;//PS2接口时钟信号inputps2k_data;//PS2接口数据信号outputrs232_tx;//RS232发送数据信号wire[7:0]ps2_byte;//1byte键值wireps2_state;//按键状态标志位wirebps_start;//接收到数据后,波特率时钟启动信号置位wireclk_bps;//clk_bps的高电平为接收或者发送数据位的中间采样点ps2scanps2scan(.clk(clk),//按键扫描模块.rst_n(rst_n),.ps2k_clk(ps2k_clk),.ps2k_data(ps2k_data),.ps2_byte(ps2_byte),.ps2_state(ps2_state));speed_selectspeed_select(.clk(clk),.rst_n(rst_n),.bps_start(bps_start),.clk_bps(clk_bps));my_uart_txmy_uart_tx(.clk(clk),.rst_n(rst_n),.clk_bps(clk_bps),.rx_data(ps2_byte),.rx_int(ps2_state),.rs232_tx(rs232_tx),.bps_start(bps_start));Endmodulemoduleps2scan(clk,rst_n,ps2k_clk,ps2k_data,ps2_byte,ps2_state);inputclk;//50M时钟信号inputrst_n;//复位信号inputps2k_clk;//PS2接口时钟信号inputps2k_data;//PS2接口数据信号output[7:0]ps2_byte;//1byte键值,只做简单的按键扫描outputps2_state;//键盘当前状态,ps2_state=1表示有键被按下//------------------------------------------regps2k_clk_r0,ps2k_clk_r1,ps2k_clk_r2;//ps2k_clk状态寄存器//wirepos_ps2k_clk;//ps2k_clk上升沿标志位wireneg_ps2k_clk;//ps2k_clk下降沿标志位always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginps2k_clk_r0<=1'b0;ps2k_clk_r1<=1'b0;ps2k_clk_r2<=1'b0;endelsebegin//锁存状态,进行滤波ps2k_clk_r0<=ps2k_clk;ps2k_clk_r1<=ps2k_clk_r0;ps2k_clk_r2<=ps2k_clk_r1;endendassignneg_ps2k_clk=~ps2k_clk_r1&ps2k_clk_r2;//下降沿//------------------------------------------reg[7:0]ps2_byte_r;//PC接收来自PS