一种双缓冲IRIG-B码产生方法与流程

文档序号:22889721发布日期:2020-11-10 18:12阅读:224来源:国知局
一种双缓冲IRIG-B码产生方法与流程

本发明属于b码的生成技术领域,具体涉及一种双缓冲irig-b码产生方法。



背景技术:

irig-b格式时间码,简称b码,是每秒一帧的时间码,最适合使用的习惯,而且传输也较容易,因此,在irig六种串行时间码格式中,应用最为广泛的是b码,irig-b码主要包含码元识别、时帧和时间编码这三方面内容。在时间编码后形成时帧的过程中,每个码元值形成不同脉宽的码元需要做以下工作:一是实时产生1khz的时帧方波,二是对齐秒脉冲的地方产生秒界,三是秒界开始顺序判断100个码元的除p码外的值,由1khz的时钟触发输出不同脉宽的10毫秒脉冲。常规的解决方案如下:

1、全软件方案

采用cpu程序完成gps信号的解码和b码的编码。这种方案简单廉价,但由于cpu的运行速度、多任务和中断响应速度等原因,只能满足同步精度要求不高的需求。

2、全硬件方案

采用cpld或fpga全硬件方式完成gps信号的解码和b码的编码。这种方案能获得很高的精度,但设计难度太大,如utc时间闰秒时就很难实现解码和编码,且成本高,缺乏灵活性,不能实用化。

3、软硬件结合的方案

釆用cpu完成gps信号的解码,采用cpld或fpga全硬件方式完成b码的编码,cpu只间接参与b码码元的产生,或硬件产生相对重要的码元前沿而cpu产生后沿。这种方案仍然可获得很高的精度,同时降低了设计的难度和成本,但产生后沿的时候,需要cpu响应每个10ms码元的前沿,再判断cpu组织的码元值定该码元的脉宽,降低了精确性,如果mcu中的中断任务过多,可能会导致漏码的问题,可靠性较低。

因此,提供一种在保证精度高的情况下,可靠性高、便于实现的b码产生方法是很有必要的。



技术实现要素:

本发明的目的是为了克服现有技术的不足,而提供一种双缓冲irig-b码产生方法,能够使码元的前沿和后沿均在fpga中产生,不需要cpu响应10ms中断,减轻cpu负荷,具有精度高、可靠性高、便于实现的特点。

本发明采用的技术方案为:一种双缓冲irig-b码产生方法,包括如下步骤:

a.在fpga中设置两个深度为128位、宽为1的fifo作为b码码元的双缓冲,并均初始化为空闲状态,此时秒信号触发标志为0;

b.在当前秒信号时刻,cpu中产生一组b码码元内容;

c.在当前秒信号后500ms时刻,cpu侧将该组b码码元通过io口写入到fpga的fifo中,在写入过程中,fpga随机选择一个空闲状态的fifo来存储该组b码码元,该空闲状态的fifo变为存储态;

d.将秒信号触发标志设置为1,fpga侧触发产生本秒b码时帧,在秒信号前沿时刻,置上述存储态的fifo的读使能,fpga将该存储态的fifo改成编码状态;

e.fpga按b码时序读取该编码状态的fifo中的b码码元来进行编码,在编码过程中,cpu产生一组新的b码码元,并将该组b码码元写入到fpga中另一个为空闲状态的fifo中,该空闲状态的fifo存储该组码元并变为存储态;

f.fpga对上述编码状态的fifo中的b码码元进行编码直至该fifo缓冲为空时,编码完成,停止读,该编码状态的fifo还原成空闲状态;

g.fpga侧触发新的b码时帧秒界信号产生,循环步骤d到f,直至产生连续的b码时帧。

在所述步骤a中,秒信号触发标志为0是通过将32位毫秒计数器设置为0来实现的。

在所述步骤d中,秒信号触发标志为1是通过将32位毫秒计数器设置为当前的tickcount来实现的。

在所述步骤e中,fpga按b码时序读取该编码状态的fifo中的b码码元来进行编码的具体步骤为:该编码状态的fifo从pr码元开始发送,并在每个码元发送后的5ms时刻,fpga将读使能fifo的读时钟置1产生一个上升沿,触发该fifo出栈一个b码码元,fpga逐一读取b码码元内容,直到该fifo缓冲为空,则停止读。

编码状态的fifo从pr码元开始发送时,在每个码元发送后的10ms时刻,设置下一个b码码元的前沿,根据读取的b码码元设置下一个码元的脉宽值,fpga中的当前码元脉宽值与提前设置的码元脉宽值相等时刻,设置b码码元的后沿。

本发明的有益效果:本发明通过设置两个fifo作为b码码元的双缓冲,在读取编码状态的fifo中的b码码元进行编码的过程中,编码状态的fifo中产生b码码元的前沿和后沿,cpu中产生的需要下一秒进行编码的码元内容先存储在另一个空闲的fifo中作为备用,使时帧编码贯穿整秒,不需要cpu响应10ms中断,避免了下一秒刷新不了新的时码信息这一问题,从而具有精度高、可靠性高的优点,且便于实现。

附图说明

图1为本发明的流程图;

图2为本发明所述fifo的端口示意图;

图3为本发明所述b码码元写处理时序图;

图4为本发明所述b码码元读处理时序图;

图5为本发明所述b码码元处理初始化流程图;

图6为本发明所述fpga侧触发本秒b码时帧产生的流程图;

图7为本发明所述fpga侧fifo读出b码码元模块的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

如图1所示,本发明包括如下步骤:

a.在fpga中设置两个深度为128位、宽为1的fifo作为b码码元的双缓冲,如图2所示,并均初始化为空闲状态,此时秒信号触发标志为0;

