基于FPGA的UART串口接收模块设计.doc
基于FPGA的UART通信接口设计与实现

通用异步接收发送器UART (Universal Asyn2chronousReceiver and Transmitter )能够在串行方式下发送和接收数据,数据传送方式只需要一对线路就能实现远距离数据通信。
其以资源简单、传输距离远、易于实现等特点成为各种处理器的标准集成外设之一。
在实际的应用设计中,经常要用到UART 的多个主要功能,常用的标准通信波特率有9600bps 、15200bps 等。
本文使用Verilog HDL 语言将UART 器件的核心功能描述成一个异步串行数字收发模块,并且在Modelsim 上实现了其功能仿真。
1UART 原理及设计简介UART 的全称是通用异步收发器(Universal Asynchronous Receiver /Transmitter ),是实现设备之间低速数据通信的标准协议。
“异步”指不需要额外的时钟线进行数据的同步传输,是一种串行总线接口,只需占用2根线就可以完成数据的收发(1根接收数据,1根发送数据)。
UART 一帧由起始位、数据位、校验位和停止位组成。
数据逐位传输,示意图如图1所示。
异步通信要求发送的每一帧数据都必须按照图1给定的UART 格式进行格式化。
一帧数据由4部分组成,首先是起始位“0”;接着是发送的数据(这里采用8位);然后是可选的检验位来判断接收数据有无错误(这里选用奇检验);最后是停止位“1”(停止位可以为1位、1.5位和2位)。
若线路上没有传输的数据,则线路始终保持为“1”,即空闲。
接收端不断检测线路状态,非接收状态下如果检测到线路由“1”变为“0”(“0”至少保持8个内部时钟周期),则认为有发送数据需接收,接收器进入接收阶段。
UART 模块总结构如图2所示。
首先,发送时按照UART 帧格式,由发送写信号启动发送波特率发生器,先发送一位起始位,然后由发送波特率发生器时钟启动发送移位寄存器,将发送数据存入发送移位寄存器,并将发送一位寄存器中的数据发送,同时由发送波特率发生器时钟启动发送数据计数器,当计数器计数到第10位时,产生奇偶校验位,此时发送奇偶校验位,计数到第11位时,发送停止位,同时产生发送完成指示信号。
基于FPGA的UART设计

基于FPGA的UART设计毕业设计此文档为word格式,下载后可随意编辑摘要通用串口是远程通信接口,在数字系统使用很普遍,是一个很重要的部件。
本论文使用Verilog HDL 语言描述硬件功能,利用QuartusII 5.0在 FPGA 芯片上的综合描述,采用模块化设计方法设计UART(通用异步收发器)的各个模块。
其中包括波特发生器,程序控制器,UART数据接收器和UART数据发送器,本文采用的外部时钟为48MHZ,波特率为9600。
在QuartusII 5.0和Modelsim6.0环境下进行设计、编译和仿真。
最后的程序编译仿真表明系统数据完全正确。
关键词:VerilogHDL; UART;帧格式;FPGA;AbstractAbstractIn this paper, the use of hardware description languages Verilog VHDL function, the use of Altera's FPGA chips, the design of modular design method of UART (Universal Asynchronous Receiver Transmitter) of each module, including Porter, generators, process controllers, UART receiver data and the UART transmitter data. QuartusII 5.0 and Modelsim6.0 in environment design, compilation, simulation and downloading. Finally, simulation results show that the procedures for compiling data entirely correct.Key words: VerilogHDL; UART; frame format; FPGA目录第一章绪论 (1)1.1引言 (1)1.2 什么是Verilog HDL? (1)1.3 历史 (2)1.4 主要能力 (2)1.5 模块 (4)1.6 数据流描述方式 (5)第二章片上系统SOC与FPGA的现状 (6)2.1 片上系统SOC介绍 (6)2.2 FPGA技术介绍 (6)2.3 FPGA 核心设计流程 (7)2.3.1 设计流程图 (7)2.3.2关键步骤的实现 (8)2.3.2.1 功能仿真 (8)2.3.2.2 逻辑综合 (9)2.3.2.3 前仿真 (9)2.3.2.4 布局布线 (150)2.3.2.5 后仿真(时序仿真) (161)第三章UART设计 (172)3.1 UART的帧格式 (172)3.2 UART模块 (183)3.2.1主要引脚功能介绍 (183)3.2.2UART主体程序 (194)3.3UART发送模块 (205)3.3.1UART的数据发送服务 (205)3.3.2UART的数据发送操作 (16)3.3.3UART的数据发送模块程序 (17)3.3.4UART的数据发送模块程序仿真图 (250)3.4UART接收模块 (261)3.4.1UART数据接收服务 (261)3.4.2UART数据接收操作 (272)3.4.3UART的数据接收模块程序 (272)3.4.4UART的数据接收模块程序功能仿真图 (305)3.5UART控制器 (26)3.5.1UART控制器服务 (26)3.5.2UART控制器模块程序 (3126)3.5.3UART控制器模块程序仿真图 (28)3.6UART波特发生器 (29)3.6.1UART波特发生器服务 (29)3.6.2UART波特发生器模块程序 (29)3.6.13UART波特发生器程序仿真图 (350)结论 (361)参考文献 (372)致谢 (383)附录 (394)外文资料原文 (405)译文 (483)绪论绪论1.1引言21世纪,电子技术迅猛发展,高新技术日新月异。
基于FPGA的UART模块的设计

