基于FPGA器件EP1C12Q240CQ8芯片实现UAR核心功能的设计

时间:2025-11-02  作者:Diven  阅读:0

引言

基于FPGA器件EP1C12Q240CQ8芯片实现UAR核心功能的设计

随着嵌入式系统的推广和应用, UART( Universal Asynchronous Receiver Transmiller)作为串行数据传输方式也得到的使用。UART允许在串行链路上进行全双工通信。串行外设到 RS 232-C异步串行接口一般采用专用的集成电路即 UART实现。常见的串行接口芯片如 8250、8251、NS16450等,能够实现比较全面的串行通信功能。而在实际应用中,我们往往并不需要如此完整的功能,从而会造成资源的浪费和成本的提高。随着 EDA技术的飞速发展,我们就可以根据自己的需求,将所需要的 UART功能集成到 FPGA内部,从而简化了电路、减小了体积、提高了系统的可靠性。基于这种思想,在设计中选用 Altera公司的 EP1C12Q240CQ8,使用 Verilog HDL设计实现 UART的核心功能。

1 UART通信原理

串行通信分为两种类型:同步通信方式和异步通行方式。 UART是通用异步发送器,是串行异步通信方式。是各种设备之间进行通信的关键模块,允许在串行链路上进行全双工的通信。在发送端,并行的数字信号需要转化成串行信号才能通过有线或无线传输到另外一台设备;而在接收端,串行信号必须要被恢复成并行信号才能进行数据处理。 UART就是用来处理这种数据与串口之间的串并和并串转换的。

UART传送一个字符以起始位 (Start Bit)开始,以停止位( Stop Bit)结束,字符之间没有固定的时间间隔要求。每一个字符的前面都有一个起始位(低电平),字符本身由 5~8位数据位组成,然后是一位校验位(可选),最后是停止位( 1位,1位半或 2位),停止位后面是不定长度的空闲位。停止位和空闲位都规定高电平,这样就可以保证起始位开始处有一个下降沿。

2 UART在 FPGA中的实现

2.1UART的硬件电路设计

在串行通信中,普遍采用的是 RS-232接口标准。硬件电路主要由 FPGA串口模块、 MAX3232和 DB-9组成,电路图如图 2所示。数据从 DB-9的 TxD端进入,经过 MAX3232进行电平转换后由 FPGA串口模块中的 RxD端进入,进行串并转换后由数据总线进入 FPGA的其模块。数据处理后经由数据总线进入 FPGA串口模块,在其中进行并串转换后由 TxD端输出到 MAX3232中,经电平转换后由 DB-9的 RxD端输出。

2.2 UART的结构设计 UART主要由波特率发生模块、发送模块、接收模块这三个部分组成。

2.2.1 波特率发生模块

当 UART在发送数据的时候,只需要按照一定的速率将数据串行地移动出就可以了。当 UART在接收串行的数据时,在什么时刻将数据移入移位寄存器是非常关键的。最理想的情况是在串行数据的每一位的中间时刻,对串行数据进行采样。对每一位数据的时间进行分段,时间的分段越多,对串行数据的采样就越靠近中点,由于接收方和发送方的时钟不可能完全同步,时间的分段越多,接收方出现采样错误的概率就越低。但时间的分段越多,也意味着采样时间就越高,系统的开销就越大。在实际的设计中,采用 16倍于波特率的时钟频率。UART收发的每一个数据宽度都是波特率发生器输出的时钟周期的 16倍。如按照 9600b/s进行收发,那么波特率发生器的输出时钟频率应为 9600×16Hz。由于外部时钟采用 25MHz,可以很简单地通过总线写入不同的数值到波特率发生器保持寄存器中,然后用计数器的方式生成所需要的各种波特率。计算公式为: 25000000/(16×所期望的波特率)-1。

2.2.2 发送模块

发送模块主要实现对并行数据的缓存,并串转换,然后把串行数据按照既定数据帧格式进行输出,其机构如图 3所示:

实验中串行数据结构为 1位起始位,8位数据位,1位奇偶校验位, 1位停止位。数据的发送由外部接收模块控制,接收模块给出 wrn信号,UART发送模块根据此信号将并行数据 data-input锁存进发送缓冲,并通过移位寄存器进行并串转换,在转换结束后加上奇偶校验位,发送到端口 txd进行串行输出。在整个工作过程中,输出信号 tbre作为标志信号,在串行数据全部输出完毕之后变成 0,并在发送模块未工作时保持为 0。

2.4接收模块

