温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
基于
Xilinx_FPGA
平台
异步
串口
通信
设计
陈明正
网络通信与安全本栏目责任编辑:代影Computer Knowledge and Technology电脑知识与技术第18卷第36期(2022年12月)第18卷第36期(2022年12月)基于Xilinx FPGA平台的异步串口通信设计陈明正1,韦昌辉2(1.贵州大学大数据与信息工程学院,贵州 贵阳 550025;2.贵州信鸽科技有限公司,贵州 贵阳 550018)摘要:随计算机和物联网技术的发展,万物互联时代存在各类外设复杂的问题,接口简单高速且实现容易的异步串行总线通信方式将成为电子工业举足轻重的关键角色。但受限于 I/O 资源、时序限制、寄存器资源等因素,一般单片机以 I/O 模拟的串行总线通信有传输速率低、无法实现真正意义上的全双工通信等问题。而FPGA 的硬件平台高度灵活的可编程逻辑资源等特点可以解决以上问题。为此,本设计使用 Verilog HDL 语言描述功能,采用基于Xilinx FPGA 平台的方案设计了一种具有完全功能的异步串行通信收发器,实现了收发双方的全双工通信。关键词:Verilog HDL;UART;FPGA中图分类号:TP391文献标识码:A文章编号:1009-3044(2022)36-0065-03开放科学(资源服务)标识码(OSID):21 世纪是智慧生活的时代,物联网发展日趋完善又将普适计算和边缘计算应用越来越广,而智慧城市的建设使得各种设备、模块之间的通信过程将增长到前所未有的规模,各种应用场景下的传感器件同主控制器以及设备之间的通信和控制都要依靠各种接口实现,随着电子工业的不断发展,传感器件的复杂程度以及传输数据量的不断增长对通信方式有着比以往更高的要求,因此总线型通信方式成为控制信息和数据的主要传输手段。而受制于功耗、成本、体积、性能等一系列因素,尽可能少的功率消耗、简单的接口逻辑以及合适的电气特性都是必不可少的,因此占用大量 I/O 资源的并行通信方式以及对时序要求严格且结构复杂的同步通信方式不可能在物联网的各个节点设备中完全使用。相比较之下,只需两个 I/O 资源和一个信号地的异步串行通信总线无异于最优选择1。自 1970 年 EIA(美国电子工业协会)牵头贝尔和其他计算机终端厂商制定出 RS-232 标准以后,RS-232 标准在异步传输应用中占据几十年主导地位2,直到 RS-484、RS-422 等新型标准问世并发展成熟。在未来的工业级市场将主要由传输距离远并且较为稳定的 RS-484/422 系列成为主流,未来异步串行通信的主要市场集中在板级通信。为此,本设计将基于 FPGA 实现一个 UART 接口并完成收发数据测试以及进行数据环回通信测试以验证 UART 接口功能和指标达成。主要包含通信协议分析、接口逻辑分析和设计、通信验证三个方面的工作,实现了全双工通信。1异步串行通信设计方案本设计的基本目标是在 ZYNQ 平台上通过逻辑门电路实现一个异步串行通信接口并成功通信,基于此目标再尝试改变波特率参数将通信速率提升,并对提升效果进行分析。其中包含数据收发测试,稳定性分析等。本设计的系统结构示意图如图1和图2所示,图1为 UART 数据收发示意图,RX 为接收端,TX 为发送端,RX_BUF 和 TX_BUF 分别为接收端缓存队列和发送端缓存队列5。图 2 为 UART 数据环回通信示意图,环回通信的主要目的是检测通信链路是否正常,具体操作为将数据发送到接收方再由接收方将数据原样发回,若数据一致,则表示数据链路正常。环回通信示意图中。RX 接收上位机发送的串行数据并保存到缓冲队列 BUF 中,再由发送端 TX 将 BUF 中的并行数据逐位转为串行数据并传输;上位机通过串口调试工具将发出和收回的数据进行比对,判断通信成败和质量。图1 UART 数据收发示意图收稿日期:2022-09-30基金项目:贵州省科技支撑计划资助项目:5G+三维可视化智慧城市综合管理平台研究与示范(课题编号:黔科合支撑 2021 一般528)作者简介:陈明正,男,贵州长顺人,本科,研究方向为信号与信息处理;韦昌辉,男,贵州赤水人,大专,工程师,研究方向为空间信息处理。E-mail:http:/Tel:+86-551-65690963 65690964ISSN 1009-3044Computer Knowledge and Technology电脑知识与技术Vol.18,No.36,December202265DOI:10.14004/ki.ckt.2022.2277本栏目责任编辑:代影网络通信与安全Computer Knowledge and Technology电脑知识与技术第18卷第36期(2022年12月)第18卷第36期(2022年12月)图2 UART 数据环回通信示意图2 Xilinx 硬件方案Xilinx 在行业中主要提供各类可编程逻辑器件,目前最先进的为 28nm 工艺的 7 系列且新增了包含SoC 的 ZYNQ 家族。ZYNQ 是包含 ARM Cortex-A9处理器的基于 Artix-7 系列的 FPGA 器件。本设计采用了 Xilinx 近年推出的 ZYNQ 家族成员之一的XC7Z020-2CLG400I 作为解决方案。ZYNQ 从构成上看属于嵌入式 SoC 类型的平台,Xilinx 推出这个家族的产品主要针对于视频流处理、驾乘辅助以及工业级自动化等对计算性能和效率要求较高的高端嵌入式应用场景。在高端应用领域尤其是像导弹控制、航空航天等任务中的一些实时控制系统中,甚至会采用 ARM 核心+FPGA+DSP 的协同实现作为解决方案。本方案采用的 XC7Z020-2CLG400I 是 Xilinx 公司的 Zynq7000 系列的芯片,该平台的 PS 系统端嵌入了两个 ARM Cortex-A9 处理器核心,主频最高可达767MHz;ARM核心通过 AMBA 总线实现内部存储器与外部存储器接口和外设的互连。PL 端基于 ARTIX-7 架构,包含 85K 逻辑单元 Logic Cells、53.2K 触发器、220 个乘法器单元以及4.9Mb BLOCK RAM。下图为 ZYNQ-7000 系列 的 SoC 架构概况。本设计采用了 Xilinx 近年推出的 ZYNQ 家族成员之一的XC7Z020-2CLG400I 作为解决方案,如图 3 和图 4所示。图3 ZYNQ-7000 系列 SoC 架构图图4 MicroZus功能框图本设计选用了微相科技推出的基于 XC7Z020-2CLG400I 核心的开发板 MicroZus,搭载 1GB ddr3、128Mbit QSPI Flash、Wi-Fi 蓝牙芯片以及各类接口,具有较多的功能和较强的性能。3异步串行通信模块设计为了验证本设计的实现情况,需要采用环回通信方式进行收发数据验证,因此系统应该有一个串口接收模块,用来接收发送端发送的数据;还要有一个串口发送模块,用于将数据发回发送端,发送端利用上位机的串口调试工具实现;此外还需要有一个对数据帧进行环回控制的模块,它负责把从串口接收模块接收到的数据进行缓存以待合适时机再转发给串口发送模块,串口发送模块再发送到接收端以实现串口数据的环回。由此可以画出本设计的系统结构图如图5所示。3.1接收模块图 5 UART 接口环回通信结构图图 6 接收模块的 ILA 时序分析图66网络通信与安全本栏目责任编辑:代影Computer Knowledge and Technology电脑知识与技术第18卷第36期(2022年12月)第18卷第36期(2022年12月)本设计所用平台为 50MHz,RX_data 是 RX 信号线从接收到信号跳变开始记录到的各个比特位,帧起始标志 start 是 RX 接到起始位下降沿电平跳变时拉高一个时钟周期的信号,用于指示接收过程的开始,同事接收标志 RX_flag 拉高,时钟计数器置零并开始计数,bit_cnt 也被置零。当位计数器 bit_cnt 的计数值达到 8 时,标志着已经开始接收终止位,帧结束标志 finish 位拉高一个位宽周期,同时将串行数据存入缓冲队列 BUF 之中,等到位计数器 bit_cnt 为 9 时 finish 位和 RX_flag 置低,标志着一个数据帧接收完成,等到 RX 信号线再一次出现下降沿的电平跳变时再开始接收新一帧数据。在接收过程中,位计数器bit_cnt 的计数依据是时钟计数器 clk_cnt 提供的,时钟计数器的最大值通过系统时钟频率和波特率计算得来,表示传输一个 bit 数据所需的系统时钟周期数,clk_cnt 每达到一次最大值,bit_cnt 便自增 1,之后clk_cnt 清零继续计数,直到 bit_cnt 达到 9 之后,clk_bnt 不再计数。对数据帧每一位的采样一般不会定在每一位的起始或者末尾位置,这主要是为了能够准确无误地接收上位机传来的数据,因为器件本身建立状态需要一定的时间,电平的跳变也不是在一个时刻内完成的,因而采样时一般将采样点定在数据位的正中央,此时是数据电平建立最稳定的时刻,可以在一定程度上降低误码率。通过对接收模块的接口和信号分析和建模,利用Verilog 进行硬件描述之后生成如下的门级网表图。左端输入接口分别为系统时钟 sys_clk,系统复位sys_rst_n 以及数据输入端 uart_rxd;右端输出分别为并行数据接口 uart_data7:0以及传输完成标志uart_done。3.2发送模块在发送模块的系统结构中,用于标志串口发送过程的 TX_flag 信号赋值给 uart_tx_busy,并通过模块端口输出。这样其他模块就可以通过检测 uart_tx_busy信号是否为低电平,从而判断串口发送模块是否处于空闲状态。若 uart_tx_busy 为高电平,那么 uart_send模块正处于发送过程,外部模块需要等待当前发送过程结束之后,环回模块才能将发送使能信号通过uart_en 接口进入发送模块,uart_en 信号用一个上升沿来启动新的发送过程。而发送模块内部也需要一个同样的使能 en_flag 信号作为发送开始的激励。接到 uart_en 后模块首先将 en_flag 拉高一个时钟,在上升沿的同时,发送过程开始,时钟计数器 clk_cnt 置零并开始计数,直到计数值达到发送一个 bit 所需的时钟周期数完全达到,再将下一位数据接入发送信号线,实现数据的并串转换。以此类推直到数据发送完成,当一帧数据发送结束时,TX_flag 拉低,此时uart_tx_busy 也会变为低电平传输到环回模块。有一些信号出现重复的波形是因为其中有一个是内部信号,而另一个是外部接入或者要输出的信号。3.3环回模块环回模块是进行环回通信时用到的一个带有判断功能的缓冲队列,在逻辑上也比较简单:接收模块在接收到一帧数据之后,由于发送模块需要进行并串行转换,所以发送时延较长,因此需要将来不及发送的数据再试存放在缓冲队列中并设置相应的新数据标志 recv_done;等到发送模块发送完一帧数据后进入空闲状态,此时环回模块会接收到uart_tx_busy 的低电平信号,此时环回模块会向发送模块的 uart_en接口发送一个时钟周期的脉冲,促使发送模块继续将缓冲队列的数据发送出去。UART 接口环回通信结构图如图5所示。环回模块还解决的一个问题是全双工环回通信时的数帧丢失问题,由于发送模块需要将数据终止位完整发送,所以接收端接收进来的数据后发送端还有半个位宽的时钟没有完成,而此时接收端的数据已经放入了BUF 并行数据接口中了,而此时发送过程正在进行,uart_en 信号无法发挥作用,因此这一帧数据将会丢失。4 UART 通信验证及分析4.1基于IAL 的数据收发验证ILA 全称集成逻辑分析仪,是 vivado 开发平台提供的一个强有力的分析工具,在工程中实例后就能对指定端口进行调试分析。本设计中数据单独的收、发功能测试无法仅凭上位机串口调试工具完成对比和时序分析,所以采用 ILA 完成。使用上位机通过串口向开发板发送