一种基于FPGA的通用异步串口及其应答方法与流程

文档序号:14774090发布日期:2018-06-23 02:32阅读:149来源:国知局
一种基于FPGA的通用异步串口及其应答方法与流程
本发明涉及一种基于FPGA的通用异步串口及其应答方法,属于串口通讯
技术领域

背景技术
:嵌入式系统有特定的硬件运行环境,因此其软件研发过程中的调试、测试与硬件时序关系较大,需依托半物理仿真平台。传统的半物理仿真平台针对真实目标系统及其应用场景定制开发,为专用测试设备,针对性强。但是,面对软件研制周期普遍缩短,敏捷开发软件增多的现状,传统的半物理仿真平台逐渐暴露出如下问题:(1)传统的半物理仿真平台的硬件设计方案通用性差。其涉及不同开发方,采用的技术方案不同,各类硬件板卡的功能和接口标准也各不相同,导致不同项目的仿真平台难以复用。(2)传统的半物理仿真平台研制周期长、成本高。每个新研项目的仿真平台都需要经历“设计——生产——调试——使用”四个过程,较难满足软件研制周期普遍缩短,敏捷开发软件增多的应用需求。(3)传统的半物理仿真平台可维护性差。一般情况下,星载嵌入式软件在轨运行周期为5至8年,有的甚至更长;这段时间内,平台开发人员的流动会增加历史研制资料管理不到位的风险,导致新的开发人员较难对仿真平台进行快速有效维护。(4)传统的半物理仿真平台很难实现配套仿真软件的通用化。不同项目仿真平台的硬件及板载FPGA逻辑存在差异,直接影响到配套仿真软件的通用化构建。技术实现要素:本发明解决的技术问题是:克服现有技术的不足,提供了一种基于FPGA的通用异步串口及其应答方法,通过初始配置,实现与各类协议的匹配,完成异步串口应答通讯。本发明的技术解决方案是:提供一种基于FPGA的通用异步串口,其特征在于,包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器;寄存器模块用于存储异步串口初始化参数;接收模块包括单个字节的接收模块、实时接收FIFO和循环存储FIFO;单个字节的接收模块接收其它异步串口发送的数据,将单个字节写入实时接收FIFO,当设定时间内没有新的数据写入,表明接收完成,实时接收FIFO给出数据帧接收结束信号并发送给控制模块,并将该数据帧存入循环存储FIFO;发送模块将内部FIFO的数据向其它异步串口发送;发送存储器接收仿真软件写入的应答数据;接收存储器包括命令缓存区、多个接收命令次数存储寄存器、接收错误次数存储寄存器;控制模块,读取寄存器模块存储的命令字信息,判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,并将该组接收命令次数存储到对应的接收命令次数存储寄存器;如果没有全部匹配完成,则等待下一字节数据;如果各组命令均未全部匹配,则将接收命令错误次数加1;并存储到接收错误次数存储寄存器;如果全部匹配完成,则等待实时接收FIFO给出数据帧接收结束信号,当接收到数据帧接收结束信号后读取实时接收FIFO内的数据,并存储至接收存储器的命令缓存区,完成后,读取寄存器模块内的应答使能标志,判断是否需要应答,如果需要应答则读取发送存储器内的应答数据,并送入发送模块的FIFO中,如果不需要应答,则等待下一字节数据。优选的,寄存器模块存储的异步串口初始化参数包括命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。优选的,寄存器模块存储的异步串口初始化参数还包括串口输出信号是否强制拉低使能,如果该拉低使能有效,则该异步串口输出信号持续为低电平。提供一种基于FPGA的通用异步串口应答方法,包括如下步骤:(1)根据通讯的协议要求配置异步串口;(2)接收一个字节数据;(3)接收字节计数K加1;判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,进入步骤(4);如果没有全部匹配完成,则进入步骤(4);如果各组命均未全部匹配,则将该组接收命令错误次数加1,进入步骤(4);(4)判断是否在设定时间内没有新的数据写入,如果有新的数据写入,则返回步骤(2);如果没有新的数据写入,则表明接收完成,实时接收FIFO内的数据帧循环存入存储FIFO;(5)判断是否需要应答,如果不需要,则返回步骤(2);如果需要则读取仿真软件写入发送存储器内的应答数据,并向外发送,返回步骤(2)。优选的,步骤(1)还包括判断触发方式是否为RTS,如果为RTS则等待接收外部的RTS信号,判断是否进行RTS应答,如果进行RTS应答,则读取仿真软件写入发送存储器内的应答数据,并向外发送,进入步骤(2),如果不进行RTS应答,则直接进入步骤(2);如果触发方式不是RTS,则进入步骤(2)。优选的,步骤(1)中配置异步串口需要配置的参数包括,命令字信息、波特率、停止位、校验位、采样点位置、发送字节间隔、接收完成判断时间、RTS触发状态和命令字应答使能。优选的,实时接收FIFO内的数据帧循环存入存储FIFO的方式为:将存储FIFO划分为四块缓存区,每次接收的数据顺序循环存储,记录最近一次接收数据存储在第几个缓存区。本发明与现有技术相比的优点在于:(1)本发明通过定义寄存器模块,实现了现行卫星地面仿真平台中异步串口数据处理的统一描述,克服了传统仿真平台通用性差、研制周期长、成本高的缺陷,具有规范性、复用性强,研制周期短、成本低的优点,仅通过参数配置,即可实现串口各类协议通讯。(2)本发明通过FPGA逻辑模块实现了丰富的异步串口协议处理类型,克服了传统仿真平台在专用仿真软件中处理异步串口数据实时性差、交互接口多的缺陷,具有操作简单、实时性强的优点。(3)本发明通过仿真平台异步串口模块的配置优化设置,解决了配套仿真软件的通用化问题,使用过程中,只需配置物理层和应用层参数,就可覆盖仿真平台中对异步串口数据的处理,具有可靠性、可维护性高的特点。(4)本发明设置串口输出信号是否强制拉低使能,能够模拟该串口输出常低异常,便于串口间相互干扰的检查。附图说明图1为本发明一种基于FPGA的通用异步串口结构框架示意图;图2为本发明一种基于FPGA的通用异步串口原理流程图;图3为本发明一种基于FPGA的通用异步串口通信数据帧格式示意图;图4为本发明一种基于FPGA的通用异步串口波特率发生器示意图;图5为本发明一种基于FPGA的通用异步串口通信工作状态机示意图;具体实施方式本发明针对现有技术的不足,提出一种基于FPGA的通用异步串口及其应答方法,可以通过配置异步串口物理层和应用层参数,完成仿真平台对异步串口数据的处理,具有操作简单、实时性强、可靠性、可维护性高的特点,并实现了不同项目仿真平台之间的通用化,缩短了仿真平台的研制周期、降低了研制成本,保障星载嵌入式软件在轨稳定运行。如图1所示为一种基于FPGA的通用异步串口的结构框架示意图,包括寄存器模块、控制模块、接收模块、发送模块以及接收存储器和发送存储器。寄存器模块用于存储异步串口初始化参数;接收模块包括单个字节的接收模块、实时接收FIFO和循环存储FIFO;单个字节的接收模块接收其它异步串口发送的数据,将单个字节写入实时接收FIFO,当设定时间内没有新的数据写入,表明接收完成,实时接收FIFO给出数据帧接收结束信号并发送给控制模块,并将该数据帧存入循环存储FIFO;发送模块将内部FIFO的数据向其它异步串口发送;发送存储器接收仿真软件写入的应答数据;接收存储器包括命令缓存区、多个接收命令次数存储寄存器、接收错误次数存储寄存器;控制模块,读取寄存器模块存储的命令字信息,判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,并将该组接收命令次数存储到对应的接收命令次数存储寄存器;如果没有全部匹配完成,则等待下一字节数据;如果各组命令均未全部匹配,则将接收命令错误次数加1;并存储到接收错误次数存储寄存器;如果全部匹配完成,则等待实时接收FIFO给出数据帧接收结束信号,当接收到数据帧接收结束信号后读取实时接收FIFO内的数据,并存储至接收存储器的命令缓存区,完成后,读取寄存器模块内的应答使能标志,判断是否需要应答,如果需要应答则读取发送存储器内的应答数据,并送入发送模块的FIFO中,如果不需要应答,则等待下一字节数据。如图2所示为一种基于FPGA的通用异步串口的原理流程图,本发明具体方案包括初始化寄存器模块,配置异步串口物理层和应用层通信协议,获取输入信号后,按照物理层协议配置进行数据解析还原,并与应用层协议逐字节进行匹配,匹配成功回送相应数据完成异步串口通信,匹配不成功记录错误信息,匹配成功与否均保存接收的异步串口数据供分析使用。具体包括如下步骤:(1)异步串口参数初始化,具体包括:波特率、起始位、数据位、奇偶校验位及停止位设置;接收、发送使能设置;发送数据字节间间隔设置;接收完成判断时间设置(停止位后超时时间内没有检测到起始位则认为接收完成);接收采样点位置;命令组个数设置(最多完成28组);命令组中命令字匹配设置(最多设置10个命令字);RTS信号触发有效状态设置,包括下降沿触发、上升沿触发、低电平有效、高电平有效。异步串口初始化参数还包括各组命令字对应的应答延时、应答长度、应答起始地址设置;错误应答(与设置的各组命令字都不匹配)对应的应答延时、应答长度、应答起始地址设置;RTS应答对应的应答延时、应答长度、应答起始地址设置;各组应答使能设置,使能有效才进行数据应答;强制拉低设置,如果该拉低使能有效,则该异步串口输出信号持续为低电平。仿真软件将每组要应答的数据写入对应的缓冲区,各缓冲区地址即设置的应答地址。判断触发方式是否为RTS,如果为RTS则等待接收外部的RTS信号,判断是否进行RTS应答,如果进行RTS应答,则读取仿真软件写入的应答数据,并向外发送,进入步骤(2),如果不进行RTS应答,则直接进入步骤(2);如果触发方式不是RTS,则进入步骤(2)。(2)接收一个字节数据。(3)接收字节计数K加1;判断接收字节内容是否与某组命令某一字节匹配,如果匹配,判断该组命令是否全部匹配完成,如果全部匹配完成,则将该组接收命令次数加1,进入步骤(4);如果没有全部匹配完成,则进入步骤(4);如果各组命均未全部匹配,则将该组接收命令错误次数加1,进入步骤(4)。(4)判断是否在设定时间内没有新的数据写入,如果有新的数据写入,则返回步骤(2);如果没有新的数据写入,则表明接收完成,实时接收FIFO内的数据帧循环存入存储FIFO。存储FIFO划分为四块缓存区,每次接收的数据顺序循环存储,并记录最近一次接收数据存储在第几个缓存区。(5)判断是否需要应答,如果不需要,则返回步骤(2);如果需要则读取仿真软件写入发送存储器内的应答数据,并向外发送,返回步骤(2)。本发明一种基于FPGA的通用异步串口,物理层协议配置包括波特率、起始位、数据位、奇偶校验位及停止位设置,如表1所示。其中数据帧格式采用8-bit数据组成,如图3所示,起始位1位,低电平有效;数据位,共8位,低位在前,高位在后;校验位,可选奇校验、偶校验或无校验位;停止位,可选1位或2位,高电平有效。波特率处理如图4所示,采用时钟计数分频的方式产生,即利用系统时钟(周期为Ts,频率为fs)和波特率控制字所配置的数值周期(周期Tb,频率fb),确定异步串口位宽(位宽=fs/fb),可依据仿真平台内部使用晶振值,确定波特率的可配范围。异步串口信号检测如图5所示,依照有限状态机(FSM)进行,匹配物理层协议波特率、奇偶校验位及停止位等信息还原异步串口数据。表1物理层协议设置描述寄存器名称位宽操作地址说明rx_on1读/写0x04[0]接收使能(0:关闭,1:打开)tx_on1读/写0x04[8]发送使能(0:关闭,1:打开)parity2读/写0x04[17:16]校验位(0:无校验,2:偶校验,1:奇校验)stop_bit1读/写0x04[24]停止位宽度(0:1位,1:2位)baudrate16读/写0x08[15:0]波特率控制字sample_point3读/写0x08[31:16]采样点设置,在1~波特率字之间;clk_freq16读/写0x10[15:0]时钟频率值,KHztx_interval16读/写0x14[31:16]回送数据字节间间隔,usrx_interval16读/写0x14[15:0]接收完成判断时间,usforce_tx_low1读/写0x18[0]TX强制拉低(1:使能,0:不使能)本发明中命令组描述定义了命令组个数描述(最多完成28组,即单个异步串口最多完成28组命令的判读与处理)和命令组中命令字匹配描述。其中,命令字匹配描述,针对单组命令最多执行10个命令字匹配操作,如表2所示,每接收一个字节,接收字节计数加1,当接收字节计数与某一组设置的第1个匹配命令字位置一致时,判断接收字节内容是否与该组设置的第1个匹配命令字一致,如果一致,继续等待接收字节计数到第2个匹配命令字位置,并比对接收字节内容与匹配命令字,如此依次往下进行,直至设置的命令字比对完。如果全部比对成功,该组接收命令次数加1,并记录接收数据的字节数,与该组命令字存入其对应的地址区域;如果所有命令组匹配均不成功,接收错误次数加1,将数据存入错误应答组对应的地址区域。当命令中需要匹配的命令字个数小于10个,设置命令符“ff00”表示比对结束。如:只需匹配5个命令字,在“group01_cmd06”寄存器写入0xFF,“group01_cmd06_add”寄存器写入0x00即可。表2命令匹配设置描述寄存器名称位宽操作地址说明group01_cmd018读/写0xE0[7:0]第1个匹配命令字group01_cmd01_add8读/写0xE0[15:8]第1个匹配命令字位置group01_cmd028读/写0xE0[7:0]第2个匹配命令字group01_cmd02_add8读/写0xE0[15:8]第2个匹配命令字位置group01_cmd038读/写0xE0[7:0]第3个匹配命令字group01_cmd03_add8读/写0xE0[15:8]第3个匹配命令字位置group01_cmd048读/写0xE0[7:0]第4个匹配命令字group01_cmd04_add8读/写0xE0[15:8]第4个匹配命令字位置group01_cmd058读/写0xE0[7:0]第5个匹配命令字group01_cmd05_add8读/写0xE0[15:8]第5个匹配命令字位置group01_cmd068读/写0xE0[7:0]第6个匹配命令字group01_cmd06_add8读/写0xE0[15:8]第6个匹配命令字位置group01_cmd078读/写0xE0[7:0]第7个匹配命令字group01_cmd07_add8读/写0xE0[15:8]第7个匹配命令字位置group01_cmd088读/写0xE0[7:0]第8个匹配命令字group01_cmd08_add8读/写0xE0[15:8]第8个匹配命令字位置group01_cmd098读/写0xE0[7:0]第9个匹配命令字group01_cmd09_add8读/写0xE0[15:8]第9个匹配命令字位置group01_cmd0108读/写0xE0[7:0]第10个匹配命令字group01_cmd010_add8读/写0xE0[15:8]第10个匹配命令字位置本发明中定义命令应答描述包括各组数据命令、错误命令(与设置的各组命令字都不匹配)以及RTS命令对应的应答延时、应答长度、应答起始地址。如表3所示,当命令字比对完成,等待接收完成判断时间条件(停止位后超时时间内没有检测到起始位则认为接收完成)满足后,判断该命令组应答使能标志,如果有效,则将命令组对应的应答数据搬至发送FIFO中,待该命令组应答延时满足条件后发送数据,完成异步串口数据应答。表3命令应答设置描述寄存器名称位宽操作地址说明ack_en011读/写0x1BC[0]第1组应答使能:1:开启应答,0:关闭应答。…………………………ack_en271读/写0x1D4[8]第27组应答使能:1:开启应答,0:关闭应答。ack_en281读/写0x1D4[16]第28组应答使能:1:开启应答,0:关闭应答。ack_en291读/写0x1D4[24]应答错误数据使能:1:开启应答,0:关闭应答。ack_enRTS1读/写0x1D8[0]应答RTS使能:1:开启应答,0:关闭应答。ack_delay0116读/写0x1DC[15:0]第1组应答延时,单位:us…………………………ack_delay2716读/写0x210[15:0]第27组应答延时,单位:usack_delay2816读/写0x210[31:16]第28组应答延时,单位:usack_delay2916读/写0x214[15:0]错误数据应答延时,单位:usRTS_ack_delay16读/写0x214[31:16]RTS应答延时,单位:usack_addr0110读/写0x218[9:0]第1组应答地址…………………………ack_addr2710读/写0x24C[9:0]第27组应答地址ack_addr2810读/写0x24C[25:16]第28组应答地址ack_addr2910读/写0x250[9:0]错误数据应答地址RTS_ack_addr10读/写0x250[25:16]RTS应答地址ack_len019读/写0x254[15:0]第1组应答长度…………………………ack_len279读/写0x288[8:0]第27组应答长度ack_len289读/写0x288[24:16]第28组应答长度ack_len299读/写0x28C[8:0]错误数据应答长度RTS_ack_len9读/写0x28C[24:16]RTS应答长度本发明中定义了接收命令数据的存储操作,即开辟四块缓存区,用于循环存储接收命令数据,接收完成后置标志位,并记录最新一次接收数据存储在第几个缓存区,以此判断其它三个缓存区数据的接收顺序,保证数据存储的完整性,如表4所示。表4接收命令数据存储描述综上所述,本发明方法为了便于异步串口的继承和复用,通过配置物理层和应用层参数,可覆盖星载仿真平台中对异步串口数据的处理需求。下面结合具体实施例对本发明方法进行详细描述说明:采用本发明方法针对1路异步串口信号进行处理,其中地面仿真系统运行周期为128ms,内部晶振为50M赫兹,计数器宽度当量为20ns,其具体描述包括:1、表1中物理层协议设置描述异步串口物理层设置要求:波特率115200bps,偶检验,1位停止位,字应答数据字节间间隔10us,接收完成判断时间50us。异步串口物理层描述为:rx_on=1,tx_on=1,parity=2,stop_bit=0,baudrate=434,sample_point=217(采集点在位信号正中间),clk_freq=50,tx_interval=10,rx_interval=50,force_tx_low=0。2、表2命令匹配设置描述异步串口应用层命令字要求:处理两组命令,第1组命令共2个字节,包括EBH和90H,要求2字节全部匹配;第2组命令共8个字节,要求匹配第5个字节A4H、第6个字节2BH、第7个字节B1H、第8个字节F3H。异步串口命令匹配描述为:group01_cmd01=01H,group01_cmd01_add=EBH;group01_cmd02=02H,group01_cmd02_add=90H;group01_cmd03=FFH,group01_cmd03_add=00H;group02_cmd01=05H,group01_cmd01_add=A4H;group02_cmd02=06H,group01_cmd02_add=2BH;group02_cmd03=07H,group01_cmd03_add=B1H;group02_cmd04=08H,group01_cmd04_add=F3H;group02_cmd05=FFH,group01_cmd05_add=00H;3、表3命令应答设置描述异步串口应用层命令应答要求:处理两组命令应答,第1组命令应答12个字节,应答延时10us;第2组命令应答20个字节,应答延时20us;如果与两组命令均不匹配时,延时30us回送两字节数据AAH和55H。异步串口命令应答描述为:ack_en01=1,ack_en02=1,ack_en29=1,ack_delay01=10,ack_delay02=10,ack_delay29=30,ack_addr01=XX1,ack_addr02=XX2,ack_addr29=XX29,ack_len01=12,ack_len02=20,ack_len29=2。并在地面仿真系统运行周期内定时向地址XX1、XX2、XX29区域更新指令应答数据。4、接收命令数据存储描述异步串口应用层接收命令数据存储要求:128ms内,目标系统最多向单路异步串口发送3组命令。异步串口接收命令读取操作为:首先读取rx_curr寄存器获得最后一次数据存放位置,例如rx_curr=2,最后一次数据存放在第3块缓存区,缓存区数据的接收顺序为3→2→1→4(第3块缓存区为最新数据,第4块缓存区为最旧数据),按照此顺序依次读取各组命令的数据长度及对用缓冲区起始地址,进而获取指令数据开展分析处理工作。本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1