接收模块的结构如图 4所示。接收模块的作用是把收到的串行数据转换成并行数据进行输出,并判断收到数据是否有错。接收模块的内部结构及工作过程与发送模块类似,只不过接收模块的工作和发送模块的工作相反,是进行数据的串并转换。

rxd dout[7:0]

rdn data ready

rst parity-error

clk 16xframing-error

a) rxd接收串行数据输入;

b) rdn为输入控制端,只有 rdn为 0时,并行数据才允许输出;

c) data-ready为数据是否准备好的标志;

d) parity-error为校验位是否出错的标志;

e) framing-error为帧是否出错的标志;

f) data-out[7:0]为并行数据输出端。

接收模块从捕捉到数据串的第一个 0开始工作,然后把随后依次输入的 8个数据位通过移位在寄存器中完成窜并转换,并将并行数据输出至端口 data-out。将 8个数据位移位至寄存器后,接收模块将检测输入数据串的最后一位是否为 1(停止位)来判断接收到的数据帧是否出错,若不为 1,就将输出 framing-error置 1。

3 仿真验证在实验中,作者选用 Altera公司的 Cyclone系列产品中的 EP1C12Q240C8芯片,硬件描述语言采用 Verilog HDL,用 Quartus 5.1进行逻辑综合,仿真工具则使用 ModelSim6.0。发送模块和接收模块的仿真结果分别如图 5所示。发送的数据能够严格按照串行通信协议进行传输;接收的数据也完全正确。通过仿真测试后,将程序下载到 FPGA芯片中运行,结果通信数据正确,电路工作稳定、可靠。

4 结束语

用 FPGA实现了 UART通信功能,可以实现对数据的接收和发送,并可以在接收数据时对其校验位、停止位进行判断,在发送数据时可以形成完整的一帧数据格式。本文利用 FPGA设计实现了 UART的核心功能,可以和上位机进行异步串行通信。实验证明该 UART设计占用资源少,工作稳定可靠。

本文作者创新观点:本文对 UART系统结构进行了模块化分析,可以根据实际的需要可选择地实现相应的通信功能,简化了电路设计,提高了系统的可靠性,可以灵活地嵌入到各个通信系统当中。

猜您喜欢

RF调制器和解调器是无线通信系统中不可少的两个组件,各自承担着不同的功能。调制器的主要任务是将基带信号转换为适合在无线频道中传输的高频信号。通过调制,调制器可以...
2024-11-04 00:00:00

现代生活中,各种配件的需求日益增长,尤其是在科技产品和日常用品中,配件的选择直接影响到使用体验和产品性能。本文将围绕“Accessories_32X9.25MM...
2025-04-21 17:31:41

贴片电阻体积微小,如何在上面标识阻值呢?其实方法很简单,主要有三种:数字标识法、字母数字标识法和EIA-96标识法。对于三位数字标识的电阻,前两位数字表示有效数...
2025-04-14 15:03:26

如今电子设备日益普及的时代,稳定的电力供应很重要。高低压转换器DC/DC(直流-直流转换器)正是在这方面是关键配件,能够高效地将一种直流电压等级转换为另一种直流...
2024-05-13 00:00:00

在选择贴标机时,规格尺寸是一个重要的考虑因素。不同的贴标机适用于不同的产品和生产线,因此了解其规格尺寸可以帮助您做出更明智的决策。贴标机的规格尺寸包括机器的长、...
2019-02-12 00:00:00

运动传感器警报在市场上很容易获得,但是价格昂贵。这是带有语音警报的基于Arduino的简单,廉价的运动传感器警报。它可以用于安全目的。通常,对于户外监视,运动...
2023-10-15 16:13:00

在选择吹尘器时,了解其关键参数非常重要。风量是一个重要指标,通常以立方米每小时(m³/h)表示,风量越大,清洁效率越高。风压也不可忽视,单位为帕斯卡(Pa),风...
2023-09-13 00:00:00

光敏电阻,又称光电导体,是对光线敏感的电阻器件,其阻值会随入射光强度的变化而变化。光敏电阻应用于光线探测、自动照明、安防系统等领域。本文将探讨光敏电阻的阻值与光...
2025-04-19 04:01:41

生物信号是由心脏、肌肉和大脑等生物体的生理活动产生的电信号。生物信号可以提供关于受试者健康状况、情绪和认知功能的有价值信息。然而,由于生物信号的复杂性、可变性和...
2023-11-04 17:13:00

你是否好奇过,手机和笔记本电脑是如何在电池电量逐渐减少的情况下,依然保持稳定的电压输出?这背后的功臣,就是DC-DC芯片。就像是一位技艺精湛的电压转换器,将一种...
2024-01-09 00:00:00