VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程)

作者:akuei2

说明:参照该书将部分程序验证学习一遍

学习时间:2014年5月3号

主要收获:

1. 对PS2接口有初步了解;

2. 编码键盘和非编码键盘;

3. 通码和断码。

PS2相关知识:

1. PS2接口

2. PS2协议对数据的读取,是"下降沿有效"。数据总共有11位,起始位(1)、数据位(8)、奇偶校验位(1)和停止位(1)。

3. 编码键盘与非编码键盘

编码键盘本身带有实现接口主要功能所需的硬件电路,不仅能自动栓测被按下的键并完成去抖动防串键等功能,而且能提供与被按键功能对应的键码(如ASCⅡ码)送往CPU;非编码键盘只简单的提供按键开关的行列矩阵,有关键的识别,键码的输入与确定,以及去抖动等功能场由软件完成。

4. 通码和断码

①通码:按下某按键;

②断码:释放某按键。

当按下按键"A"的时候,就会每秒产生大约10个通码"0X1C";在释放的时候,就会产生断码"0XF0 0X1C"。

5. RTL原理图

6. 电平检测模块detect_module和PS2解码模块ps2_detect_module

电平检测模块detect_module

module detect_module

(

CLK, RSTn,

PS2_CLK_Pin_In,

H2L_Sig

);

input CLK;

input RSTn;

input PS2_CLK_Pin_In;

output H2L_Sig;

/**************************/

reg H2L_F1;

reg H2L_F2;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

begin

H2L_F1 <= 1'b1;

H2L_F2 <= 1'b1;

end

else

begin

H2L_F1 <= PS2_CLK_Pin_In;

H2L_F2 <= H2L_F1;

end

/****************************/

assign H2L_Sig = H2L_F2 & !H2L_F1;

/****************************/

endmodule

PS2解码模块ps2_detect_module

module ps2_decode_module

(

CLK, RSTn,

H2L_Sig, PS2_Data_Pin_In,

PS2_Data, PS2_Done_Sig

);

input CLK;

input RSTn;

input H2L_Sig;

input PS2_Data_Pin_In;

output [7:0]PS2_Data;

output PS2_Done_Sig;

/*******************************/

reg [7:0]rData;

reg [4:0]i;

reg isShift;

reg isDone;

always @ ( posedge CLK or negedge RSTn )

if( !RSTn )

begin

rData <= 8'd0;

i <= 5'd0;

isDone <= 1'b0;

end

else

case( i )

5'd0:

if( H2L_Sig ) i <= i + 1'b1;

4'd1, 4'd2, 4'd3, 4'd4, 4'd5, 4'd6, 4'd7, 4'd8:

if( H2L_Sig ) begin i <= i + 1'b1; rData[ i-1 ] <= PS2_Data_Pin_In; end

5'd9, 5'd10:

if( H2L_Sig ) i <= i + 1'b1;

5'd11:

