UART控制器设计.docx

上传人:b****2 文档编号:1846821 上传时间:2023-05-01 格式:DOCX 页数:20 大小:717.38KB
下载 相关 举报
UART控制器设计.docx_第1页
第1页 / 共20页
UART控制器设计.docx_第2页
第2页 / 共20页
UART控制器设计.docx_第3页
第3页 / 共20页
UART控制器设计.docx_第4页
第4页 / 共20页
UART控制器设计.docx_第5页
第5页 / 共20页
UART控制器设计.docx_第6页
第6页 / 共20页
UART控制器设计.docx_第7页
第7页 / 共20页
UART控制器设计.docx_第8页
第8页 / 共20页
UART控制器设计.docx_第9页
第9页 / 共20页
UART控制器设计.docx_第10页
第10页 / 共20页
UART控制器设计.docx_第11页
第11页 / 共20页
UART控制器设计.docx_第12页
第12页 / 共20页
UART控制器设计.docx_第13页
第13页 / 共20页
UART控制器设计.docx_第14页
第14页 / 共20页
UART控制器设计.docx_第15页
第15页 / 共20页
UART控制器设计.docx_第16页
第16页 / 共20页
UART控制器设计.docx_第17页
第17页 / 共20页
UART控制器设计.docx_第18页
第18页 / 共20页
UART控制器设计.docx_第19页
第19页 / 共20页
UART控制器设计.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

UART控制器设计.docx

《UART控制器设计.docx》由会员分享,可在线阅读,更多相关《UART控制器设计.docx(20页珍藏版)》请在冰点文库上搜索。

UART控制器设计.docx

UART控制器设计

 

UART控制器设计(总15页)

西安电子科技大学

可编程逻辑器件原理、应用与实验课程实验报告

实验名称UART控制器设计及验证

成绩

研究生院学院代培生班

姓名学号

同作者

实验日期2017年4月23日

指导教师评语:

 

指导教师:

年月日

实验报告内容基本要求及参考格式

一、实验目的

二、实验所用仪器(或实验环境)

三、实验基本原理及步骤(或方案设计及理论计算)

四、实验数据记录(或仿真及软件设计)

五、实验结果分析及回答问题(或测试环境及测试结果)

一任务简介

实验目的

本次任务的目标为设计一个基于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)基于CycloneIIEP2C5Q208C8核心的MAGIC3200_EP2C5开发板,具有四位扫描式数码管,RS232串口等外设,时钟CLK为50MHz;

(2)开发软件为QuartusII13sp;

(3)串口通信助手;

(4)基于LP2303的USB-UART转接线,用于与笔记本电脑进行串口通信。

MAGIC3200_EP2C5开发板USB-UART转接线

RS232串口串口通信助手

图开发平台设备

二模块设计

输入模块设计

输入模块采用了矩阵键盘和独立按键,独立按键用于模式选择和发送确认,矩阵键盘用于数据的输入。

关于消抖部分,对于矩阵键盘来说只要设置合适的扫描频率就可以实现消抖的功能,而对于独立按键来说就必须设计相应的消抖模块。

机械按键消抖

模块简介

机械按键按下时的机械抖动会产生很多个下降沿,而在逻辑上希望机械按键按下一次只产生一个下降沿,因此要进行按键消抖。

按键防抖动其实是通过延时判断来做的,因为这种毛刺持续时间都在ms级,当检测到按键状态有变化时,经过一定延时后再次进行确认。

消抖模块如图所示,din为机械按键输入,dout为消抖后的输出。

图消抖模块图

关键程序

图为键盘消抖的状态转移图,按键信号din按下时为低电平,平时为高电平。

(1)状态S0:

输入din信号产生跳变后,进入状态S0。

如果din为0,进入S1状态。

否则循环检测。

(2)状态S1:

如果再次检测到输入信号为逻辑0信号,则表明有按键按下,dout为0。

状态机结束。

