APP下载

基于FPGA的参数可调RS422接口电路设计实现

2015-12-20王俊超王恒亮

电子科技 2015年2期
关键词:数据位接收数据命令

王俊超,王恒亮

(西安电子科技大学电子信息攻防对抗与仿真重点实验室,陕西西安 710071)

当前应用广泛的串行通信接口标准主要有RS232,RS422和RS485,其中RS232串行通信方式采用单端输入输出,传输距离短、通信速率低、抗干扰性能差;RS485与RS422均采用差分串行输入输出,但RS485只有一对双绞线,只能工作于半双工模式;RS422采用全双工通信模式,通过两对双绞线可实现双向收发互不影响,且传输速率可达10 Mbit·s-1,传输距离可达2 000 m[1-3]。以RS422通信协议为代表的串行通信在数据通信吞吐量较小的微处理电路中应用更加简便、灵活,尤其在远距离信息传输中更发挥着不可替代的作用。

1 硬件电路设计

设计主要使用 Altera公司的 EP3C80F780I7和ADI公司的ADM2687EBRIZ。RX+、RX-为差分信号输入端口,差分信号经U2解差分后传输到U1中,通过其中数据接收模块的处理,传送并行数据给 CPU。CPU发送的并行数据,经U1中的数据发送模块处理输出待处理的TTL信号,通过U2差分处理后输出差分信号到总线上,TX+、TX-为差分信号输出端口。U1同时接收CPU输出的控制信号,以完成对通信参数的调整。其设计原理如图1所示。

2 软件程序设计

2.1 FPGA整体模块

clk为全局时钟输入端,rst_n为全局复位端,syn_awe为写使能命令端,syn_are为读使能命令端,syn_aoe为输出使能命令端,EA为地址总线数据端,ED为数据总线数据端,rxd_xi为串行数据输入端,txd_xo为串行数据输出端[4]。

divider为时钟产生模块,主要产生通信波特率采样时钟;txd为UART数据发送模块,进行数据并串转换;rxd为UART数据接收模块,进行数据串并转换;uart_wr_ctl为总线解析模块,主要负责解析CPU总线命令,控制其他模块的工作状态;uart422_state_reg为UART工作状态模块,综合rxd和txd的工作状态并输出;uart_rdout_sel为数据输出选择模块,其主要控制总工作状态数据与UART接收数据的选择输出[5]。

图1 RS422接口电路原理图

图2 FPGA整体模块设计图

2.2 时钟产生模块

模块主要为UART数据收发模块提供了工作时钟,根据时钟分频系数对输入的全局时钟进行计数处理,输出UART通信波特率16倍的分频时钟频率。将时钟分频系数加1,除去全局时钟频率,则等于分频时钟频率[5]。

图3 时钟产生模块Symbol

clk为全局时钟输入端,rst_n为模块复位端,enable为模块使能端,factor为时钟分频系数输入端,clk_out为分频时钟输出端。本模块采用计数分频的设计思想,当计数值大于factor值1/2时,clk_out输出为高电平,反之则输出低电平。

2.3 UART数据发送模块

UART数据发送模块设计简单,主要根据输入的控制信号,对输入的并行数据进行并串转换,并以控制信号要求的数据帧格式和波特率采用LSB模式发送出去。模块在接收到有效的8位并行数据后,根据控制信号命令,按串行数据帧格式,起始增加1位起始位0,然后根据控制信号命令决定是否添加奇偶校验位,再在尾部增加1位或2位停止位1,最后组成通信双方约定的数据帧格式发送出去。

图4 UART数据发送模块Symbol

clk为模块工作时钟输入端,rst_n为模块复位端,clk_en为时钟使能端,enable为模块使能端;ctrl_i为控制信号输入端。其中,ctrl_i[3]控制使能发送奇偶校验,ctrl_i[2]控制奇偶校验选择,ctrl_i[1]控制停止位的个数,ctrl_i[0]控制数据启动发送;data_i为待发送数据输入端,frame_bits_i为帧数据位数输入端,txd_xo为数据发送端,stat_o为发送状态输出端。其中,stat_o[1]为发送器完成发送标记位,stat_o[0]为发送缓冲器数据载入完成标记位。UART数据发送模块状态机,如图5所示。

图5 UART数据发送模块状态机

2.4 UART数据接收模块

由于外部使用环境的影响,RX输入线上可能产生毛刺。为减小这一影响,该模块设计时采用“多数表决法”,具体处理方法是在一个数据位中间取3个点的采样电平值,若少于2个点为电平“1”,则将该数据位判为电平“0”,否则判为电平“1”。

图6 UART数据接收模块Symbol

clk为模块工作时钟输入端,rst_n为模块复位端,clk_en为时钟使能端,enable为模块使能端,rxd_xi为UART数据接收端,ctrl_i为控制信号输入端。其中,ctrl_i[2]控制使能接收奇偶校验,ctrl_i[1]控制奇偶校验选择,ctrl_i[0]控制读 UART数据缓冲器使能,frame_bits_i为帧数据位数输入端,data_o为已接收数据输出端,stat_o为接收状态输出端。其中,stat_o[3]为帧错误标记位,stat_o[2]为接收缓冲器数据溢出标记位,stat_o[1]为校验错误标记位,stat_o[0]为数据完成接收标记位。UART数据接收模块状态机,如图7所示。

