实验三常用模块电路的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三常用模块电路的设计
一、实验目的:
1、掌握QuartusII宏功能模块的设计方法。
2、掌握VHDL设计ROM和RAM的方法。
3、掌握数控分频器的设计方法。
4、掌握4×4键盘扫描模块设计方法。
5、掌握PS2接口电路设计方法。
6、了解640×480VGA显示控制电路的原理和设计方法。
二、实验的硬件要求:
1、EDA/SOPC实验箱。
2、计算机。
三、实验原理
见各实验内容。
四、实验内容:
1、数控分频器的设计。
要求:将10KHz时钟信号分频,分别输出10Hz、1kHz、1250Hz时钟信号。
分频的原理与计数器差不多,需要定义一个信号量来控制计数范围为分频数,另外控制在一个计数周期内输出一段低电平“0”和另一段高电平“1”。
分频器部分源码如图3.1a、图3.1b所示:
图3.1a 数控分频器VHDL代码
如果用于计数的信号量定义为“std_logic_vector”类型的。如“Count10”,也可以将其最高位作为分频后的时钟输出:即使用语句“Clk_1kHz<=Count10(3);”,如图2.11b所示,此时输出时钟信号占空比是多少?是否可以改变?。
图3.1b 十分频的VHDL代码
如果分频数为2n,“n为整数”,如8分频,Count8定义为“std_logic_vector”类型,使用下图的语句序列实现,更加简洁:
图3.1c 分频数为2n时,代码可以更为简洁
同理,“Count8(1)”是几分频输出?“Count8(0)”是几分频输出?
2、4×4键盘扫描模块设计
①图3.2是4×4键盘阵列电路原理图。行字符ROW[3..0]表示一行的状态,COL[3..0] 表
示一列的状态。使用时采用行扫描方式检测按键,即设置COL[3..0]中某一位为“0”,其余为“1”,如COL=“1011”(COL[2]=’0’)表示选择第三行(COL[2]对应一行);然后检测ROW[3..0]的值,全“1”说明没有任何键按下,为“0”一位表示该列有键按下,如ROW=“0101”表示第二和第四列(ROW[2] 、ROW[4]对应列)被按下;结合COL和ROW即可确定按键值(如“8”和“C”)。
图3.2 4×4键盘阵列电路原理图
②图3.3是键盘扫描模块VHDL源码。注意:是如何判断键盘按下时刻的?
图3.3 键盘扫描模块VHDL源码
③图3.4是键盘扫描模块仿真波形,注意:如何设置Kr的值?
④在实验箱上测试4×4键盘扫描模块,可按图3.5连接,为便于观察,使用1Hz频率时钟信号,Kr、Kc连接FPGA引出线ROW[3..0]和COL[3..0],BCD_OUT通过译码器显示在数码管上。
图3.5 4×4键盘扫描模块测试电路
3、PS/2接口键盘读取模块设计
①PS2通信协议是一种双向同步串行通迅协议。通迅的两端通过CLOCK(时钟信号端)同步,并通过DATA(数据端口)交换数据。任何一方如果想要抑制另外一方的通迅时,只需要把CLOCK拉到低电平。
PS2控制接口仅使用到两条传输端口,一为频率端口,另一则为数据端口如图3.6所示,且此传输埠必为三态(Tri-State)并具有双向(bidirectional)特性。PS2 传输产品上,常见为鼠标与键盘,两者的驱动原理均相同,仅扫描码(scan code)不同。因此我们以PS2键盘为例进行说明。
②PS2标准,规范每笔数据传输包含起始位(start bit)、扫描码(scan code)、奇同位检查(odd parity)、以及终止位(stop bit)共计11位,并以双向串行数据传输的方式,达到通信的目的。且当主机端(host)或从机端(slave)并无传送或接收数据时,数据传输端口及频率均将升为高电位。图3.7所示为每一笔数据传输所包含之内容如下:
a. 起始位(“0”)
b. 8位数据宽度的扫描码( scan code )。
c. 奇同位检查,使扫描码与奇同位加起来1的数字为奇数个。
d. 终止位(“1”)
图3.7 PS/2接口时序
③键盘其实就是一个大型的按键矩阵,它们由安装在电路板上的处理器(叫做“键盘编码器”)来监视着。虽然不同的键盘可能采用不同的处理器,但是它们完成的任务都是一样的,即监视哪些按键被按下,哪些按键被释放了,并将这些信息传送到主机。
每个键盘被分配了唯一的通码(键盘按下时发送的编码)和断码(键盘释放时发送的编码),这样主机通过查找唯一的扫描码就可以确定是哪个按键被按下或释放。
PS2 键盘扫描码见“键盘扫描码表”
④图 3.8是PS/2接口键盘接收模块的VHDL源码,在对其进行仿真时,可以将“keyboard_clk_filtered”信号输出查看。
图3.8 PS/2接口键盘接收模块VHDL 源码
⑤图3.9是PS/2接口键盘接收模块仿真波形,为便于分析,把“keyboard_clk_filtered ”信号和“SHIFTIN ”信号连接到端口“filtered_out ”和“SHIFTIN _out ”输出显示。
图3.9 PS/2接口键盘接收模块仿真波形
⑥按图3.10设计,即可在实验箱的数码管上显示键盘的扫描码。“Sel_time2”模块用实验二中的数码管扫描模块修改一下即可(只是用2个数码管,SEL 绑定到SEL[0]管脚),代码如图3.11:
图3.10 PS/2接口键盘接收模块测试电路
图3.11 修改后的数码管扫描模块
4、VGA显示控制
VGA显示器在显示过程中主要由五个信号来控制,分别是R、G、B、HS和VS。其中R、G、B分别用来驱动显示器三个基色的显示,即红、绿和蓝,HS是行同步信号,VS 是场同步信号。在做本实验时,由于没有任何显示器驱动,所以显示器工作在默认状态,分辨率:640×480,刷新率:60Hz。在此状态下,当VS和HS都为低电平时,VGA显示器显示亮的状态,其正向扫描过程约为26us。当一行扫描结束后,行同步信号HS置高电平,持续约6us后,变成低电平,在HS为高电平期间,显示器产生消隐信号,这就是显示器回扫的过程。当扫描完一场后,也就是扫描完480行以后,场同步信号VS置高电平,产生场同步,此同步信号可以使扫描线回到显示器的第一行第一列位置。显示器显示的时序图如图3.12所示: