UART控制器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安电子科技大学
可编程逻辑器件原理、应用与实验课程实验报告
实验名称UART控制器设计及验证
研究生院学院代培生班Array姓名学号
同作者
实验日期2017 年 4 月23 日
目录
一任务简介 (1)
1.1 实验目的 (1)
1.2 开发工具平台 (1)
二模块设计 (2)
2.1输入模块设计 (2)
2.1.1机械按键消抖 (2)
2.1.2矩阵键盘扫描 (3)
2.1.3参量输入及显示输入 (5)
2.2 显示模块 (6)
2.3三态门控制模块 (8)
2.4 UART通信协议帧格式及波特率设置 (9)
2.5 UART通信模块 (10)
2.5.1串口数据发送模块 (11)
2.5.2串口数据接收模块 (12)
三系统介绍 (13)
3.1系统结构介绍 (13)
3.2系统子模块介绍 (15)
3.3 开发板实验结果 (17)
四总结 (20)
一任务简介
1.1 实验目的
本次任务的目标为设计一个基于FPGA的串口通信控制器,具体技术要求如下:
(1) 实现与PC的双向通信;
(2) 可以通过输入模块在开发板上定义向PC发送的数据;
(3) 数据帧长度可调(6/7/8位);
(4) 通信波特率可调;
(5) 在数码管上实现波特率、输入数据、接收数据的显示。
(6) 按键A用于接收模式和输入模式的选择,按键B用于选择输入模式为波特率设置
还是发送数据设置,按键C为发送确认键,按键D用于选择数据帧长度,矩阵键盘(0~9)用于输入波特率因子和发送数据(十六进制显示);各种模式均有数码管显示相应内容,其中数据帧长度由四个LED灯表示。
(7) 操作流程:
1. 通信参数设置:在开发板上选择数据帧长度、设置波特率、输入发送数据帧;
在PC端的串口通信助手中设置波特率和数据帧长度;
2. 数据发送:按下C键向PC发送数据,在PC端确认接收的数据;
3. 数据接收:由PC端向开发板发送数据,在开发板上选择数据接收模式即可显示;
4. 默认设置:UART控制器默认波特率为9600,默认发送数据为8’h18;
(8) 以上内容均需在开发板上验证;实验截图在本文第三部分给出。
1.2 开发工具平台
(1)基于CycloneII EP2C5Q208C8核心的MAGIC3200_EP2C5开发板,具有四位扫描式数码管,RS232串口等外设,时钟CLK为50MHz;
(2)开发软件为Quartus II 13sp;
(3)串口通信助手;
(4)基于LP2303的USB-UART转接线,用于与笔记本电脑进行串口通信。
MAGIC3200_EP2C5开发板USB-UART转接线
RS232串口串口通信助手
图1.1 开发平台设备
二模块设计
2.1 输入模块设计
输入模块采用了矩阵键盘和独立按键,独立按键用于模式选择和发送确认,矩阵键盘用于数据的输入。关于消抖部分,对于矩阵键盘来说只要设置合适的扫描频率就可以实现消抖的功能,而对于独立按键来说就必须设计相应的消抖模块。
2.2.1 机械按键消抖
模块简介
机械按键按下时的机械抖动会产生很多个下降沿,而在逻辑上希望机械按键按下一次只产生一个下降沿,因此要进行按键消抖。按键防抖动其实是通过延时判断来做的,因为这种毛刺持续时间都在ms级,当检测到按键状态有变化时,经过一定延时后再次进行确认。消抖模块如图2.1所示,din为机械按键输入,dout为消抖后的输出。
图2.1 消抖模块图
关键程序
图2.2为键盘消抖的状态转移图,按键信号din按下时为低电平,平时为高电平。
(1) 状态S0:输入din信号产生跳变后,进入状态S0。如果din为0,进入S1状态。否则循环检测。
(2) 状态S1:如果再次检测到输入信号为逻辑0信号,则表明有按键按下,dout为0。状态机结束。
状态机激励时钟周期为0.1s,以此实现延时,即按键按下后0.1s检测按键信号,若按键信号为低电平,则输出低电平完成消抖。
din=1
din=0
图2.2 消抖状态机
消抖程序如下:
always @(posedge keyclk) //状态机激励 begin if(RESET==0) pre_s=s0; else pre_s=next_s; end
always @(pre_s,next_s,din) //检查按键 begin case(pre_s)
s0: begin dout=1; if(din==0) next_s=s1; else next_s=s0; end s1: begin dout=1; if(din==0) dout=0; else next_s=s0; end default: next_s=s0; endcase end
2.2.2 矩阵键盘扫描
简介及原理图
键盘扫描最大的优点就是能节约I/O 口。如果使用普通的方法,那么16个按键就需要16个I/O 口,但通过扫描的方式来完成,却只需要8个,按键越多它所显现的优势也就越明显。矩阵键盘原理电路如图2.3。
键盘扫描将使用行扫描法实现,即逐行扫描查询法。具体操作为:行线的初始状态输出都为0,只要有高电平出现,表明有按键被按下。在确认有按键被按下的情况下,需要确定具体哪个按键被按下。以一定的扫描频率依次将行线(key_out)电平拉高,并检测列线的输入(key_in),确定具体哪个按键被按下。
图2.3 矩阵键盘原理电路
图2.4 键盘扫描模块图