基于FPGA 的UART 模块的设计杨宗国,李艳萍(太原理工大学信息工程学院 山西太原 030024)摘 要:为了实现计算机与基于F PGA 图像处理系统的数据通信,这里用FP GA 设计了一款简易通用异步收发器(U A RT )模块。
U A RT 的主要功能是实现数据处理模块与RS 232串行数据接口之间的数据转换,即将送过来的并行数据转换为输出的串行数据流,由数据处理模块传送给计算机,还可以将串行数据转换为并行数据,供数据处理模块使用。
为了简化电路设计,减少电路面积,这里省略了U A RT 系统中的奇偶检验模块。
关键词:F PG A;V HDL ;串/并转换;并/串转换;U AR T中图分类号:T N971 文献标识码:B 文章编号:1004-373X(2009)02-019-04Design of UART Module Based on FPGAYA N G Zo ng guo,L I Yanping(Colleg e o f Info rmat i o n Engine ering,Ta i y uan U niversity of T echnolo gy ,T aiyuan,030024,Chi na)Abstract :To realize data communication between computer and FPGA -based imag e processing system,a simple U niversal Asyn -chronous Receiver Transmitter (U ART )is designed by F PGA.T he main function of UA RT is to realize data conversion between data disposal module and RS 232serial port,that is to say,parallel data trinsmitted by data disposal module is converted into serial data flow,then it is transmitted into computer,the serial data is converted into par allel data for the usage o f data disposal module.For pred-i g esting circuit design and reducing electrocircuit proportio n,par ity check module is not needed.Keywords :FP GA ;V H DL ;S/P conversion;P/S conversio n;U A RT收稿日期:2008-05-300 引 言在计算机的数据通信中,外设一般不能与计算机直接相连,它们之间的信息交换主要存在以下问题:(1)速度不匹配。
基于FPGA的UART模块设计

编号基于FPGA的UART模块设计与实现Design and Realization of UART based onFPGA学生姓名周大勇专业控制科学与工程学号S*********指导教师杨晓慧学院电子信息工程学院二〇一三年六月摘要UART因其可靠性高,传输距离远,线路简单,同时UART作为RS232协议的控制接口,从而成为比较广泛的串行数据通信电路,而现在大部分集成电路通信用的UART芯片,存在成本高,电路复杂,移植性较差等缺点,本文提出了一种将UART的功能集成在FPGA芯片中,可使整个系统更为灵活、紧凑,减小整个电路的体积,提高系统的可靠性和稳定性。
本模块功能全部基于verilogHDL硬件描述语言。
关键词:FPGA, UART ,verilogHDL ,RS232ABSTRACTUART, because of its high reliability, long transmission distance and the simple line, moreover mainly used in communication between device with RS232 interface. Thus it is becoming more extensive serial data communication circuit. But now most of the integrated UART chips used in communications, have faults of high cost and poor portability. The circuit of the chip is complex. This paper presents a method that UART function will be integrated in FPGA chip, It can makesystem more compact, flexible, reliable and stable. All functions of module are based on verilogHDL hardware description language.Keywords:FPGA, UART, verilogHDL, RS232目录摘要 (I)ABSTRACT .................................................................................................................................. I I 目录...................................................................................................................................... I II 第一章绪论. (1)第二章UART 简介 (2)第三章UART功能设计 (3)3.1 波特率发生模块 (3)3.2 波特率接收模块 (5)3.3 UART发送模块 (8)第四章顶层电路及实验数据 (11)第五章结论 (12)致谢 (13)参考文献 (14)第一章绪论通用异步收发器(universal asynchronous receiver transmitter, UART)尽管自20世纪70年代就已出现,但因其简单可靠,目前仍是一种使用广泛的串行通信接口。
基于FPGA的UART接口设计

