论文部分内容阅读
【摘要】由于串口通讯的只能一位一位的特殊性,因此在我们实际操作过程难免会遇到并行数据数据的传输问题,如果设计不好,很容易造成传输数据的不准确。本文提出一种基于FPGA的并行数据传输的串口通讯控制器的设计,很好的解决了这一问题,能够顺利、准确的完成数据通讯任务。
【关键词】FPGA;串口通讯;RS-232-C通讯协议
【中图分类号】$972.7+6 【文献标识码】A 【文章编号】1672-5158(2012)09-0151-01
1、串口通讯
串口通信(Serial Communication),是指外设和计算机问,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要.这里所说的通信是指计算机与外界的信息交换。因此,通信既包括计算机与外部设备之间,也包括计算机和计算N2_问的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人一机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式.所以串行接口是微机应用系统常用的接口。由于串口通讯的只能一位一位的特殊性,因此在我们实际操作过程难免会遇到并行数据数据的传输问题,如果设计不好,很容易造成传输数据的不准确。本文提出一种基于FPGA的并行数据传输的串口通讯控制器的设计,很好的解决了这一问题,能够顺利、准确的完成数据通讯任务。
2、RS-232-0通讯协议
RS-232-C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommended standard)代表推薦标准,232是标识号,c代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。它规定连接电缆和机械、电气特性、信号功能及传送过程。常用物理标准还有有EIA RSl422A、EIA RS-423A、EIA RS-485。这里只介绍EIARS-232C(简称232,RS232)。例如,目前在IBMPC机上的COMl、COM2接口,就是RS-232-C接口。
最为简单且常用的RS-232C连接方法就是3线连接法,即地、接收数据和发送数据3脚相连。这是因为收、发数据是时分的,二者不会同时传输。RS-232-C的串行总线在空闲的时候保持为逻辑“1”状态,即串行连接线的电平为-3--15V。当需要传输一个字符时,会发送一个逻辑为“o”的起始位,表示开始发送书库:之后就逐个发送数据位、奇偶校验位和停止位(逻辑1),每一次传输1个字符(可以设成5-8个比特)。由于任意两字字符对应瞬间的时间间隔是可变的,因此也成为异步格式。在RS-232-C协议中,可以设置数据的传输速率。除此之外,字符的位宽、奇偶校验位、停止位都可以被设置。字符可以为设置成5-8比特,奇偶校验位可以被除去;停止位为可以设置为1位、2位甚至1.5位。目前,大部分的处理器都集成了支持RS-232-C的通用异步收发器,辅助处理器和串行设备之间的通讯。这也为我们后续对于串口通讯控制器提供了有利条件。
3、并行数据的串口通讯控制器的设计
一般的串口通讯控制器的顶层模块是有三个子模块实现的,包括波特率发生器、接收模块以及发送模块。为了满足并行数据传输的需要,我们在原有控制器的基础上增加了一个模块:发送控制模块。这个模块的作用就是将数据进行处理、排队、等待数据传输,最终完成数据传输任务。改进串口控制器其结构如图所示:
发送模块的发送任务是由状态机完成的,其主要分为一下几部分:空闲状态、起始状态、等待状态、数据移位状态、发送截lL状态。当复位信号有效或者发送任务已经完成的时候,发送模块就处于空闲状态,等待发送指令(tx cmd)的到来,此时tx ready为高电平,表示随时可以接受外部的发送指令。当tx cmd有效时,发送模块进入起始状态,同时拉低tx ready,表明发送模块正在处于工作状态,并拉低比特线txd,给出起始位,然后跳转到等待状态。在等待状态,保持所有信号值不变,判断8个有效数据比特是否发送完毕,如果发送完毕跳转到发送停止状态,否则跳转至数据位移状态。在数据位移状态,发送模块将下一个要发送的数据移动到发送端口上,然后直接跳转至等待状态。最后进入发送截止状态,完成后自动进入空闲状态,并且将tx teady拉高,数据发送完成。
接收模块的接收任务也是由状态机完成的,其主要分为以下几部分:空闲状态、数据采样状态、检验停止位状态。空闲状态,用于检测接受数据链上的起始信号。系统复位以后,接受模块就处于这一状态,一直检测rxd数据是否从1变为O,一旦检测到起始位,立刻进入数据采样状态,采集有效数据。在此状态下,rx ready信号的值为1.数据采样状态,在此状态下,接受模块连续采样数据,直到接受完8个数据比特后,直接进入检测停止位。在此状态下,rx_ready信号的值为o。检测停止位,为了使接受模块的使用范围更广,本程序在这一状态等待一段时间后,直接跳转至空闲状态。
发送控制模块的任务也是由状态机完成的,分为以下几个部分:空闲状态、数据排队状态、等待状态、停止状态。空闲状态,用于检测接受模块是否接受到相应的传输数据命令。若接到传输命令,则进入数据排队状态。数据排队状态就是将所需要传输的并行数据每8位一组,传递到发送模块,然后进入等待状态。等待状态就是等待送入发送模块的数据发送完成,完成后,再进入数据排队状态,继续发送数据,直到数据发送完毕。停止状态就是数据发送完毕,这时控制模块直接进入空闲状态,等待下次数据传输。
波特率发生器就是一个时钟产生装置,根据不同的波特率,设置产生不同的时钟。由于设计比较简单,这里不复赘述。
4、设计验证
我们对上述思路设计进行了验证。我们向串口发送相应的指令(F),串口发送回我们相应的数据(数据等间隔,且间隔中间全是零)。结果截图如下:
F指令的接受证明接受模块运行良好,发回我们想要的数据证明发送与发送控制模块运行良好。这同时也证明我们的方法具有一定的可行性,能够完成正常的数据通讯任务。
【关键词】FPGA;串口通讯;RS-232-C通讯协议
【中图分类号】$972.7+6 【文献标识码】A 【文章编号】1672-5158(2012)09-0151-01
1、串口通讯
串口通信(Serial Communication),是指外设和计算机问,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。随着计算机系统的应用和微机网络的发展,通信功能越来越显得重要.这里所说的通信是指计算机与外界的信息交换。因此,通信既包括计算机与外部设备之间,也包括计算机和计算N2_问的信息交换。由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。对于那些与计算机相距不远的人一机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式.所以串行接口是微机应用系统常用的接口。由于串口通讯的只能一位一位的特殊性,因此在我们实际操作过程难免会遇到并行数据数据的传输问题,如果设计不好,很容易造成传输数据的不准确。本文提出一种基于FPGA的并行数据传输的串口通讯控制器的设计,很好的解决了这一问题,能够顺利、准确的完成数据通讯任务。
2、RS-232-0通讯协议
RS-232-C标准(协议)的全称是EIA-RS-232C标准,其中EIA(Electronic Industry Association)代表美国电子工业协会,RS(recommended standard)代表推薦标准,232是标识号,c代表RS232的最新一次修改(1969),在这之前,有RS232B、RS232A。它规定连接电缆和机械、电气特性、信号功能及传送过程。常用物理标准还有有EIA RSl422A、EIA RS-423A、EIA RS-485。这里只介绍EIARS-232C(简称232,RS232)。例如,目前在IBMPC机上的COMl、COM2接口,就是RS-232-C接口。
最为简单且常用的RS-232C连接方法就是3线连接法,即地、接收数据和发送数据3脚相连。这是因为收、发数据是时分的,二者不会同时传输。RS-232-C的串行总线在空闲的时候保持为逻辑“1”状态,即串行连接线的电平为-3--15V。当需要传输一个字符时,会发送一个逻辑为“o”的起始位,表示开始发送书库:之后就逐个发送数据位、奇偶校验位和停止位(逻辑1),每一次传输1个字符(可以设成5-8个比特)。由于任意两字字符对应瞬间的时间间隔是可变的,因此也成为异步格式。在RS-232-C协议中,可以设置数据的传输速率。除此之外,字符的位宽、奇偶校验位、停止位都可以被设置。字符可以为设置成5-8比特,奇偶校验位可以被除去;停止位为可以设置为1位、2位甚至1.5位。目前,大部分的处理器都集成了支持RS-232-C的通用异步收发器,辅助处理器和串行设备之间的通讯。这也为我们后续对于串口通讯控制器提供了有利条件。
3、并行数据的串口通讯控制器的设计
一般的串口通讯控制器的顶层模块是有三个子模块实现的,包括波特率发生器、接收模块以及发送模块。为了满足并行数据传输的需要,我们在原有控制器的基础上增加了一个模块:发送控制模块。这个模块的作用就是将数据进行处理、排队、等待数据传输,最终完成数据传输任务。改进串口控制器其结构如图所示:
发送模块的发送任务是由状态机完成的,其主要分为一下几部分:空闲状态、起始状态、等待状态、数据移位状态、发送截lL状态。当复位信号有效或者发送任务已经完成的时候,发送模块就处于空闲状态,等待发送指令(tx cmd)的到来,此时tx ready为高电平,表示随时可以接受外部的发送指令。当tx cmd有效时,发送模块进入起始状态,同时拉低tx ready,表明发送模块正在处于工作状态,并拉低比特线txd,给出起始位,然后跳转到等待状态。在等待状态,保持所有信号值不变,判断8个有效数据比特是否发送完毕,如果发送完毕跳转到发送停止状态,否则跳转至数据位移状态。在数据位移状态,发送模块将下一个要发送的数据移动到发送端口上,然后直接跳转至等待状态。最后进入发送截止状态,完成后自动进入空闲状态,并且将tx teady拉高,数据发送完成。
接收模块的接收任务也是由状态机完成的,其主要分为以下几部分:空闲状态、数据采样状态、检验停止位状态。空闲状态,用于检测接受数据链上的起始信号。系统复位以后,接受模块就处于这一状态,一直检测rxd数据是否从1变为O,一旦检测到起始位,立刻进入数据采样状态,采集有效数据。在此状态下,rx ready信号的值为1.数据采样状态,在此状态下,接受模块连续采样数据,直到接受完8个数据比特后,直接进入检测停止位。在此状态下,rx_ready信号的值为o。检测停止位,为了使接受模块的使用范围更广,本程序在这一状态等待一段时间后,直接跳转至空闲状态。
发送控制模块的任务也是由状态机完成的,分为以下几个部分:空闲状态、数据排队状态、等待状态、停止状态。空闲状态,用于检测接受模块是否接受到相应的传输数据命令。若接到传输命令,则进入数据排队状态。数据排队状态就是将所需要传输的并行数据每8位一组,传递到发送模块,然后进入等待状态。等待状态就是等待送入发送模块的数据发送完成,完成后,再进入数据排队状态,继续发送数据,直到数据发送完毕。停止状态就是数据发送完毕,这时控制模块直接进入空闲状态,等待下次数据传输。
波特率发生器就是一个时钟产生装置,根据不同的波特率,设置产生不同的时钟。由于设计比较简单,这里不复赘述。
4、设计验证
我们对上述思路设计进行了验证。我们向串口发送相应的指令(F),串口发送回我们相应的数据(数据等间隔,且间隔中间全是零)。结果截图如下:
F指令的接受证明接受模块运行良好,发回我们想要的数据证明发送与发送控制模块运行良好。这同时也证明我们的方法具有一定的可行性,能够完成正常的数据通讯任务。