一种基于FPGA同步串口多级缓存接收转发方法与流程

    专利2022-07-07  156


    本发明涉及信号处理领域,具体涉及一种基于fpga的同步串口多级缓存接收转发方法。



    背景技术:

    同步串口是指由两路信号线进行信号传输,一路传输数据,一路传输随路时钟的信号传输形式。相比于异步串口单线传输,同步串口在传输线路上占用的资源为异步串口的两倍,但因为有随路时钟,同步串口传输数据率更高,传输能力可达异步串口的5至10倍,因此在雷达、通信、控制等领域的信号传输中广泛应用。fpga(现场可编程门阵列)因灵活的可编程特性和强大的计算能力,在雷达、通信、控制等领域,广泛应用于逻辑粘合等场景。逻辑粘合是指利用fpga的可编程特性,将不同的信息输入进行处理后再转发至其它运算节点的行为。处理可包括解析、缓存、校验、修改、增减等处理方式中零项至数项。由于fpga的应用领域与同步串口的应用领域有重合,因此存在fpga通过同步串口接收数据后进行转发的应用需求。

    同步串口协议是同步串口接收转发方法的设计基础。功能完备的同步串口协议,每个数据包由包头、标识符(可选)、长度、有效数据,校验和、包尾(可选)组成。包头、包尾用于判断此包是否存在多数、少数等数据错误问题,在有包头、长度、校验和的情况下,包尾可选。标识符用于判断本包数据是否需要处理,如果无需处理则可抛弃,在非广播模式下,标识符可选。长度用于判断缓存空间是否足够,配合包头及校验和可以判断数据包是否存在多数、少数等数据错误问题。校验和用于判断数据是否错误。

    fpga实现同步串口接收后转发涉及三个处理节点:同步串口数据的发送方,fpga作为同步串口数据接收后的转发方,同步串口数据转发后的接收方。同步串口接收转发,分为主动转发与被动转发两种形式。主动转发是指数据转发由转发方发起,转发方控制简单,接收方灵活性差。被动转发方式是指由接收方发起数据转发,从而使接收方处理数据有更大的灵活性。

    同步串口接收转发三方往往分属于三个处理器,信号传输可能受到各种干扰。信号传输可能受到干扰有丢数、多数、错数等数据包问题。此外由于发送方和接收方分属不同处理器,即使设计时可以保证发送方和接收方传输速率大体平衡,也可能在部分时间段内出现发送数据率大于接收数据率的传输速率不匹配问题。当数据包问题发生时,需要识别、剔除错误包,避免对后续处理节点造成影响。对问题数据包进行处理时,需要尽量避免对其他正确数据包产生影响。对于传输速率不匹配问题,需要在存储资源一定的情况下尽可能多缓存数据包,减少传输速率不匹配问题的影响,同时提高存储资源利用效率。

    对于同步串口接收数据缓存,现有实现方法主要有单级缓存,乒乓缓存等缓存方法。缓存的作用主要有两方面,一方面是平衡接收速率和转发速率,二是在数据包出现问题时,保证处理问题数据包时不影响其他正常数据包。

    具体的,对于单级缓存,存在两种问题:一种是单级缓存内只缓存一包来波数据,如果下一包数据到来而缓存中仍有数据,则将缓存复位清空,优点是处理流程不会卡住,缺点是缓存中的数据转发一半时来了新数据包,会复位缓存,使正在读出的数据包错误。另一种是单级缓存内缓存多包来波数据,一旦缓存内的剩余容量低于当前到达包的数据长度,当前到达包数据会出现数据丢失,从而影响后续处理,因为只有单级缓存,在判断出缓存内的剩余容量低于当前到达包的数据长度后,已经有部分数据存入缓存,无法进行处理。

    对于乒乓缓存,可以处理错数,漏数,多数等数据问题。乒乓缓存的缺点在于解决部分时间段内发送数据率大于接收数据率的传输速率不匹配问题能力弱,资源利用率低。对于乒乓缓存,最多可以存储两个串口数据包,存储数量少,平衡接收速率和转发速率能力弱。在面对发送方发送密集的短串口数据包,而接收方读取数据包时间间隔较大时,会出现丢包问题,且无法通过增大单个缓存容量解决,资源利用率低的同时控制复杂。如果增加乒乓操作的缓存数量,变为多个缓存轮流存储数据的广义乒乓操作,资源利用率低的问题会进一步放大,且控制流程会更加复杂,稳定性降低。



    技术实现要素:

    本发明需解决的技术问题是提供一种可靠性和资源利用率高的同步串口多级缓存接收转发方法,并有效解决部分时间段内出现发送数据率大于接收数据率的传输速率不匹配问题。

    为解决上述技术问题,本发明提供了一种基于fpga同步串口多级缓存接收转发方法,包括如下步骤:

    步骤1、接收同步串口数据

    将接收的串行单比特数据转换为并行多比特数据,判断包头正确性和标识符,对需要转发的数据包,设置接收标志为1,否则设置接收标志为0;

    步骤2、将同步串口接收数据存入一级缓存

    在需要计算校验和的情况下,在数据包存入一级缓存的同时并行计算校验和;

    计算校验和延时长的,则得到计算校验和的中间值;

    步骤3、判断接收标志

    判断步骤1产生的接收标志,如果标志为0,则一级缓存复位清除本包数据;

    如果标志为1,接收此包数据;若要计算校验和,且计算校验和延时长的,则进入步骤4;若要计算校验和,且计算校验和延时短的,则转入步骤5;若不需要计算校验和,则转入步骤6;

    步骤4、同步串口接收数据存入二级缓存

    二级缓存存储一级缓存的读出数据,并使用步骤2得到计算校验和的中间值,继续计算接收数据包的校验和;

    步骤5、判断校验和

    在计算校验和延时短的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,一级缓存复位清除本包数据;

    在计算校验和延时长的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,二级缓存复位清除本包数据;

    步骤6、同步串口接收数据存入末级缓存

    末级缓存接收存储一级缓存或二级缓存的读出数据;

    步骤7、同步串口数据转发

    fpga采用被动转发方式或主动转发方式,转发同步串口数据。

    进一步的,所述步骤2在接收到数据包后开始进行计时,在特定时间内如果没有存储完成一包数据,则判断此包出现丢数错误,一级缓存复位清除本包数据,并复位清除校验和、或者校验和的中间值;

    所述特定时间由发送方所有数据包中最长的数据包长度的接收时间加上一段保护时间构成。

    进一步的,所述末级缓存容量大于缓存缺口容量,

    所述缓存缺口容量计算方法为:

    计算发送端发送的最快速率及持续时间,可得此时的发送数据量;

    计算接收端最慢接收速率及相同的持续时间,可得此时转发数据量;

    发送数据量与转发数据量的差值即为缓存缺口容量。

    进一步的,所述步骤3根据一级缓存中数据包的长度判断末级缓存是否有足够缓存空间,如果末级缓存空间小于数据包长度,一级缓存通过复位清除本包数据。

    本发明与现有技术对比有益效果为:

    本发明提出一种基于fpga的对同步串口传入信息进行串行多级缓存的接收转发方法。对比单级缓存结构,多级缓存结构可以提高同步串口接收转发的可靠性,对于乒乓缓存,多级缓存结构可以提高同步串口数据包接收密度,提高存储资源利用效率。多级缓存结构通过一级缓存并判断缓存容量、标识符、计算并判断校验和,可选二级缓存可补充计算、判断校验和,末级缓存平衡发送方、接收方数据流速。多级缓存结构,可以有效解决同步串口中错数,漏数,多数等数据问题,有效解决部分时间段内出现发送数据率大于接收数据率的传输速率不匹配问题,且数据包接收密度大,存储资源利用效率高。

    附图说明

    图1为同步串口多级缓存接收转发方法流程示意图;

    具体实施方式

    下面结合附图对本发明技术方案进行详细阐述。

    本发明采用被动转发方式,并兼容主动转发方式。如图1所示,本发明提出的一种基于fpga同步串口接收转发方法,包括以下步骤:

    步骤s1、串并转换;

    具体的,串并转换流程将接收的串行单比特数据转换为并行多比特数据,多比特数据位宽为数据在发送方进入串口发送前的数据位宽。串并转换是同步串口接收解析的基础。

    步骤s2、包头及标识符判断;

    步骤s201、判断包头

    fpga对包头进行判断,如果不是包头,则放弃此数据,并继续判断包头。此步骤是将输入的噪声信号、被干扰的串口接收数据、上一个数据包多出的不正常的数据屏蔽,避免对后续处理流程和后续处理节点造成影响。

    判断包头正确后,数据处理分为两路并行,一路执行步骤s202,一路执行步骤s301。

    步骤s202、判断标识符

    本步骤为可选步骤,当串口中发送的数据为发送方与接收方一对一发送,肯定由本转发方接收时,标识符可以不存在,则设置接收标志为1。

    如果发送数据为广播内容,发送方与接收方一对多发送,则需要标识符来判断此包数据是否需要本转发方进行转发。判断标识符,标识符显示本包数据需要本转发方进行转发,则设置接收标志为1,否则设置接收标志为0。

    步骤s3、同步串口多级缓存及解析;

    包括以下分步骤:

    步骤s301、同步串口接收数据存入一级缓存

    对于s201步骤后接收到的数据存入一级缓存,根据包长度判断是否缓存完成一包数据。

    在需要计算校验和的情况下,在数据包存入一级缓存的同时并行计算校验和。

    进一步的,在接收到数据包后开始进行计时,在特定时间内如果没有存储完成一包数据,则判断此包出现丢数错误,一级缓存通过复位清除本包数据,并复位清除校验和、或者校验和的中间值。特定时间由发送方所有数据包中最长的数据包长度的接收时间加上一段保护时间构成。此判断可识别丢数错误,并可降低对下一包数据的影响。

    存储完成一包数据后进入下一流程。

    步骤s302、计算校验和

    校验和应由数据的发起端设置,最终使用节点进行判断,fpga串口接收转发方法中,fpga不是最终处理节点,无须判断校验和。对于接收端处理器,如果处理能力有限,则希望fpga将校验和错误的数据包屏蔽,以减轻处理负担,则此时fpga计算校验和。

    在计算校验和延时短的情况下,在接收到数据包中的数据后,短时间内即可完成校验和计算。计算校验和与步骤s301并行进行,校验和结果等待流程s305判断。

    在计算校验和延时长的情况下,在接收到数据包中的数据后,短时间内无法完成校验和计算。在数据由一级缓存读出时,校验和不一定可以计算完成。在此种情况下,计算校验和与步骤s301并行进行,s301一级缓存存储完成后,步骤s302得到计算校验和的中间值,计算校验和的中间值在步骤s304中继续计算。校验和结果等待流程s305判断。

    计算校验和延时长、短是相对概念,主要取决于同步串口发送方的数据包发送密度,如果数据包之间时间间隔的最小值足够计算出校验和,则可认为计算校验和延时短,由s302步骤即可计算出校验和。否则需要认为计算校验和延时长,在s304步骤中继续计算校验和。

    步骤s303、判断接收标志

    判断步骤s202产生的接收标志,如果标志为0;则此包数据无需处理,一级缓存通过复位清除本包数据,避免占用资源。

    如果标志为1,接收此包数据;若要计算校验和,且计算校验和延时长,则转入步骤s304;若要计算校验和,且计算校验和延时短,则转入步骤s305;若不需要计算校验和,则转入步骤s306;

    进一步的,根据一级缓存中数据包的长度判断末级缓存是否有足够缓存空间,如果末级缓存空间小于数据包长度,一级缓存通过复位清除完整的本包数据。该操作可以避免末级缓存中出现半包数据,末级缓存中的半包数据还可能影响到下一包正常数据。

    步骤s304、同步串口接收数据存入二级缓存

    如果需要计算校验和,且计算校验和延时长,则设置二级缓存。

    二级缓存存储一级缓存的读出数据,并使用步骤s302得到计算校验和的中间值,继续计算接收数据包的校验和,计算出的校验和在流程s305中判断。

    步骤s305、判断校验和

    如果计算校验和,执行本步骤。

    在计算校验和延时短的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,一级缓存通过复位清除本包数据。

    在计算校验和延时长的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,二级缓存通过复位清除本包数据。

    计算完成后,如果校验和正确,则读出数据传输至末级缓存。

    步骤s306、同步串口接收数据存入末级缓存

    具体的,在不判断校验和,或者计算校验和延时短的情况下,末级缓存接收存储一级缓存的读出数据,在开始接收一级缓存的读出数据时,如果缓存内没有存储数据,则将末级缓存非空标志拉低,如果缓存内有存储数据,则将末级缓存非空标志拉高。在末级缓存接收完毕此包数据后,发出一个中断脉冲。

    在判断校验和,且计算校验和延时长的情况下,末级缓存接收存储二级缓存的读出数据,在开始接收二级缓存的读出数据时,如果缓存内没有存储数据,则将末级缓存非空标志拉低,如果缓存内有存储数据,则将末级缓存非空标志拉高。在末级缓存接收完毕此包数据后,发出一个中断脉冲。

    进一步的,所述末级缓存容量大于缓存缺口容量,所述缓存缺口容量计算方法为:

    计算发送端发送的最快速率及持续时间,可得此时的发送数据量;

    计算接收端最慢接收速率及相同的持续时间,可得此时转发数据量;

    发送数据量与转发数据量的差值即为缓存缺口容量。

    进一步的,如果存储资源无法满足缺口容量的要求,且末级缓存中的数据由一级缓存读出,读出前判断末级缓存存储空间是否大于一级缓存中数据包的长度,如果末级缓存空间小于数据包长度,一级缓存通过复位清除完整的本包数据。该操作可以避免末级缓存中出现半包数据,末级缓存中的半包数据还可能影响到下一包正常数据。

    如果接收方需求的数据位宽与发送方数据位宽不同,则在此步骤进行位宽转换,将接发送方数据位宽转换为接收方需求的数据位宽。

    步骤s4、同步串口数据转发

    具体的,同步串口数据转发分为fpga进行主动转发与被动转发两种形式。

    具体的,被动转发模式下,fpga将s306步骤产生的非空标志与中断脉冲信号发给数据接收方,在数据接收方发起数据转发操作后,fpga将数据接收方发来的读使能信号接入末级缓存,将末级缓存中的数据读出,传输至数据接收方。在进行主动转发时,fpga自行判断非空标志与中断脉冲信号,自行产生读使能信号接入末级缓存,将末级缓存中的数据读出,传输至数据接收方。

    上述具体实施方式仅用于解释和说明本发明的技术方案,但并不能构成对权利要求的保护范围的限定。本领域技术人员应当清楚,在本发明的技术方案的基础上做任何简单的变形或替换而得到的新的技术方案,均将落入本发明的保护范围之内。


    技术特征:

    1.一种基于fpga同步串口多级缓存接收转发方法,其特征在于,包括如下步骤:

    步骤1、接收同步串口数据

    将接收的串行单比特数据转换为并行多比特数据,判断包头正确性和标识符,对需要转发的数据包,设置接收标志为1,否则设置接收标志为0;

    步骤2、将同步串口接收数据存入一级缓存

    在需要计算校验和的情况下,在数据包存入一级缓存的同时并行计算校验和;

    计算校验和延时长的,则得到计算校验和的中间值;

    步骤3、判断接收标志

    判断步骤1产生的接收标志,如果标志为0,则一级缓存复位清除本包数据;

    如果标志为1,接收此包数据;若要计算校验和,且计算校验和延时长的,则进入步骤4;若要计算校验和,且计算校验和延时短的,则转入步骤5;若不需要计算校验和,则转入步骤6;

    步骤4、同步串口接收数据存入二级缓存

    二级缓存存储一级缓存的读出数据,并使用步骤2得到的计算校验和的中间值,继续计算接收数据包的校验和;

    步骤5、判断校验和

    在计算校验和延时短的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,一级缓存复位清除本包数据;

    在计算校验和延时长的情况下,对比计算的校验和以及接收到的校验和,如果不等,则此包数据存在异常,二级缓存复位清除本包数据;

    步骤6、同步串口接收数据存入末级缓存

    末级缓存接收存储一级缓存或二级缓存的读出数据;

    步骤7、同步串口数据转发

    fpga采用被动转发方式或主动转发方式,转发同步串口数据。

    2.根据权利要求1所述的一种基于fpga同步串口多级缓存接收转发方法,其特征在于,所述步骤2在接收到数据包后开始进行计时,在特定时间内如果没有存储完成一包数据,则判断此包出现丢数错误,一级缓存复位清除本包数据,并复位清除校验和、或者校验和的中间值;

    所述特定时间由发送方所有数据包中最长的数据包长度的接收时间加上一段保护时间构成。

    3.根据权利要求1或2所述的一种基于fpga同步串口多级缓存接收转发方法,其特征在于,所述末级缓存容量大于缓存缺口容量,

    所述缓存缺口容量计算方法为:

    计算发送端发送的最快速率及持续时间,可得此时的发送数据量;

    计算接收端最慢接收速率及相同的持续时间,可得此时转发数据量;

    发送数据量与转发数据量的差值即为缓存缺口容量。

    4.根据权利要求3所述的一种基于fpga同步串口多级缓存接收转发方法,其特征在于,如果存储资源无法满足缺口容量的要求,且末级缓存中的数据由一级缓存读出,所述步骤6读出前判断末级缓存存储空间是否大于一级缓存中数据包的长度,如果末级缓存空间小于数据包长度,一级缓存通过复位清除本包数据。

    技术总结
    本发明公开了一种基于FPGA同步串口多级缓存接收转发方法,通过一级缓存并判断缓存容量、标识符、计算并判断校验和,可选二级缓存补充计算、判断校验和,末级缓存平衡发送方、接收方数据流速。本发明采用多级缓存结构,可以有效解决同步串口中错数,漏数,多数等数据问题,有效解决部分时间段内出现发送数据率大于接收数据率的传输速率不匹配问题,且数据包接收密度大,存储资源利用效率高。

    技术研发人员:赵晓明;刘彬;裴肖和;高嵩;张小玢;吴金
    受保护的技术使用者:北京华航无线电测量研究所
    技术研发日:2019.09.12
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-9011.html

    最新回复(0)