3.UART 实现方案
UART 模 块 的 整 体 结 构 图 如 图 2 所 示 。 可 以 看 出 ,UART 的整体功能是以 UART 内核模块 为 核 心 , 和 其 它 各 种 模 块 进
行连接相互协同工作实现的 , 而 UART 内 核 模 块 是 整 个 设 计 的核心,也是整个设计中最为复杂的模块。
并行接口和串行接口串行通信成本更低适用范围更广更适合接口电路的设串行通信分为两种类型一种叫同步通信另一种叫异步通信采用同步通信时将许多字符组成一个信息组这样字符可以一个接一个地传输但是在每组信息的开始要加上同步字符在没有信息要传输时还要填上空字符因为同步传输不允许有间隙采用异步通信时字符之间的传输间隔是任意的所以每个字符的前后都要用一些位数来作为分隔位2uart通信原理uart不仅辅助处理器与外部设备之间的通信同时uart还是一种串行通信方式数据在传输过程中是通过一位一位进行传输来实现的uart功能包括微处理器接口用于数据传输的缓冲器帧产生奇偶校验并串转换等基本的uart通信只需要两条信号线txdrxd就可以完成数据的相互通信接收和发送是全双工方式txdrxd分别是uart的发送接收端在信号线上共有种状态可分别用逻辑1高电平和逻辑低电平来区分在发送器空闲的时候数据线应保持高电平状态发送器是通过发送起始位开始以停止位结束的方式传送字符字符之间没有固定的时间间隔要求每一个字符的前面都有一位起始位字符本身由位数据位组成然后是一位校验位最后是停止位停止位后面是不定长度的空闲位uart的帧格式如图uart的帧格式3uart实现方案uart模块的整体结构图如图所示可以看出uart的整体功能是以uart内核模块为核心和其它各种模块进行连接相互协同工作实现的uart内核模块是整个设计的核心也是整个设计中最为复杂的模块cpuuart内核模块提供的cpu接口就是uart这些端口可以分为两组
基于FPGA的UART模块设计

基于FPGA 的UART 设计与实现在光栅尺信号采集电路中,使用了FPGA 完成对光栅尺脉冲的滤波、细分、辩向及计数,计数值最终由串行通信接口传送至上位机。
如果使用专用UART 芯片或利用单片机的串行通信接口实现数据传输,一是会造成成本增加,二是会造成电路面积和功耗更大。
在FPGA 中实现UART 模块,完成串口通信的功能,能够克服使用专用芯片或单片机完成数据通信的缺点,使整个系统更加灵活,使系统能够根据需要进行串口功能的升级、扩充和裁剪。
根据光栅尺信号采集电路的要求,串口主要需要实现数据的接收和发送,其主要过程为,当串口接收到上位机发送的一个字符‘s ’时,将24位的计数值通过串口分3次发送至上位机。
因此,本文所设计的UART 模块主要包括三个部分:波特率发生器模块、接收模块、发送模块。
通用异步接收发送器(UART )是广泛使用的串行数据传输协议。
基本的UART 通信只需要两条信号线(RXD ,TXD )就可以完成数据的互相通信,接收与发送是全双工形式,TXD 是发送端,RXD 是接收端。
UART 数据传输的格式如图1所示,本文是根据图1所示的数据帧格式进行UART 模块的设计。
起始位1位停止位D1D3D2D4D5D6D7D08 图1. UART 数据帧格式1. 16倍波特率发生器模块16倍波特率发生器模块主要产生UART 通信时所需要的时钟(16倍的波特率)。
16倍波特率发生器模块主要使用计数器实现分频,计数器由系统时钟驱动,当计数值等于某固定数值(cnter )的一半时,16倍波特率发生器输出高电平,当计数值小于cnter 且大于cnter/2时,16倍波特率发生器输出低电平,当计数值大于cnter 时,将计数器清零。
光栅尺信号采集电路所提供的系统时钟频率为20MHz ,因此,cnter=20MHz/(9600Bps ×16)=136。
16倍波特率发生器模块主要代码如下:module m16btl(clk, clk16x);input clk;output clk16x;reg clk16x;reg [11:0] cnter;always @(posedge clk)beginif (cnter >= 136)cnter <= 0;elsebeginif (cnter <= 68)clk16x <= 1;elseclk16x <= 0;cnter <= cnter + 1;endendendmodule其中clk为系统时钟输入端,clk16x为16倍波特率信号输出端。
基于FPGA的UART设计