if( rData == 8'hf0 ) i <= 5'd12;

else i <= 5'd23;

5'd12, 5'd13, 5'd14, 5'd15, 5'd16, 5'd17, 5'd18, 5'd19, 5'd20, 5'd21, 5'd22:

if( H2L_Sig ) i <= i + 1'b1;

5'd23:

begin i <= i + 1'b1; isDone <= 1'b1; end

5'd24:

begin i <= 5'd0; isDone <= 1'b0; end

endcase

/************************************/

assign PS2_Data = rData;

assign PS2_Done_Sig = isDone;

/*************************************/

endmodule

FPGA PS2协议的更多相关文章

  1. 千兆以太网TCP协议的FPGA实现

    转自https://blog.csdn.net/zhipao6108/article/details/82386355 千兆以太网TCP协议的FPGA实现 Lzx 2017/4/20 写在前面,这应该 ...

  2. 第十六章 IIC协议详解+UART串口读写EEPROM

    十六.IIC协议详解+Uart串口读写EEPROM 本文由杭电网友曾凯峰根据小梅哥FPGA IIC协议基本概念公开课内容整理并最终编写Verilog代码实现使用串口读写EEPROM的功能. 以下为原文 ...

  3. 应聘linux/ARM嵌入式开发岗位

    **************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...

  4. Verilog HDL那些事_建模篇笔记(实验八:键盘解码)

    1.PS2接口与协议时序图 对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据.PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右. ...

  5. FPGA作为从机与STM32进行SPI协议通信---Verilog实现 [转]

    一.SPI协议简要介绍 SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用 ...

  6. FPGA设计千兆以太网MAC(2)——以太网协议及设计规划

    上篇该系列博文中通过MDIO接口实现了PHY芯片的状态检测,验证其已处于1000M 全双工工作模式.在设计MAC逻辑之前,要先清楚MAC与PHY之间的接口以及以太网协议细节,这样才能保证网络的兼容性. ...

  7. 基于FPGA的UART协议实现(通过线性序列机)

    //////////////////2018/10/15 更新源代码: 实现uart这东西其实早就写了,不过不太完善,对于一个完美主义者来说,必须解决掉它. 1.什么是UART?        通用异 ...

  8. SATA主机协议的FPGA实现之物理层设计

    SATA主机协议的FPGA实现之物理层设计   接上一篇文章,这里讲解SATA主机协议的物理层的实现过程. 下图是标准SATA协议文档中给出的物理层结构.可以看到它包含控制模块.时钟数据提取单元.同步 ...

  9. SATA主机协议的FPGA实现之准备工作

    SATA主机协议的FPGA实现之准备工作   从2月中旬准备开始,经过3个月的奋战,我的又一个项目--基于FPGA的固态硬盘读写控制电路,已经基本实现.由于实用资料的匮乏,以及项目本身颇具挑战性,这个 ...

随机推荐

  1. model的基础操作

    1.创建表 1.1 Meta源信息 from django.db import models class UserInfo(models.Model): username = models.CharF ...

  2. Java_基础(一)

    注释 单行注释: // 多行注释: /*开头, */结尾, 可跨行, 可嵌入 public static void main(String[] args/* 哈哈 */) 文档注释: /** 开头, ...

  3. c#中简单工厂模式

    运算类 public class yunsuan { public static operation create(string operate) { operation oper = null; s ...

  4. JavaSE基础语法学习-流程控制

    流程控制 用户交互Scanner Scanner**对象** 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner(System.in); 接下来我们演示一个最 ...

  5. 为什么重写 equals() 方法,一定要重写 hashCode() 呢?| HashMap

    微信搜索「码农田小齐」,关注这个在纽约的程序媛,回复「01-05」可以获取计算机精选书籍.个人刷题笔记.大厂面经.面试资料等资源,么么哒- 首先我们有一个假设:任何两个 object 的 hashCo ...

  6. JavaScript学习笔记整理

    <script></script>写在<head></head>或者<body></body>中效果一样.一般写在head中或者 ...

  7. nginx&http 第三章 ngx http ngx_http_process_request_headers

    HTTP 请求行正确处理完成后,针对 HTTP/1.0 及以上版本紧接着要做的就是请求 HEADER 的处理与解析了 /** * 用于处理http的header数据 * 请求头: * Host: lo ...

  8. linux的别名(alias/unalias)

    linux中有别名时先找的别名后找命令文件 临时创建是直接用alias. [root@localhost ~]# alias ls=pwd [root@localhost ~]# ls /root 其 ...

  9. 04、MyBatis DynamicSQL(Mybatis动态SQL)

    1.动态SQL简介 动态 SQL是MyBatis强大特性之一. 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似. MyBatis 采用功能强大的基于 OGNL 的表达式来 ...

  10. 一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

    摘要:近日,华为云数据库业务总裁苏光牛在ACMUG中国MySQL用户组主办的 "华为云专场" 技术沙龙中分享了华为云数据库重磅新品GaussDB的核心能力与竞争优势.那么, Gau ...