Verilog HDL那些事_建模篇笔记(实验八:键盘解码)
1.PS2接口与协议时序图
对于PS2的接口来说,需要额外关注的是PIN5与PIN1,一个是时钟,一个是数据。PS2协议对数据的移位是“CLOCK下降沿”有效,其CLOCK的频率通常在10KHz左右。每当CLOCK的下降沿到来时,发送一位数据。


协议时序图
传输数据定义表
|
第N位 |
属性 |
|
0 |
开始位 |
|
1~8 |
数据位 |
|
9 |
校验位 |
|
10 |
结束位 |
要想获得键盘的数据,我们只需要关注(1~8)数据位,其余的位可以忽略,但程序中要给出相应的处理。
2.电平检测模块
下面对PS2解码过程建模,本模型有两个输入,PS2的时钟信号输入与PS2的数据输入。其中电平检测模块用于检测PS2的“下降沿”,当下降沿到来时,使能PS2解码模块,解码模块对输入的每一帧数据进行解码,最后将解码后的数据输出,并产生一个解码完成信号。


以上为检测下降沿到来的always块语句。对于电平检测模块的编写一般遵循以下技巧:设定两个reg型变量,一个用来接收新的时钟周期传进来的电平信号,另外一个用来存储上一个时钟周期的电平信号。即:
H2L_F1 <= PS2_CLK_Pin_In;
H2L_F2 <= H2L_F1;
其中需要说明的是,以上两个语句采用的是非阻塞式赋值,非阻塞式赋值语句是在整个模块结束之际才完成赋值操作。
位于begin/end块内的多条非阻塞式赋值语句是并行执行的,这些非阻塞赋值语句都会在其中任何一条语句执行完成之前开始执行。这是硬件电路的特点,因为实际的逻辑门电路都是独立工作的,而不是等到其他门电路运转结束之后自己才开始运转。
因此,第一条赋值语句并不会立刻改变H2L_F1的值。而是H2L_F1与H2L_F2的值是同时刷新的。
3.解码模块
解码模块的输入为键盘码数据与解码使能信号,输出为解码后的数据与解码完成信号。

键盘码的数据是一位一位传给解码模块的,即PS2的时钟由高电平跳变到低电平时,传入键盘码的一位数据。always块语句中的i是一个状态标志位,用来控制状态变化后的相应操作。
4’d1,4’d2,4’d3......:
If(H2L_Sig) begin i <= i + 1’b1; rData[i-1] <= PS2_Data_Pin_In; end
当PS2时钟信号由高变低,需要作出的处理有:将系统转移到下一个状态,接收当前传来的数据。
注意:本实验有两个时钟,一个是系统时钟,带动整个系统运行。一个是PS2的时钟,用来接收键盘传过来的数据。
Verilog HDL那些事_建模篇笔记(实验八:键盘解码)的更多相关文章
- Verilog HDL那些事_建模篇笔记(实验一,实验二)
实验一:永远的流水灯 扫描频率配置为100Hz,即是说扫描周期为10ms.这里需要注意的是扫描周期的概念.流水灯嘛,顾名思义,扫描周期指的是流水灯扫一轮所需要的时间.听到说周期,就应该想到在建模的时候 ...
- Verilog HDL那些事_建模篇笔记(实验九:VGA驱动)
1.了解VGA协议 VGA协议有5个输入信号,列同步信号(HSYNC Signal),行同步信号(VSYNC Signal),红-绿-蓝,颜色信号(RGB Signal). 一帧屏幕的显示是由行从上至 ...
- Verilog HDL那些事_建模篇笔记(实验七:数码管电路驱动)
1.同步动态扫描 多个数码管的显示采用的是同步动态扫描方法,同步动态扫描指的是:行信号和列信号同步扫描,是一种并行操作. 2.数码管驱动电路实现思路 如果要求数码管显示我们想要的数字,首先需 ...
- Verilog HDL那些事_建模篇笔记(实验三:按键消抖)
实验三:按键消抖 首先将按键消抖功能分成了两个模块,电平检查模块和10ms延迟模块.电平检测模块用来检测按键信号的变化(是否被按下),10ms延迟模块用来稳定电平检查模块的输入,进而稳定按键信号,防止 ...
- 基于Verilog HDL 的数字时钟设计
基于Verilog HDL的数字时钟设计 一.实验内容: 利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...
- 【黑金教程笔记之003】【建模篇】akuei2的Verilog hdl心路
Verilog hdl不是“编程”是“建模” Verilog hdl语言是一种富有“形状”的语言. 如果着手以“建模”去理解Verilog hdl语言,以“形状”去完成Verilog hdl语言的设计 ...
- 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...
- Verilog HDL实用教程笔记
Verilog HDL实用教程笔记 DRC - Design Rule Check 几何规则检查ERC - Electrical Rule Check 电学规则检查自动参数提取LVS - Logic ...
- 【黑金教程笔记之003】【建模篇】【Lab 02 闪耀灯和流水灯】—笔记
(1) 扫描频率和闪耀频率? 模块: /**************************************** module name:flash_module function ...
随机推荐
- VIM C++语法高亮配色
因工作需求,必须在终端下远程下代码,vim打开cpp/h文件,看到一连串的字母就傻了,根本无法阅读. 后来才知道VIM这高大上的文本编辑器支持很多的功能,很多的功能.首先最基本的就是语法高亮配色 1. ...
- JS截取字符串常用方法详细整理
使用 substring()或者slice() 函数:split() 功能:使用一个指定的分隔符把一个字符串分割存储到数组 例子: str="jpg|bmp|gif|ico|png" ...
- css 绘制对话框三角符号
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- PHPSTORM模板变量注释
类似于这种注释,方便使用. 有两种方式一种是生成PHP文件时,自动生成,一种是手动生成. 第一种:自动生成 一图解释所有.这么配置就OK了. 这种方法还有一种就是,在包括里边编写,直接引用,先写PHP ...
- npm(cnpm)介绍
1.npm(node package manager) nodejs的包管理器,用于node插件管理(安装.卸载.更新.管理依赖等); 2.使用npm安装安装插件: 1).命令提示符执行 npm in ...
- 使用 UnrealPak.exe 创建 Pak文件方法
看来各位摸UE4 的基佬们,也是被DLC搞得不要不要的呢,其实热更新PAK是很简单就可以实现的,虽然当时我也是弄了快一个月. 下面贴一段以前在 Runtime 状态下 Mount Pak的代码,希望能 ...
- Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path 解决办法
返回数据解析错误 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT ...
- eclipse快捷键以及使用技巧大全
eclipse快捷键以及使用技巧大全1. 打开MyEclipse 6.0.1,然后"window"→"Preferences" 2. 选择"java& ...
- 每次Xcode 升级之后 插件失效,两步解决
以下内容来源:http://www.cocoachina.com/bbs/read.php?tid=296269 每次Xcode 升级之后 插件失效,两步解决 1.打开终端,输入以下代码获取到DVTP ...
- iOS 动态下载系统提供的中文字体
使用系统提供的中文字体,既可避免版权问题,又可以减小应用体积 #pragma mark - 判断字体是否已经被下载 - (BOOL)isFontDownLoaded:(NSString *)fontN ...