2系统软件结构 2.1串口网关的软件结构 在系统软件设计中,整个软件采用模块化设计,其软件结构组成模块如图3。软件的核心在于CPLD接收和发送这两个模块,通过实现这两个模块,就能通过串口网关实现串口数据的协议以及波特率的转换。 图3软件结构模块图 在上面模块图中,CPLD主处理部分的软件主要包括波特率产生部分、接收部分、发送部分。这里重点介绍一下接收部分的软件。其中最主要的两个进程如下: process(clk1,clr) variableNum:integerrange0to9:=0; begin ifclr='0'orValid='0'then Enable<='1';Num:=0;-Q<="0000000000";elsif(rising_edge(clk1))then Q(Num)<=(N(0)andN(1))or(N(1)andN(2))or(N(0)andN(2)); ifNum=9then Num:=0;Enable<='0';Hold<='1'; else Num:=Num+1;Enable<='1';Hold<='0'; endif; endif; endprocess; process(clr,com) begin if(clr='0'orEnable='0')then Valid<='0'; elsiffalling_edge(com)then Valid<='1'; endif; endprocess; 第一个进程是将接收数据的每一位存储在预先定义好的数组中,当接收完一个字节后便可以产生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]JamesR.ArmstrongF,GailGray.VHDL设计表示和综合[M].2版.北京:机械工业出版社,2002. [3]王毅平,张振荣.VHDL编程与仿真[M].北京:人民邮电出版社,2000. [4]徐志军.CPLD/FPGA的开发与运用[M].北京:电子工业出版社,2002. |