一、题目基于FPGA的UART设计二、设计要求1)支持数据格式:起始位(1bit)+数据(8bit)+奇偶校验位(1bit)+终止位(1bit)2)奇/偶校验可配置3)可配置支持115200以下的常见波特率4)支持115200以下的波特率自适应,自适应过程如下:a.复位后,UART首先接收输入,不断自动调整波特率,直到以一定波特率正确连续接收到3个bytes的0x55b.接着UART以此波特率连续发送3个bytes 0xaac.之后两端以此波特率进行通信d.波特率自适应只在电路复位后进行一次,如欲再次自适应波特率应对电路再次复位e.波特率自适应过程中不能对UART的波特率作任何设置,自适应完成后可以对波特率作设置5)自动计算校验位用于发送数据;对接收到的校验位和数据进行校验,发现错误应设置错误标志,并丢弃数据6)对接收不正常数据(如无终止位、无校验位、数据位数不正确等)应能自动识别并设置错误标志、丢弃三、UART 的工作原理异步通信时,UART发送/接收数据的传输格式如图1所示,一个字符单位由开始位、数据位、停止位组成。
异步通信的一帧传输经历以下步骤:(1)无传输。
发送方连续发送信号,处于信息“1”状态。
(2)起始传输。
发送方在任何时刻将传号变成空号,即“1”跳变到“0”,并持续1位时间表明发送方开始传输数据。
而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。
(3)奇偶传输。
数据传输之后是可供选择的奇偶位发送或接收。
(4)停止传输。
最后是发送或接收的停止位,其状态恒为“1”。
发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“0”位,接着是8个数据位,然后是停止位逻辑“1”位,数据线空闲时为高或“1”状态。
起始位和停止位的作用是使接收器能把局部时钟与每个新开始接收的字符再同步。
异步通信没有可参照的时钟信号,发送器可以随时发送数据,任何时刻串行数据到来时,接收器必须准确地发现起始位下降沿的出现时间,从而正确采样数据。
基于FPGA的UART串口接收模块设计

