当前位置:文档之家› 带fifo的串口发送器FPGA实现

带fifo的串口发送器FPGA实现

带fifo的串口发送器FPGA实现
带fifo的串口发送器FPGA实现

带fifo的Uart发送器的FPGA实现

FPGA使用Altera公司EP4C15F17C8N芯片,它的性能优越,支持大部分IP核使用。常用它来学习NIOS II。使用它实现带FIFO的串口。

首先,对uart的实现进行设计。

Uart的时序如下图所示:

一般使用Uart时,配置为无校验,一个停止位,一个起始位,8位数据。其中尤其重要的为波特率的设置。

波特率对应了Uart通信的位宽,用FPGA实现Uart其实就是对通信位宽的调制。位宽通过基础时钟分频得到。

Uart波特率计算及实现

以9600波特率为例计算:9600的意思为每秒传输的bit数为9600,所以位宽为:

1/9600s ,换算为ns为:104167ns。那么,如果时钟频率为25MHz,位宽系数为:104167/40 = 2604。综合上述分析,可以得到一个公式,即:分频系数= 时钟频率/波特率。

例如:115200波特率,50MHz时钟其对应位宽为:50000000/115200 = 434。

那么以115200波特率,50MHz时钟为例实现Uart的发送。计时器对时钟计数,经过434个周期之后,对计数器加1操作,对相应的信号进行操作,即可实现,它的源代码如下:

always @(posedge clk or negedge rst)

