基于CPLD的串口网关设计与应用

时间:2022-10-20 11:23:46

基于CPLD的串口网关设计与应用

摘要: 从开发的角度提出一种基于CPLD的串口网关设计。文章从系统结构、布局、调试等方面介绍了这种串口网关的硬软件设计。文中详细地描述了串口的接收和发送处理过程,以及利用VHDL语言编程实现多个串口数据的协议转换,不同波特率间的数据转发或协议转换。该系统可以实现各种复杂的控制功能,使系统具有最大的扩展性。最后通过计算机仿真实验给出了波形仿真和应用测试结果。实验表明,软件及硬件设计是合理的,完全达到了预想的结果。

关键词:CPLD ;波特率;VHDL;串口软件

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)33-7430-03

实现串口数据的协议以及波特率的转换,传统的实现方法是用单片机与串口扩展芯片直接相连,其缺点是实现需用较多芯片,容易死机;目前关注的实现方法是用一片CPLD芯片来接收串行数据,其优势是CPLD为逻辑电路,不会死机,效率高,基于CPLD的串口网关能高效的实现串口数据的协议以及波特率的转换[1]、[4]。这里简单介绍一种串口网关的简单设计及其测试应用。

1 硬件结构

1.1 串口网关的硬件设计

串口网关中的核心设备就是其选用的控制器,它的选用直接关系到目标的实现与否。根据设计要求,我们可以选用单片机和CPLD,在综合考虑两者的性能后,我们最终选用了EPM7128做主处理芯片,EPM7128SLC84-10内含128个宏单元(或2500个可用门),其引脚到引脚的最短传输延时为7ns,采用单+5V电源供电,可通过JTAG接口实现在线编程,并带有可供84个用户使用的I/O脚(其中4个为专用输入脚)。该器件采用PLCC-84封装。其中TDI、TDO、TMS、TCLK脚为编程脚;GCLK、GOE、GCLEAR、REDIN脚为专用输入脚;VCCINT、VCCIO脚接+5V电源;GND脚接地;I/O为用户可编程输入输出脚。在I/O脚作输出使用时,可由用户设定为0,1和Z三种状态,器件直接选用MAX232做电平转换芯片。其硬件结构如图1所示。

图1 串口网关硬件结构框

在上面的结构框图有两个重要的部分:串口部分和CPLD主处理部分。串口部分主要完成的功能就是对串口数据流的电平转换,这里采用是通用的串行接口芯片:MAX232/MAX483。CPLD主处理部分主要就是处理的是来自串口的数据包,处理完后就可以直接发送出去。

1.2 CPLD主处理部分

基于CPLD的串口网关中,CPLD主处理部分是整个硬件系统中的核心处理设备:同速率不同类型的串行数据的接收;实现各种速率串行数据的相互转换;实现不同长度串行数据的相互转换;用数字电路实现奇偶检验;实现各个串口间的相互转发。基于CPLD的串口网关,是利用CPLD实现多个串口数据的协议转换。并且能够实现不同波特率间的数据转发或协议转换。其工作原理是:RS-232经过电平处理转换成TTL电平,然后进入CPLD进行处理,最后将处理后的结果从其他的串口发送出去。

该部分设计主要涉及3个子环节,即:波特率发生器的设计,串行电路接收部分的设计,串行电路发送部分的设计。这三个部分全是通过VHDL语言实现。其主处理部分结构如图2所示。

图2 CPLD主处理结构框图

1.3 串口网关的工作流程

首先CPLD设置好分频电路,此分频电路给接收和发送部分提供采样频率,当有数据从串口传过来时,接收部分对数据的下降沿进行检测以判断数据的到来,主要就是下降沿的检测[2-3]。当检测到下降沿后便可以知道第一位是起始字节的起始位的到来,然后在3倍于采样频率对数据进行采样,将采样到的数据存放于字长为3的数组中,然后在采样频率的上升沿对数组中的数进行判断,即Q(Num)