状态机激励时钟周期为,以此实现延时,即按键按下后检测按键信号,若按键信号为低电平,则输出低电平完成消抖。

图消抖状态机

消抖程序如下:

always@(posedgekeyclk)

般说来,当1秒钟刷新24次以上,人眼就无法区分而认为四个数码管是一起亮的。

扫描具有节约引脚的优点,如果并行驱动四位数码管,那么至少需要33个引脚,而扫描法只需要13个引脚就可以实现。

使用的是共阳数码管,引脚电平为低时点亮。

图显示模块

显示模块如图所示,输入为reset信号,50Mhz时钟信号clk,前文提到的Data1、Data2、Data3、Data4显示内容输入,分别对应四位数码管千位、百位、十位、个位的显示内容。

输出信号中的LED_A~LED_G、LED_Point、LED_PointTime均为显示控制信号;LED_VCC1~LED_VCC4为LED片选信号,高电平有效,LED_EN1为使能信号。

关键程序

以下为数码管扫描的关键程序:

always@(posedgeclk)

begin

if(reset=='b0)

count<=0;

elseif(count==6000)

0],led[3..0]为数据帧长度指示信号用于控制开发板上的四个led灯。

功能说明:

每按下机械D,数据帧长度会以8-7-6-8顺序改变一档,而开发板上从左到右的四个led灯会以相应的顺序发光表示目前数据帧的长度;0111表示8位,1000表示7位,1001表示6位,系统默认8位模式;0表示亮,1表示灭。

关键程序

数据帧长度控制模块由下列代码实现:

key5key5_1(CLK,RESET,DDD,DD);

0]:

由输入模块送来的波特率因子,用于设置波特率;

SEND_DATA[7..0]:

数据帧,在6位模式中位宽为6,在7位模式中位宽为7。

输出:

UART0_TX:

发送数据引脚;

Data01[0..3]~Data04[0..3]:

用于向显示模块传递接收的数据。

图UART模块

串口数据发送模块

关键程序

Clock9600为前文介绍的波特率发生器产生的波特率时钟;

always@(posedgeClock9600orposedgeSend_en)

begin

if(Send_en==1)

beginsend_count<=0;UART0_TX<=1;send_over<=1;end

0]:

键盘列扫描信号;

UART0_RX:

接收数据引脚;

B:

机械按键,发送确认键;

s1:

机械按键,按下后显示接收的数据,再按下退出;

DDD:

机械按键,切换数据位宽。

输出:

led[3..0]:

数据位宽指示灯;

key_out[3..0]:

键盘行扫描信号;

speaker:

蜂鸣器控制信号;

LED_A~LED_G:

显示控制信号;

LED_Point,LED_PointTime:

均为显示控制信号;

LED_VCC1~LED_VCC4:

LED片选信号;

LED_EN1:

使能信号;

UART0_TX:

发送数据引脚。

系统子模块介绍

因为三个通信子系统基本相似,所以本文仅介绍数据位宽6位的通信子系统。

图子系统

图的子系统中左边和右边的模块都是多输入三态门,其使能信号由数据帧长度控制模块控制,从而决定了在任何一时刻三个子系统只有一个系统处于工作状态。

该图中间的模块即为实现6位串口通信的功能模块,其结构如图所示。

图6位串口通信的功能模块

如图所示,串口通信模块主要分为6个子模块,各个子模块在前文中都有介绍;

模块说明:

模块1:

UART通信模块,用于数据的接收和传送,将接收到的数据经过三态门(模块

4)传送到显示模块;

模块2:

输入模块,用于输入波特率、发送数据,将用户输入的数据经过三态门(模块

3)发送到显示模块;

模块3,模块4:

三态门模块,用于保证任何时刻只有一组显示数据输入显示模块进行

显示;

模块5:

显示模块,用于驱动数码管;

模块6:

三态门控制模块;用于选择数码管显示的内容。

端口说明

输如:

clk:

50MHz时钟;

reset:

复位信号;