UART串口接收模块设计实验目标:实现FPGA接收其他设备通过UART协议发送过来的数据知识点:1、U RAT通信协议工业环境下数据接收实现。
2、I n system sources and probes editor ISSP)调试工具的使用。
UART发送端发送一个字节数据时序图:采集中间时刻时的数据即可,如下图所示但是在工业应用中,往往有非常强的电磁干扰,只采样一次就作为该数据的电平判定,是不保险的,有可能恰好采集到被干扰的信号而导致结果出错,因此需要使用多次采样求概率的方式进行。
以下为改进型的单bit数据接收方式示意图:BI + 1 - 1丨丨「i |丨11 口「「「i「11 丨im i [1 2 3 4 5 6 7 8 9 10 11 12 1314 1516在这张图中,将每一位数据又平均分成了16小段,对于Bit_x这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用红色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此这两段时间的电平无效,采集时直接忽略。
而中间这一时间段(用绿色标出),数据本身是比较稳定的,一般都代表了正确的结果。
但是也不排除该段数据受强 电磁干扰而出现错误的电平脉冲, 因此对这一段电平,进行多次采样,并求高低 电平发生的概率,6次采集结果中,取出现次数多的电平作为采样结果。
例如, 采样6次的结果分别为1/1/1/1/0/1/,贝U 取电平结果为1,若为0/0/1/0/0/0,,贝U 取 电平结果为0,当6次采样结果中1和0各占一半(各3次),则可判断当前通 信线路环境非常恶劣,数据不具有可靠性。
串口发送模块包含两个主要组件:1、 起始位检测进程(低电平,下降沿)2、 波特率产生模块3、 数据接收模块串口接收模块整体结构图:Data_Byte[7:0] Rx_Done=Rst n波特率时钟计算:---------------- ►Baud_Set[2:0] ----- -------- ►ClkModelsim 仿真图:• 在testbench 文件中我们为设计输入了假定的信号, 在仿真图中我们可以看到 data_byte_r 在Rx_done 标志位产生的时候成功的将仿真数据 data_byte_t 接收到其中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
UART串口接收模块设计
实验目标:实现FPGA接收其他设备通过UART协议发送过来的数据。
知识点:
1、URAT通信协议工业环境下数据接收实现。
2、In system sources and probes editor(ISSP)调试工具的使用。
UART发送端发送一个字节数据时序图:
对于其中的每一位进行采样,一般情况下每一位数据的中间点是最稳定的,因此一般应用中,
:
采集中间时刻时的数据即可,如下图所示
但是在工业应用中,往往有非常强的电磁干扰,只采样一次就作为该数据的电平判定,是不保险的,有可能恰好采集到被干扰的信号而导致结果出错,因此需要使用多次采样求概率的方式进行。
以下为改进型的单bit数据接收方式示意图:
12345678910111213141516
在这张图中,将每一位数据又平均分成了16小段,对于Bit_x这一位数据,考虑到数据在刚刚发生变化和即将发生变化的这一时期,数据极有可能不稳定的(用红色标出的两段),在这两个时间段采集数据,很有可能得到错误的结果,因此这两段时间的电平无效,采集时直接忽略。
而中间这一时间段(用绿色标出),
数据本身是比较稳定的,一般都代表了正确的结果。
但是也不排除该段数据受强电磁干扰而出现错误的电平脉冲,因此对这一段电平,进行多次采样,并求高低电平发生的概率,6次采集结果中,取出现次数多的电平作为采样结果。
例如,采样6次的结果分别为1/1/1/1/0/1/,则取电平结果为1,若为0/0/1/0/0/0,,则取电平结果为0,当6次采样结果中1和0各占一半(各3次),则可判断当前通信线路环境非常恶劣,数据不具有可靠性。
串口发送模块包含两个主要组件:
1、起始位检测进程(低电平,下降沿)
2、波特率产生模块
3、数据接收模块
串口接收模块整体结构图:
波特率时钟计算:
Modelsim仿真图:
·在testbench文件中我们为设计输入了假定的信号,在仿真图中我们可以看到data_byte_r 在Rx_done标志位产生的时候成功的将仿真数据data_byte_t接收到其中。
实现了串口接收数据的功能,其余各状态表现正常。
Rtl功能图
附录:源程序:
一,顶层功能代码
module uart_rx_top(Clk,Rst_n,Rs232_Rx);
input Clk;
input Rst_n;
input Rs232_Rx;
reg [7:0]data_rx_r;
wire [7:0]data_rx;
wire Rx_Done;
uart_byte_rx uart_byte_rx(
.Clk(Clk),
.Rst_n(Rst_n),
.baud_set(3'd0),
.Rs232_Rx(Rs232_Rx),
.data_byte(data_rx),
.Rx_Done(Rx_Done)
);
issp issp(
.probe(data_rx_r),
.source()
);
always@(posedge Clk or negedge Rst_n)
if(!Rst_n)
data_rx_r <= 8'd0;
else if(Rx_Done)
data_rx_r <= data_rx;
else
data_rx_r <= data_rx_r; endmodule
二testbench仿真文件
`timescale 1ns/1ns
`define clk_period 20
module uart_byte_rx_tb;
reg Clk;
reg Rst_n;
reg Rs232_Rx;
wire [7:0]data_byte_r;
wire Rx_Done;
reg [7:0]data_byte_t;
reg send_en;
reg [2:0]baud_set;
wire Rs232_Tx;
wire Tx_Done;
wire uart_state;
uart_byte_rx uart_byte_rx(
.Clk(Clk),
.Rst_n(Rst_n),
.baud_set(baud_set),
.Rs232_Rx(Rs232_Tx),
.data_byte(data_byte_r),
.Rx_Done(Rx_Done)
);
uart_byte_tx uart_byte_tx(
.Clk(Clk),
.Rst_n(Rst_n),
.data_byte(data_byte_t),
.send_en(send_en),
.baud_set(baud_set),
.Rs232_Tx(Rs232_Tx),
.Tx_Done(Tx_Done),
.uart_state(uart_state)
);
initial Clk = 1;
always#(`clk_period/2)Clk = ~Clk;
initial begin
Rst_n = 1'b0;
data_byte_t = 8'd0;
send_en = 1'd0;
baud_set = 3'd4;
#(`clk_period*20 + 1 );
Rst_n = 1'b1;
#(`clk_period*50);
data_byte_t = 8'haa;
send_en = 1'd1;
#`clk_period;
send_en = 1'd0;
@(posedge Tx_Done)
#(`clk_period*5000);
data_byte_t = 8'h55;
send_en = 1'd1;
#`clk_period;
send_en = 1'd0;
@(posedge Tx_Done)
#(`clk_period*5000);
$stop;
end
endmodule。