在上面的接收和处理过程中只不过是同一种数据的波特率的转换或者是处于同一波特率的数据转发,另外通过此模块还可以实现协议的转换,其实现过程如下:A协议的数据通过串口发送后,CPLD接收到该协议的数据后,在发送部分进行处理,通过处理变成B协议要求的数据格式和内容。然后另一串口便可以接收到B协议数据,这样便可以实现两种协议不同数据的转换。

2 系统软件结构

2.1 串口网关的软件结构

在系统软件设计中,整个软件采用模块化设计,其软件结构组成模块如图3。软件的核心在于CPLD接收和发送这两个模块,通过实现这两个模块,就能通过串口网关实现串口数据的协议以及波特率的转换。

图3 软件结构模块图

在上面模块图中,CPLD主处理部分的软件主要包括波特率产生部分、接收部分、发送部分。这里重点介绍一下接收部分的软件。其中最主要的两个进程如下:

process(clk1,clr)

variable Num:integer range 0 to 9 :=0;

begin

if clr='0' or Valid='0' then

Enable

elsif (rising_edge(clk1)) then

Q(Num)

if Num=9 then

Num:=0;Enable

else

Num:=Num+1; Enable

end if;

end if;

end process;

process(clr,com)

begin

if (clr='0' or Enable='0') then

Valid

elsif falling_edge(com) then

Valid

end if;

end process;

第一个进程是将接收数据的每一位存储在预先定义好的数组中,当接收完一个字节后便可以产生Hold信号的上升沿,此信号是直接接到发送模块中的EN端,如前图2所示。然后在发送模块中将数据直接一位一位地通过串口发出去。其接收仿真波形如图4所示,其输入是0111100001,接收后数组中的数是1E1。

图4 数据接收仿真波形

接收完一个字节数据后,便可以通过发送部分将数据发送出去,其总体接收和发送波形如图5所示。

图5 总体接收与发送仿真波形

2.2 异协议和异波特率的转换

在这两个问题上,主要是对上面的软件里面做一些修改,主要体现于接收和发送控制模块的受外部频率控制的部分,其中让波特率发生器产生接收和发送模块需要的波特率就可以,这些波特率主要是通过CPLD的外部晶振进行分频产生所需要的波特率即可。协议转换方面主要改动体现于发送部分,发送过程中只要通过检测到使能信号和接收数组中的数据后,然后通过接收到的数据判断是属于哪一种协议后,按照预先的约定转换成要求发送数据的协议,此要发送的数据可以存储在一些常量数组中,然后一位一位的发出去。

3 调试

串口网关的使用及其具体的测试硬件电路图6所示。图中的连接及其设置如下:

首先:将所有的设备线连好,将PC1机的COM1通过RS232连到串口网关的串口上,PC2也是同样如此,一一对应即可。其次:在两台PC机上装上串口调试助手软件,设置好里面的波特率。

经测试,发送和接收数据正常,在同一种波特率的情况下,可以看到两者的数据一样,无丢包;在不同波特率上,可以看到由低到高发送正常,而在高到低的情况下可以发现丢包,所以必须多发几帧同样的数据,以保证数据的正常接收和发送;在不同协议转换上能够按照自己的约定来发送和接收。

4 结束语

基于CPLD的串口网关可以实现不同协议数据的转换和不同波特率数据的相互转换,此网关功能的实现便于那些使用不同协议的产品,另外还可以通过CPLD来分配引脚,使得任何一个串口可以给多串口发数据,串口之间互相发数据,这些便于实现各种复杂的控制功能,使系统具有最大的扩展性,并且尽可能的降低了系统的造价,具有经济性。

参考文献:

[1] 赵曙.可编程逻辑器件原理、开发与应用[M].西安:西安电子科技大学出版社,2001.

[2] James R.Armstrong F,Gail Gray.VHDL 设计表示和综合[M]. 2版.北京:机械工业出版社,2002.

[3] 平,张振荣.VHDL编程与仿真[M].北京:人民邮电出版社,2000.

[4] 徐志军.CPLD/FPGA的开发与运用[M].北京:电子工业出版社,2002.

上一篇:基于RFID 和WiMi—Net 的冷链物流监控系统 下一篇:供应链数据交换平台设计