图7 UART数据接收模块状态机

2.5 总线解析模块

本模块主要根据地址总线数据和数据总线数据,以及输出使能和读写使能命令信号,产生对其他模块的控制信号和片选信号,即解析了总线命令。

图8 总线解析模块Symbol

clk为全局时钟输入端,rst_n为模块复位端,syn_awe为写使能命令端,syn_are为读使能命令端,syn_aoe为输出使能命令端,EA为地址总线数据端,ED为数据总线数据端,divider_factor为输出时钟产生模块时钟分频系数,divider_enable为输出时钟产生模块使能命令信号,rxd_clk_en为输出UART数据接收模块时钟使能命令信号,rxd_ctrl_i为输出UART数据接收模块控制命令信号,rxd_frame_bits_i为输出UART数据接收模块帧数据位数,rxd_enable为输出UART数据接收模块使能命令信号;txd_clk_en为输出UART数据发送模块时钟使能命令信号,txd_data_i为输出UART数据发送模块待发送数据,txd_enable为输出UART数据发送模块使能命令信号,txd_ctrl_i为输出UART数据发送模块控制命令信号,txd_frame_bits_i为输出UART数据发送模块帧数据位数;data_rd_cs为读UART接收数据命令选择端,uart_state_reg_cs为读总工作状态数据命令选择端[6-7]。

2.6 UART工作状态模块

模块主要是将输入的UART数据接收模块状态数据与UART数据发送模块状态数据合并为总工作状态数据,并进行输出。

图9 UART工作状态模块Symbol

rx_stat_o为UART数据接收模块状态数据的输入端,tx_stat_o为UART数据发送模块状态数据的输入端,uart422_state_out为总工作状态数据输出端。

2.7 数据输出选择模块

模块主要根据输入的读数据命令选择信号,对输入的总工作状态数据和UART接收数据,进行选择输出。

图10 数据输出选择模块Symbol

clk为全局时钟输入端,uart_sta_reg_out为总工作状态数据输入端,data_out为UART接收数据输入端,data_rd_cs为读UART接收数据命令选择端,uart_state_reg_cs为读总工作状态数据命令选择端,EDO_422为所选数据输出端[8-9]。

3 仿真结果

在Modelsim_SE10.1b的开发环境下,对FPGA源代码进行逻辑综合仿真,其仿真结果如图11~图18所示。仿真结果表明,设计实现了预期的各种逻辑功能,收发数据准确无误。图19和图20分别为CPU发送和接收的数据,图中所示数据与FPGA仿真结果一致。

图11 时钟生成仿真(分频系数为7)

图12 时钟生成仿真(分频系数为5)

图13 发送数据仿真(8位数据位、无奇偶校验位、1位停止位)

图14 发送数据仿真(7位数据位、偶校验、1位停止位)

图15 发收数据仿真(6位数据位、奇校验、2位停止位)

图16 接收数据仿真(8位数据位、无奇偶校验位、1位停止位)

图17 接收数据仿真(7位数据位、偶校验、1位停止位)

图18 接收数据仿真(6位数据位、奇校验、2位停止位)

图19 CPU发送数据

图20 CPU接收数据

4 结束语

设计灵活简单,并可动态调整通信波特率和数据位及停止位长度,还可选择是否使能数据奇偶校验功能,较好地实现了RS422串行总线之间的数据传输,从而大幅增强了设计的可靠性和通用性。后期测试使用证明了,该接口电路设计具有较高的稳定性和实用性,并可用于RS422通信的诸多场合。

[1]夏宇闻.Verilog数字系统设计教程[M].北京:北京航空航天出版社,2008.

[2]潘松,黄继业,陈龙.EDA技术与Verilog HDL[M].北京:清华大学出版社,2010.

[3]刘常.数字逻辑电路[M].北京:国防工业出版社,2002.

[4]陈西文.I/O接口程序设计入门与应用[M].北京:机械工业出版社,1996.

[5]曹会华,贺占庄.基于有限状态机实现全双工可编程UART[J].计算机技术与发展,2007,17(2):53 -55.

[6]董长富,郭超平,宋渝.基于FPGA的多串口模块的设计和实现[J].电子元器件应用,2006,11(8):43 -46.

[7]吴佳,钱伟康.51系列单片机多串口通讯任务的实现[J].东华大学报:自然科学版,2005,31(6):62 -65.

[8]王梅,王凌伟,姬进.机载计算机RS422A通讯的软硬件设计与实现[J].电子科技,2013,26(7):116 -118.

[9]刘青,马天己.CPCI数据总线接口的设计与实现[J].电子科技,2011,24(6):95 -96,100.

猜你喜欢

数据位接收数据命令
A320飞机大气数据的采集和计算在排故中的应用
只听主人的命令
低复杂度多输入多输出雷达目标角度估计方法
移防命令下达后
微弱GPS信号避开比特跳变的捕获算法
一种适用于FPGA系统中的变速箱电路设计
单片机模拟串口数据接收程序的实现及优化
减少调度自动化设备通讯串口丢包率的措施
这是人民的命令
基于ESPRIT的ULA波达方向估计改进算法