if(rst == 1'd0) count <= 17'd0;

else if(count == 17'd434) count <= 17'd0;

else count <= count + 1'd1;

wire sendclk = (count == 17'd434);

根据sendclk对Uart进行实现,代码如下:

always @(posedge clk or negedge rst)

if(rst == 1'b0) TX <= 1'b1;

else if(FIFOempty == 1'b1) begin TX <= 1'b1; end

else

case(txcount)

4'd0: TX <= 1'b0; //start bit is low

4'd1: TX <= fifodata[0];

4'd2: TX <= fifodata[1];

4'd3: TX <= fifodata[2];

4'd4: TX <= fifodata[3];

4'd5: TX <= fifodata[4];

4'd6: TX <= fifodata[5];

4'd7: TX <= fifodata[6];

4'd8: TX <= fifodata[7];

4'd9: TX <= 1'b1; // stop bits

default: TX <= 1'b1 ;

endcase

它包含了一个有限状态机。

需要注意的地方:为了使串口通信准确无误,要使TX信号在Uart的空闲时期全部置1才行,否则发送数据会出错。作者因为TX在rst时,将其初始化为0,导致发送的数据移位。这个要避免。

调试工具:U口转串口,串口调试助手。

FIFO的设计和实现:

FIFO使用同步时钟,即SCFIFO。需要注意满、空、读请求、写请求的操作,时钟一般使用基础时钟。

在空的时候不能读。

在满的时候不能写。

需要注意的问题是:

当输入的数据速度大于输出的数据速度时,会丢数!

举一个例子:

115200波特率的串口:11520字符/s,将此速度作为输出速度。

输入的数据速度:(时钟为50MHz)4096个时钟周期发送10个字符,即:10*10^9/20 = 121070,这样输入的数据速度大于输出的速度,导致最终FIFO写满,所以会丢数。所以数据输入的速度小于输出的速度才行。

基于FPGA串口通信的电路和程序设计

中北大学 毕业设计中期总结 学生姓名:袁财源学号:1206044145 学院:仪器科学与技术 专业:电子科学与技术 设计题目:基于FPGA串口通信的 电路和程序设计 指导教师: 郭涛 2015 年1月5日

毕业设计中期总结

1.开题以来所做的具体工作和取得的进展或成果(方案、图纸、代码等支撑,任务书要求与已完成工作对照表) 1.设计方案 RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。使用RS232串口通信接口模块的目的是用于电平转换。由于FPGA输出的TTL电平与串口发送的电平不一致,因此,采用电平转换器MAX232。MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器,以便在单5V 电源供电时提供EIA/TIA-232-E电平,来实现RS232信号和单片机串口信号之间的电平转换。其工作电压3.0-5.5V,可将TTL电平转换成RS-232标准电平。从而实现了FPGA 与上位机之间的串口通信。 FPGA上位机 MAX232 电路主要框图 2.相关知识

MAX232芯片结构 第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v 和-12v两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。 第三部分是供电。15脚GND、16脚VCC(+5v)。 RS232 (DB9)引脚定义 1 :DCD :载波检测。主要用于Modem通知计算机其处于在线状态,即Modem检测到拨号音,处于在线状态。 2 :RXD:此引脚用于接收外部设备送来的数据;在你使用Modem时,你会发现RXD 指示灯在闪烁,说明RXD引脚上有数据进入。 3 :TXD:此引脚将计算机的数据发送给外部设备;在你使用Modem时,你会发现TXD 指示灯在闪烁,说明计算机正在通过TXD引脚发送数据。 4 :DTR:数据终端就绪;当此引脚高电平时,通知Modem可以进行数据传输,计算机已经准备好。 5 :GND:信号地;此位不做过多解释。 6 :DSR:数据设备就绪;此引脚高电平时,通知计算机Modem已经准备好,可以进行数据通讯了。 7 :RTS:请求发送;此脚由计算机来控制,用以通知Modem马上传送数据至计算机;否则,Modem将收到的数据暂时放入缓冲区中。 8 :CTS: 清除发送;此脚由Modem控制,用以通知计算机将欲传的数据送至Modem。 9 :RI : Modem通知计算机有呼叫进来,是否接听呼叫由计算机决定。

基于FPGA的通用异步收发器设计(串口通信)

FPGA串行通用异步收发器设计 实验目的:1、掌握QuartusII6.0等EDA工具软件的基本使用; 2、熟悉VHDL硬件描述语言编程及其调试方法; 3、学习用FPGA实现接口电路设计。 实验内容: 本实验目标是利用FPGA逻辑资源,编程设计实现一个串行通用异步收发器。实验环境为EDA实验箱。电路设计采用VHDL硬件描述语言编程实现,开发软件为QuartusII6.0。 1、UART简介 UART(Universal Asynchronous Receiver Transmitter通用异步收发器)是一种应用广泛的短距离串行传输接口。常常用于短距离、低速、低成本的通讯中。8250、8251、NS16450等芯片都是常见的UART器件。 基本的UART通信只需要两条信号线(RXD、TXD)就可以完成数据的相互通信,接收与发送是全双工形式。TXD是UART发送端,为输出;RXD是UART接收端,为输入。 UART的基本特点是: (1)在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态。 (2)起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接受器数据传输即将开始。 (3)数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),低位(LSB)在前,高位(MSB)在后。 (4)校验位(parity Bit):可以认为是一个特殊的数据位。校验位一般用来判断接收的数据位有无错误,一般是奇偶校验。在使用中,该位常常取消。 (5)停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态。 (6)位时间:即每个位的时间宽度。起始位、数据位、校验位的位宽度是一致的,停止位有0.5位、1位、1.5位格式,一般为1位。 (7)帧:从起始位开始到停止位结束的时间间隔称之为一帧。 (8)波特率:UART的传送速率,用于说明数据传送的快慢。在串行通信中,数据是按位进行传送的,因此传送速率用每秒钟传送数据位的数目来表示,称之为波特率。如波特率9600=9600bps(位/秒)。 FPGA UART系统组成:如下图所示,FPGA UART由三个子模块组成:波特率发生器;接收模块;发送模块; 2、模块设计:

基于fpga的串口通信

基于FPGA的串口通信设计 学号: 姓名: 班级: 指导教师: 电子与控制工程学院

一、串行通信系统 1.1概述 在计算机系统和微机网络的快速发展领域里串行通信在数据通信及控制系统中得到广泛的应用。UART 即Universal AsynchronousReceiver Transmitter 通用异步收发器 协议是数据通信及控制系统中广泛使用的一种全双工串行数据传输协议 在实际工业生产中有时并不使用UART的全部功能。只需将其核心功能集成即可。波特率发生器、接收器和发送器是UART的三个核心功能模块 利用Verilog-HDL语言对这三个功能模块进行描述并加以整合UART是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。串行外设用到RS232-C异步串行接口 一般采用专用的集成电路即UART实现。如8250、8251、NS16450等芯片都是常见的UART器件 这类芯片已经相当复杂有的含有许多辅助的模块 如FIFO有时我们不需要使用完整UART的功能和这些辅助功能。或者设计上用到了FPGA/CPLD器件那么我们就可以将所需要的UART功能集成到FPGA内部。使用VHDL或Veriolog -HDL将UART的核心功能集成从而使整个设计更加紧凑、稳定且可靠。本文应用EDA技术 基于FPGA/CPLD器件设计与实现UART。 通信指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递从广义上指需要信息的双方或多方在不违背各自意愿的情况下无论采用何种方法使用何种媒质 将信息从某方准确安全传送到另方。通信在不同的环境下有不同的解释在出现电波传递通信后通信(Communication)被单一解释为信息的传递是指由一地向另一地进行信息的传输与交换其目的是传输消息。然而通信是在人类实践过程中随着社会生产力的发展对传递消息的要求不断提升使得人类文明不断进步。在各种各样的通信方式中利用“电”来传递消息的通信方法称为电信(Telecommunication) 这种通信具有迅速、准确、可靠等特点且几乎不受时间、地点、空间、距离的限制 因而得到了飞速发展和广泛应用。 1.2串行通信简介 计算机与计算机,计算机与外部设备进行数据交换也称为通信,一般有两种方式并行通信和串行通信。信息的各位数据被同时传送的通信方法是并行通信并行通信依靠I/O接口来实现。并行通信中数据有多少位就需要多少条信号传输线。这种通信方式快,但由于传输线较多,所以成本较高,仅适合近距离通信通常传送距离小于30米。当距离大于30米时则多采用串行通信方式串行通信是指外部设备和计算机间使用一根数据线另外需要地线可能还需要控制线进行数据

串口通信FPGA实现

FPGA设计与应用 串口通信实验报告 班级:1105103 姓名:苏林效 学号:1110510321 日期:2014年10月29日

实验性质:验证性实验类型:必做 开课单位:电信院学时:2学时 一、实验目的 1、了解串口通信的基本原理; 2、掌握锁相环的基本原理和使用方法; 3、掌握起始位和停止位的含义及实现方法; 4、掌握VHDL状态机的基本使用方法; 5、掌握基本的接口设计和调试技巧; 二、实验准备 2.1 串口通信原理(1分) 串口通信是以字节为单位,按位传输数据和接收数据的。 先看一下发送数据:串行线缆的两端事先约定好串行传输的参数(传输速度、传输格式等),之后进行传输,①当没有数据传输的时候,发送端向数据线上发送“1”;②当要传输数据时,发送端先发送一个“0”来表示要传输数据了,这样当接收端检测到“0”便可以知道有数据到来了;③开始传输后,数据以约定的速度和格式传输;④每次传输完成一个字节之后,都在其后发送一个停止位“1”。这样,发送数据就结束了。 再来看接收数据,初始状态是等待状态,接收的一直是“1”,当检测到0时进入检验状态,在检验状态下如果再检测到0(一般采用过采样)则进入接收数据状态,当接收完8位比特数后判断是否有停止位,如果有则此字节接收结束,重新进入等待状态准备接受下一字节。 2.2 锁相环的基本原理(1分) 锁相环是以锁定输入载波信号的相位为目标的一种载波环实现形式。它由三部分组成:鉴相器(PD)、环路滤波器(LPF)和压控振荡器(VCO)。如上图。 锁相环的工作原理:压控振荡器的输出经过采集并分频,后与基准信号同时

输入鉴相器。鉴相器通过比较上述两个信号的相位差,输出结果通过环路滤波器,滤除噪声和高频分量,然后输出一个直流脉冲电压,用它来控制VCO ,使它的频率改变,使()lim 0c p t θ=。经过较短时间后,VCO 的输出稳定于某一值。环路一旦进入锁定状态后,压控振荡器的输出信号与环路的输入信号(参考信号)相位时刻保持一致。 三、代码及测试 3.1程序及分析(2分) 顶层原理图如上所示,主要包括三个模块,锁相环(输出57.69MHz )、分频(输出接受时的10倍采样速率和数码管显示速率)、接受(按57.6kbps 接受从串口发来的数据)。 分频模块代码: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIV IS PORT(CLK : IN STD_LOGIC; --锁相环输出时钟57.69M COUT1 : OUT STD_LOGIC; --分频器输出采样时钟576k COUT2 : OUT STD_LOGIC);

FPGA串口通信汇总

FPGA实验报告 目录 FPGA实验报告 (1) 目录 (1)

基于VHDL的串口通信实现设计 (3) 摘要 (3) 正文 (3) 1.研究背景知识 (3) 1.1串口简介 (3) 1.2串口通信参数 (3) 2.系统整体设计 (5) 2.1 系统框图 (5) 2.2原理图 (5) 2.3管脚介绍: (6) 3. 系统模块设计 (6) 3.1分频模块 (6) 3.11流程图 (6) 3.12程序 (7) 3.2接收模块 (8) 3.21流程图 (8) 3.22程序 (9) 3.3发送模块 (10) 3.31流程图 (10) 3.32程序 (11) 4. 系统调试 (12) 4.1 时序调试 (12) 4.2硬件调试 (13) 5.总结 (14)

基于VHDL的串口通信实现设计 摘要 串口是计算机上一种非常通用设备通信的协议,其特点是通信线路简单,成本低,特别适用于远距离通信,因此有较为广泛的应用。为了深入了解串口,本课程设计基于VHDL语言,利用FPGA开发板实现了板间串口通信。在程序设计中,考虑到串口波特率、数据格式等参数,共采用了四个模块:分频模块(即波特率产生模块),接受模块,发送模块,显示模块。通过软件和开发板调试,实现了板和串口调试助手收发数据,软件改变波特率等参数,并在数码管显示的功能。 关键词:串口VHDL FPGA 分频接收发送显示 正文 1.研究背景知识 1.1串口简介 串行接口Serial Interface是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。 串口通信的两种最基本的方式:同步串行通信方式和异步串行通信方式。 1.2串口通信参数 双方为了可以进行通信,必须要遵守一定的通信规则,这个共同的规则就是通信端口的初始化。通信端口的初始化有以下几项必须设置: 1.数据的传输速率 传输双方通过传输线的电压改变来交换数据,但传输线的电压改变的速度必须和接收端的接收速度保持一致,RS-232通常用于异步传输,即双方并没有一个可参考的同步时钟作为基准。由于没有一个参考时钟,双方所发送的高低电位

FPGA与单片机实现数据RS232串口通信的设计

FPGA与单片机实现数据RS232串口通信 的设计 发布时间:2010-9-2 发布人:21世纪电子网 摘要:本文针对由FPGA构成的高速数据采集系统数据处理能力弱的问题,提出FPGA与单片机实现数据串行通信的解决方案。在通信过程中完全遵守RS232协议,具有较强的通用性和推广价值。 1 前言 现场可编程逻辑器件(FPGA)在高速采集系统中的应用越来越广,由于FPGA对采集到的数据的处理能力比较差,故需要将其采集到的数据送到其他CPU系统来实现数据的处理功能,这就使FPGA系统与其他CPU系统之间的数据通信提到日程上,得到人们的急切关注。本文介绍利用VHDL语言实现 FPGA与单片机的串口异步通信电路。 整个设计采用模块化的设计思想,可分为四个模块:FPGA数据发送模块,FPGA 波特率发生控制模块,FPGA总体接口模块以及单片机数据接收模块。本文着重对FPGA数据发送模块实现进行说明。 2 FPGA数据发送模块的设计 根据RS232 异步串行通信来的帧格式,在FPGA发送模块中采用的每一帧格式为:1位开始位 8位数据位 1位奇校验位 1位停止位,波特率为2400。本系统设计的是将一个16位的数据封装成高位帧和低位帧两个帧进行发送,先发送低位帧,再发送高位帧,在传输数据时,加上文件头和数据长度,文件头用555555来表示,只有单片机收到555555时,才将下面传输的数据长度和数据位进行接收,并进行奇校验位的检验,正确就对收到的数据进行存储处理功能,数据长度可以根据需要任意改变。由设置的波特率可以算出分频系数,具体算法为分频系数X=CLK/(BOUND*2)。可由此式算出所需的任意波特率。下面是实现上述功能的VHDL源程序。 Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity atel2_bin is port( txclk: in std_logic; --2400Hz的波特率时钟 reset: in std_logic; --复位信号 din: in std_logic_vector(15 downto 0); --发送的数据 start: in std_logic; --允许传输信号 sout: out std_logic --串行输出端口 ); end atel2_bin; architecture behav of atel2_bin is signal thr,len: std_logic_vector(15 downto 0); signal txcnt_r: std_logic_vector(2 downto 0); signal sout1: std_logic;

基于FPGA的串口控制器设计

基于FPGA的串口控制器设计 简介 使用硬件描述语言 (HDL) 设计和开发验证FPGA的成为当前的主流因素。使用行为级描述不只增加了产品的设计效率,也在设计中有独特的验证方式。目前最流行的HDL语言为Verilog 和 VHDL。这篇文章将会举例说明用 Verilog语言的设计和验证数字异步串行收发器UART。 UART介绍 通用异步串行收发器UART中有二个独立的VHDL模块。一个模块实现发射功能, 当另一个实现接收功能,发射和接收功能模块在顶端设计时组合到一起使用,接收和发射的组合是通信通道所必需的。数据写入发射器,从接收器读出,所有的数据是以二进制8字节的信号通过CPU接口。在顶端设计时,地址有发射器映射,而且接收器通道能容易地建立从儿进入接口,两者工用一个称为mclkx 16主控时钟,在每个模块中 mclkx 16 被分成独立的波特率时钟。 UART的功能概况 UART的基本功能概况见下表. 在左边显示传输保持记录,移位记录,传输控制时钟,全部集中在发射机的txmit端。在右边的是显示接收移位寄存器, 接收记录和控制逻辑时钟,所有都包含在接收模块的rxcver端,这两个模组都单独的投入与产出,大部分的控制线,只有双向数据总线, 主时钟和复位线共享的模块。

顶层UART系统的I/O功能描述 UART的标准数据格式 图3显示了UART的串行数据格式,串行数据包含在帧8个数据字节,以及编码信息比特,在连续传输线路高通,在传输初始化时开始低一点.,接下来的低一点开始到8比特的数据信息, 低位对于后边高位有重要的作用。然后后边的8 bits数据进行奇偶校验 ,反馈8位数据的结果。 UART时序图 下面显示怎么将从寄存器里出来的数据写给移位寄存器,并在上升沿速率时钟时,转向tx输出。 发送时间如下表,如何得到数据从rx传输到接收移位寄存器然后存储。

基于FPGA的串口通信电路设计与实现

基于FPGA的串口通信电路设计与实现 发表时间:2018-11-07T09:39:41.587Z 来源:《防护工程》2018年第17期作者:马龙[导读] 由于现代工业企业中在线监测的日益增长。需要PC机与更多设备进行通信,串口通信具有实现简单,使用灵活。数据传输准确等优点。 陕西烽火电子股份有限公司陕西宝鸡 721000 摘要:由于现代工业企业中在线监测的日益增长。需要PC机与更多设备进行通信,串口通信具有实现简单,使用灵活。数据传输准确等优点。在工业监控和实时监控系统中得到了广泛应用。由于监测设备的增加。PC机原有的串口不能再满足通信的需求,传统的设计方法是使用硬件扩展八个串口,但是额外增加了硬件设计成本和实际编程的难度。然而FPGA的UARTIP可灵活定制的优点使得基于黜的设计方法无需额外的硬件串口扩展,减少了硬件开发调试的难度,同时满足串行传输的要求。基于此,本文主要对基于FPGA的串口通信电路设计与实现进行分析探讨。 关键词:基于FPGA;串口通信;电路设计;实现 1、前言 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是作为专用集成电路领域中一种半定制电路出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。FPGA中具有丰富的触发器和I/O口,采用描述语言(VHDL和VerilogHDL)进行设计,用户可以根据需要,描述出具有各种功能的电路。基于以上原因,我们可以利用FPGA实现多串口通信中的数据转换和中断控制功能,从而简化电路、缩小PCB面积,也可以很方便的进行升级改动和模块移植。 2、设计要求 整个设计的硬件电路以DSP和FPGA为主构架,DSP和FPGA之间通过DSP的EMIF接口连接。其中,DSP是主处理器,用于实现串口数据的处理,FPGA作为DSP的外围电路,实现UART模块的串行数据的接收和发送、数据的串并/并串转换及接收中断的产生,同时,实现多串口的中断控制功能。当有接收数据时,FPGA通过中断方式通知DSP。 UART模块的数据格式:波特率可以按标准波特率设置;按字节接收,每个字节前包含一个起始位(低电平,逻辑值0),无校验位,最后是一位停止位和不定长度的空闲位(高电平,逻辑值1);接收到一个完整字节后产生一个中断(高电平,逻辑值1),当数据被读取后,中断信号复位(低电平,逻辑值0)。中断控制器应能实现8路UART模块的中断接收和处理,最后给DSP输出一个中断信号,输入的各中断信号之间无优先级设定。 3、设计方案 完整的设计由时钟管理模块、接口模块、UART模块和中断控制器组成。时钟管理模块产生设计中所需各种时钟,包括主处理时钟和接收与发送的波特率时钟;接口模块实现DSP和FPGA之间的中断、读写功能;UART模块由接收和发送子模块组成,实现数据的串行接收和串行发送功能;中断控制器由中断采样子模块和中断处理子模块组成,实现8路UART中断接收和处理功能。下面分别对这些模块的设计给予描述。 3.1 时钟管理模块 设输入FPGA的时钟为50MHz,则主处理时钟设计为50MHz。U A R T 的接收和发送采用相同的波特率进行,本设计中采用115200b/s进行收发,这就需要对50MHz时钟进行分频以产生所需的波特率。 3.2 接口模块 接口模块连接时钟管理模块、UART模块和中断处理器,并与DSP采用EMIF总线相连接。与DSP相关的信号有:wr_n、rd_n、cs_n、addrs、data_bus和dsp_int,在cs_n和wr_n有效时,DSP通过addrs选通不同的UART模块,将需要发送的并行数据发送给发送寄存器,执行发送功能。DSP响应外部中断时,在cs_n和rd_n有效时,通过addrs读取中断控制器的中断矢量和UART模块接收的数据。 3.3 UART模块 3.3.1 发送模块 根据UART模块的数据格式,发送状态机如图1所示。

基于FPGA的串口通信设计

基于FPGA的UART设计与实现 0引言 通用异步收发器(Universal Asynchronous Receiver /Transmitter , UART) 可以和各种标准串行接口,如RS232和RS485等进行全双工异步通信,具有传输距离远、成本低、可靠性高等优点。一般UART由专用芯片如8250, 16450来 实现,但专用芯片引脚都较多,内含许多辅助功能,在实际使用时往往只需要用到UART 勺基本功能,使用专用芯片会造成资源浪费和成本提高。 一般而言UART和外界通信只需要两条信号线RXD和TXD其中RXD是UART 的接收端,TXD是UART勺发送端,接收与发送是全双工形式。由于可编程逻辑器件技术的快速发展,FPGA勺功能日益强大,其开发周期短、可重复编程的优点也越来越明显,在FPGA 芯片上集成UART功能模块并和其他模块组合可以很方便地实现一个能与其他设备进行串行通信的片上系统。 FPGA(Field Programmable Gate Array) 现场可编程门阵列在数字电路的设 计中已经被广泛使用。这种设计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性。 1 UART功能设计 1.1 UART的工作原理 异步通信时,UART发送/接收数据的传输格式表1所示,一个字符单位由开始位、数据位、停止位组成。 表1 UART发送/接收数据的传输格式 异步通信的一帧传输经历以下步骤: (1)无传输。发送方连续发送信号,处于信息“ 1”状态。 (2)起始传输。发送方在任何时刻将传号变成空号,即“1”跳变到“O', 并持续1位时间表明发送方开始传输数据。而同时,接收方收到空号后,开始与发送方同步,并期望收到随后的数据。 (3)奇偶传输。数据传输之后是可供选择的奇偶位发送或接收。 (4)停止传输。最后是发送或接收的停止位,其状态恒为“1”。 发送或接收一个完整的字节信息,首先是一个作为起始位的逻辑“0”位, 接着是8个数据位,然后是停止位逻辑“ 1”位,数据线空闲时为高或“ T状态。起始位

FPGA高速串行通信

FPGA高速串行通信 1 引言 在许多实际运用的场合中,数字信号传输具有数据量大,传输速度高,采用串行传输等特点。这就要求数据收发双方采用合理的编解码方式及高速器件。数字信号传输一般分并行传输、串行传输两种。并行传输具有数据源和数据目的地物理连接方便,误码率低,传输速率高。但是并行传输方式要求各条线路同步,因此需要传输定时和控制信号,而其各路信号在经过转发与放大处理后,将引起不同的延迟与畸变,难以实现并行同步。若采用更复杂的技术、设备与线路,其成本会显著上升。而高速远程数据传输一般采用串行同步传输。传统建立准确的时钟信号的方法是采用锁相环技术。但锁相环有若干个明显缺陷,一是其同步建立时间及调整精度即使采用变阶的方法也很难兼顾;二是锁相环需要一个高精度高频率的本地时钟。本文所讨论的两种串行同步传输方法,无需高频率时钟信号,就可完全数字化。采用Altera公司的ACEXlK系列器件完成电路设计,且外围电路简单,成本低,效果好。 2主要器件介绍 编码和解码采用ACEXlK系列器件EPlK100QC208-2。ACEXlK器件是Altera 公司针对通信、音频处理及类似场合应用而设计的。该系列器件具有如下特性: 高性能。采用查找表(LUT)和嵌入式阵列块(EAB)相结合的结构,适用于实现复杂逻辑功能和存储器功能,例如通信中应用的DSP、多通道数据处理、数据传递和微控制等; 高密度。典型门数为1万到10万门,有多达49 152位的RAM(每个EAB有4 096位RAM)。 系统性能。器件内核采用2.5 V电压,功耗低,其多电压引脚驱动2.5 V、3.3 V、5.0 V的器件,也可被这些电压所驱动,双向I/O引脚执行速度可达250 MHz; 灵活的内部互联。具有快速连续式延时可预测的快速通道互连。

基于FPGA的UART串口接收模块设计.doc

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、数据接收模块 串口接收模块整体结构图: 波特率时钟计算:

FPGA实现串口通信

FPGA实现串口通信 UART接收。因为只有数据线,没有时钟,这种叫异步通信。 首先双方必须约定好通信用的时钟频率,但是双方用的时钟必定有误差,而且不知道每个bit的起始时间。这两点是造成你有时候收到对的,有时候收到错的原因。所以必须要用高倍的时钟来采样,一般用8倍、16倍。 仅仅简单实现的话,用8倍举例,如果另一块板子(或PC)发过来的是数据,发送一个bit用的时钟频率是115200Hz的话,那么自己板子上要先产生一个115200x 8 = 921600Hz 的内部时钟。用这个时钟对收到的串行数据进行采样,理论上讲,每个bit可以得到7-8个采样点。 如果FPGA晶振是50000000Hz(50MHz),则54.25分频得到921600Hz。 分频模块 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_arith.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Clk_DIV is port (clk : in std_logic; CLK_O : out std_logic ); end Clk_DIV; architecture Clk_DIV_arch of Clk_DIV is signal clk1,clk2 : std_logic; signal s1,s2 : integer range 0 to 53; begin process(clk) begin if rising_edge(clk) then if s1 < 53 then s1<= s1+1; else s1<=0; end if; if s1 < 28 then clk1 <= '1'; else clk1 <= '0'; end if; end if; end process; process(clk) begin if falling_edge(clk) then if s2 < 53 then s2<= s2+1; else

基于FPGA与PC串口自收发通信-Verilog

FPGA与PC串口自收发通信 实现的功能如题,就是FPGA里实现从PC接收数据,然后把接收到的数据发回去。 使用的是串口UART协议进行收发数据。上位机用的是通用的串口调试助手。 发送数据的波特率可选9600bps,19200bps,38400bps,57600bps,115200bps等,是可调的。发送格式为:1bit起始位,8bit数据,1bit停止位,无校验位。 以下的代码有比较详细的注释,经过下载验证,存在误码率(<5%),仅供学习!代码如下: (顶层模块): module my_uart_top(clk,rst_n,rs232_rx,rs232_tx); input clk; // 50MHz主时钟 input rst_n; //低电平复位信号 input rs232_rx; // RS232接收数据信号 output rs232_tx; // RS232发送数据信号 wire bps_start; //接收到数据后,波特率时钟启动信号置位 wire clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点 wire[7:0] rx_data;

//接收数据寄存器,保存直至下一个数据来到 wire rx_int; //接收数据中断信号,接收到数据期间始终为高电平 //---------------------------------------------------- speed_select speed_select( .clk(clk), //波特率选择模块,接收和发送模块复用,不支持全双工通信.rst_n(rst_n), .bps_start(bps_start), .clk_bps(clk_bps) ); my_uart_rx my_uart_rx( .clk(clk), //接收数据模块 .rst_n(rst_n), .rs232_rx(rs232_rx), .clk_bps(clk_bps),

51单片机与fpga进行串行通信

51单片机与fpga进行串行通信,并显示到LCD上。下面给出串口通信USart部分程序:1.FPGA程序: Module1(协议部分): Library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity tx is port( din:in std_logic_vector(7 downto 0); sout:out std_logic; clk:in std_logic; len_r:out std_Logic_vector(3 downto 0); txclk:in std_logic ); end tx; architecture Behavioral of tx is type s is(start,shift,stop,delay1,delay2); --type s is(start1,shift1,stop1,delay1,start2,shift2,stop2,delay2,start3,shift3,stop3,delay3,start4,shift4,sto p4,delay4); signal state:s:=start; signal txcnt_r,len: std_logic_vector(3 downto 0); signal sout1: std_logic; signal thr:std_logic_vector(7 downto 0); signal clk1:std_logic; begin process(txclk) begin

基于FPGA的数据高速串行通信实现

基于FPGA的数据高速串行通信实现 1 引言 在许多实际运用的场合中,数字信号传输具有数据量大,传输速度高,采用串行传输等特点。这就要求数据收发双方采用合理的编解码方式及高速器件。数字信号传输一般分并行传输、串行传输两种。并行传输具有数据源和数据目的地物理连接方便,误码率低,传输速率高。但是并行传输方式要求各条线路同步,因此需要传输定时和控制信号,而其各路信号在经过转发与放大处理后,将引起不同的延迟与畸变,难以实现并行同步。若采用更复杂的技术、设备与线路,其成本会显著上升。而高速远程数据传输一般采用串行同步传输。传统建立准确的时钟信号的方法是采用锁相环技术。但锁相环有若干个明显缺陷,一是其同步建立时间及调整精度即使采用变阶的方法也很难兼顾;二是锁相环需要一个高精度高频率的本地时钟。本文所讨论的两种串行同步传输方法,无需高频率时钟信号,就可完全数字化。采用Altera公司的ACEXlK系列器件完成电路设计,且外围电路简单,成本低,效果好。 2主要器件介绍 编码和解码采用ACEXlK系列器件EPlK100QC208-2。ACEXlK器件是Altera 公司针对通信、音频处理及类似场合应用而设计的。该系列器件具有如下特性: 高性能。采用查找表(LUT)和嵌入式阵列块(EAB)相结合的结构,适用于实现复杂逻辑功能和存储器功能,例如通信中应用的DSP、多通道数据处理、数据传递和微控制等; 高密度。典型门数为1万到10万门,有多达49 152位的RAM(每个EAB有4 096位RAM)。 系统性能。器件内核采用2.5 V电压,功耗低,其多电压引脚驱动2.5 V、3.3 V、5.0 V的器件,也可被这些电压所驱动,双向I/O引脚执行速度可达250 MHz; 灵活的内部互联。具有快速连续式延时可预测的快速通道互连。

基于FPGA的多串口通信电路设计

基于FPGA的多串口通信电路设计 姓名:周保朋 专业:集成电路设计与集成系统 指导老师:王祖强

目录 摘要摘要 随着计算机系统和微机网络的快速发展,串行通信在数据通信及控制系统中得到广泛的应用。各种新型通用异步串行接收/发送器UART(Universal Asynchronous Receiver Transmitter),它们较好的满足了时下的需求,并且能够实现比较全面的串行通信功能;但是常用UART芯片比较复杂且移植性差,而且在实际应用过程中,我们只需要其部分的功能,因而造成一定的资源浪费。本设计提出一种采用可编程器件FPGA 实现UART 的方法,实现了对UART 的模块化设计方法。最后将UART的核心功能集成到FPGA上,使整体设计紧凑,小巧,实现的UART功能。 本说明书在介绍串行通信、可编程ASIC和VHDL语言之后,着重讨论了如何使用FPGA 现多串口模块,提出了一种专用异步串行通信电路的FPGA实现方法,具体描述了发送、接收、波特率发生模块及接口模块的设计,详细阐述了各个模块的流程、结构与设计细节,并且给出了各个模块及整个系统的仿真结果及分析。该电路根据实际应用中串口复用的要求,扩展四路串口,形成一个多串口模块。这样便充分利用FPGA的资源,提高了设计的灵活性和稳定性,简化了电路、缩小了体积、提高了稳定性,具有更大的灵活性。 关键词:可编程专用集成电路;串行通信;通用异步串口;系统级芯片;IP核。

Abstract Following the rapid develop of the computer system and network,the serial communication is used widely in the data transmission and the control system. Many kind of new-type asynchronous transmitter /receiver,such as PC16550,could satisfy a present need, and can carry out a more overall function of serial communication.but when it came into the practice ,But in common, the UART chips is very complicated and its transplantation is bad,and also we just need the part function of them,so this can be seem to be a resource waste.his design give a new method that using programmable logic device FPGA to realize UART.it carries out the model design for the UART, and Integrate the Core function of UART to the FPGA,make the whole design very well-knit ,little,and the function is so stable and dependable. This thesis emphasize to discuss how to use FPGA to emulate several-serial-port module, after the introducing of serial communicating ,FPGA and the VHDL language .And a new realizing method which carry out by FPGA is given out for the special use of asynchronous serial data transmission. this thesis has descriptied the details design of transmission module ,receive module ,the origination of baud rate module and the interface module,such as every model ‘s process,structure and the design details , and give each mold piece and the whole system imitate result and analysis.according to the request of serial ports multiplexing in practice, we expand four serial port to get a module of serial ports . All those make good use of a FPGA resources, raise the vivid and stability of design, and simplify electric circuit,reduce physical volume and improve a stability,and have more flexibility. Key words: FPGA ;UART ;SOC;serial communication; IP cores. 随着微处理器(单片机、DSP等)的性能价格比不断提高,数据处理能力不断加强,其应用领域日益增多。当在实时数据采集及数字信号处理等应用中,微处理器往往需要使用串口和多个外设进行数据交换,如何实现其多串口通信成为系统设计的关键。本设计的主要内容是在对当前应用的多串口通信方法进行对比

FPGA串口通信

FPGA实现RS-232串口收发的仿真过程(Quartus+Synplify+ModelSim)(2007-09-11 12:17:37) 网上关于RS-232的异步收发介绍得很多,最近没事学着摸索用ModelSim来做时序仿真,就结合网上的参考资料和自己的琢磨,做了这个东西。 针对我这个小程序结合FPGA的开发流程,主要走了以下几步: 1. 文本程序输入(Verilog HDL) 2. 功能仿真(ModelSim,查看逻辑功能是否正确,要写一个Test Bench) 3. 综合(Synplify Pro,程序综合成网表) 4. 布局布线(Quartus II,根据我选定的FPGA器件型号,将网表布到器件中,并估算出相应的时延) 5. 时序仿真(ModelSim,根据时延做进一步仿真) 这里贴出我的程序和各个详细步骤,能和各位正在学习的新手们一起分享。 0. 原理 略 一、文本程序输入(Verilog HDL) 发送端: module trans(clk, rst, TxD_start, TxD_data, TxD, TxD_busy ); input clk, rst, TxD_start; input[7:0] TxD_data; // 待发送的数据 output TxD, // 输出端口发送的串口数据 TxD_busy; reg TxD; reg [7:0] TxD_dataReg; // 寄存器发送模式,因为在串口发送过程中输入端不可能一直保持有效电平 reg [3:0] state; parameter ClkFrequency = 25000000; // 时钟频率-25 MHz parameter Baud = 115200; // 串口波特率-115200

相关主题
文本预览
相关文档 最新文档