b.在当前秒信号时刻,cpu中产生一组b码码元内容;

c.在当前秒信号后500ms时刻,cpu侧将该组b码码元通过io口写入到fpga的fifo中,b码码元写处理时序图如图3所示,在写入过程中,fpga随机选择一个空闲状态的fifo来存储该组b码码元,该空闲状态的fifo变为存储态;

d.将秒信号触发标志设置为1,fpga侧触发产生本秒b码时帧,在秒信号前沿时刻,置上述存储态的fifo的读使能,fpga将该存储态的fifo改成编码状态;

e.fpga按b码时序读取该编码状态的fifo中的b码码元来进行编码,b码码元读处理时序图如图4所示;

在编码过程中,cpu产生一组新的b码码元,并将该组b码码元写入到fpga中另一个为空闲状态的fifo中,该空闲状态的fifo存储该组码元并变为存储态;

f.fpga对上述编码状态的fifo中的b码码元进行编码直至该fifo缓冲为空时,编码完成,停止读,该编码状态的fifo还原成空闲状态;

g.fpga侧触发新的b码时帧秒界信号产生,循环步骤d到f,直至产生连续的b码时帧。

本发明通过设置两个fifo作为b码码元的双缓冲,在读取编码状态的fifo中的b码码元进行编码的过程中,编码状态的fifo中产生b码码元的前沿和后沿,cpu中产生的需要下一秒进行编码的码元内容先存储在另一个空闲的fifo中作为备用,使时帧编码贯穿整秒,不需要cpu响应10ms中断,避免了下一秒刷新不了新的时码信息这一问题,从而具有精度高、可靠性高的优点,且便于实现。

实施例2

如图1所示,本发明包括如下步骤:

a.在fpga中设置两个深度为128位、宽为1的fifo作为b码码元的双缓冲,如图2所示,并均初始化为空闲状态,此时秒信号触发标志为0,初始化时的秒信号触发标志为0是通过将32位毫秒计数器设置为0来实现的,其b码码元处理初始化过程如图5所示;

b.在当前秒信号时刻,cpu中产生一组b码码元内容;

c.在当前秒信号后500ms时刻,cpu侧将该组b码码元通过io口写入到fpga的fifo中,b码码元写处理时序图如图3所示,在写入过程中,fpga随机选择一个空闲状态的fifo来存储该组b码码元,该空闲状态的fifo变为存储态。

cpu侧按表一所描述方式将该组b码码元除p0和pr外的98个码元通过io口存储到fpga的fifo中,表一如下所示:

表一b码码元存储位置

fifo模块端口定义如表二所示:

表二fifo模块端口定义

d.将秒信号触发标志设置为1,fpga侧触发产生本秒b码时帧,秒信号触发标志为1是通过将32位毫秒计数器设置为当前的tickcount来实现的,即fpga侧触发产生本秒b码时帧的过程如图6所示;

在秒信号前沿时刻,置上述存储态的fifo的读使能,fpga将该存储态的fifo改成编码状态;

e.fpga按b码时序读取该编码状态的fifo中的b码码元来进行编码,b码码元读处理时序图如图4所示,编码的具体步骤为:该编码状态的fifo从pr码元开始发送,并在每个码元发送后的5ms时刻,fpga将读使能fifo的读时钟置1产生一个上升沿,触发该fifo出栈一个b码码元,fpga逐一读取b码码元内容,直到该fifo缓冲为空,则停止读,在每个码元发送后的非5ms时刻,读使能状态的fifo的读时钟置为0,关闭读时钟;

编码状态的fifo从pr码元开始发送时,在每个码元发送后的10ms时刻,设置下一个b码码元的前沿,根据读取的b码码元设置下一个码元的脉宽值,fpga中的当前码元脉宽值与提前设置的码元脉宽值相等时刻,设置b码码元的后;

其中,上述根据读取的b码码元设置下一个b码码元的脉宽值参照b码编码规范要求,具体为:若当前读取的b码码元为p码,则b码脉宽设置为8ms,若当前b码码元读取结束且b码码元值为1时,则b码脉宽设置为2ms,若当前b码码元读取结束且码元值非1时,则b码脉宽设置为5ms。

在编码过程中,cpu产生一组新的b码码元,并将该组b码码元写入到fpga中另一个为空闲状态的fifo中,该空闲状态的fifo存储该组码元并变为存储态;

f.fpga对上述编码状态的fifo中的b码码元进行编码直至该fifo缓冲为空时,编码完成,停止读,该编码状态的fifo还原成空闲状态;

另外需要说明的是,置双缓冲中其中一个fifo的读使能时,输出相对应的b码码元值,若将两个fifo分别标志为fifo1和fifo2,则fpga侧fifo读出的b码码元模块过程如图7所示。

g.fpga侧触发新的b码时帧秒界信号产生,循环步骤d到f,直至产生连续的b码时帧。

本方法的验证环境中硬件环境为在lattic的xp2-5e的fpga,stm32f207的mcu(cpu)上,软件环境为verilog数字系统设计语言和keilc。

本发明通过设置两个fifo作为b码码元的双缓冲,在读取编码状态的fifo中的b码码元进行编码的过程中,编码状态的fifo中产生b码码元的前沿和后沿,cpu中产生的需要下一秒进行编码的码元内容先存储在另一个空闲的fifo中作为备用,使时帧编码贯穿整秒,不需要cpu响应10ms中断,避免了下一秒刷新不了新的时码信息这一问题,从而具有精度高、可靠性高的优点,且便于实现。

对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的得同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1