switch:

用于控制波特率输入模式和发送数据输入模式间的切换;

key_in[3..0]:

键盘列扫描信号;

UART0_RX:

接收数据引脚;

B:

机械按键,发送确认键;

s1:

机械按键,按下后显示接收的数据,再按下退出;

输出:

key_out[3..0]:

键盘行扫描信号;

speaker:

蜂鸣器控制信号;

LED_A~LED_G:

显示控制信号;

LED_Point,LED_PointTime:

均为显示控制信号;

LED_VCC1~LED_VCC4:

LED片选信号;

LED_EN1:

使能信号;

UART0_TX:

发送数据引脚。

 

开发板实验结果

(1)实验条件:

数据位宽:

6位;波特率/波特率因子:

38400/1304;

发送数据:

2’h18;接收数据:

2’h32;

图设置波特率因子(6位位宽)

图设置发送数据(6位位宽)图显示接收数据(6位位宽)

图PC端串口通信助手(绿字为开发板送来的数据黑字为向开发板发送的数据)

(2)实验条件:

(按下按键D切换数据位宽)

数据位宽:

7位;波特率/波特率因子:

19200/2604;

发送数据:

2’h31;接收数据:

2’h56;

图设置波特率因子(7位位宽)

图设置发送数据(7位位宽)图显示接收数据(7位位宽)

图PC端串口通信助手(绿字为开发板送来的数据黑字为向开发板发送的数据)

(3)实验条件:

(按下按键D切换数据位宽)

数据位宽:

8位;波特率/波特率因子:

9600/5208;

发送数据:

2’h99;接收数据:

2’h66;

图设置波特率因子(8位位宽)

图设置发送数据(8位位宽)图显示接收数据(8位位宽)

图PC端串口通信助手(绿字为开发板送来的数据黑字为向开发板发送的数据)

实验总结

从实验结果可以看出,PC端串口助手上,设置的波特率和数据位宽,接收和发送的数据均与开发板上数码管和led等显示的数据相一致;在6位位宽的实验中波特率为38400;对应的波特率因子本应该为1302,而实际设置的波特率因子为1304,而串口通信依然正常进行,这说明本系统具有一定的容错能力。

综上所述,开发板实验验证了本次任务设计的系统功能都已在硬件上实现。

五总结

在本次项目中我的体会主要由以下几点:

一、自身的编程水平和软件水平需要提高,在本项目的设计过程中我遇到了很多问题,比如刚开始编程时总会出现一些无法理解的语法问题,例如a<=b/2这样的除法运算中要求a和b的数据位宽是一样的,否则运算难以成立。

解决这些问题花费了我大量的时间,这反映出我对于verilog语言的语法的理解依然不够。

在软件层面,quartus的很多功能我依然不能熟练使用,例如如何将modelsim与quartus的工程直接建立联系,编写testbench在modelsim进行仿真;又比如使用SignalTap抓取开发板运行时的一些信号,熟练使用SignalTap可以非常方便的验证自己项目的时序和排除故障;这些功能非常强大软件功能我还没有熟练的掌握,这说明我仍然需要更多的学习。

二、语言和软件只是工具,设计思想才是至关重要的核心。

在学习和实际操作FPGA以前我一直认为只要熟练掌握开发语言和软件就可以胜任开发工作。

然而我在实际的操作过程中却发现,大部分的逻辑功能都可以由简单的verilog语句实现,而怎么去用语言实现一个功能如果有正确的设计思想确实是可以减少工作量和提升开发质量的。

三、自上而下的开发过程要优于自下而上的开发过程,如果在项目中先去规划顶层中各个模块要实现的功能和接口的对接,再按照先前的规划去完成底层的开发是一种非常有效率的做法。

而如果采用自下而上的开发过程,如果前期规划不好,完成底层的开发后在顶层上各个模块对接综合时还有可能出现较多的问题。

如果是团队开发的话,自上而下的开发过程就更加具有优越性了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2