本发明属于通信技术领域。
背景技术:随着当今电子技术日新月异的发展,时间同步得到了越来越重要的应用。IRIG-B码作为一种串行时间码,是一种重要的时间同步传输的方式,以其实际突出的优越性能,成为时统设备首选的标准码型,广泛的应用到电信、电力、军事等重要行业或部门。对IRIG-B码的编码和译码一般有三种方式:基于FPGA的编码译码、基于单片机的编码译码以及专用的译码芯片。但是现有的IRIG-B码的处理系统多是针对于IRIG-B码(DC码)的译码,需要外部的IRIG-B码的信号源才能完成对译码系统的自检,此种方式在设备研制过程中是十分不方便的。
技术实现要素:本发明为了解决现有的IRIG-B码的处理系统需要外部的IRIG-B码的信号源才能完成对译码系统的自检,译码功能的准确性无法得到检验的问题,提出了基于FPGA的IRIG-B码编码译码系统及其编码译码方法。基于FPGA的IRIG-B码编码译码系统,它包括GPS/北斗双系统模块、FPGA、单片机、DAC芯片、比较器芯片、上位机和PCI转接卡,FPGA内嵌存储控制模块、AC码编码控制逻辑模块、DC码编码控制逻辑模块、DC译码控制逻辑模块和AC码译码控制逻辑模块,所述GPS/北斗双系统模块用于输出时间信息并同时发送给单片机和存储控制模块,存储控制模块用于将接收到的时间信息作为原始的时间源,还用于将该原始的时间源通过PCI转接卡输入到上位机,单片机用于将接收到的时间信息进行译码并输出给DC码编码控制逻辑模块和AC码编码控制逻辑模块,DC码编码控制逻辑模块用于将单片机发送来的时间信息进行DC码的编码,AC码编码控制逻辑模块根据接收到的单片机发送来的时间信息进行AC码的编码,DAC芯片用于接收AC码编码控制逻辑模块输出的调制后的信息,并进行D/A转换,比较器芯片用于采集输入的AC码的零点,AC码译码控制逻辑模块用于控制数据采集芯片采集AC码的幅值,并将其转换为DC码,DC译码控制逻辑模块用于对输入DC码译码,转换为时间信息。基于FPGA的IRIG-B码编码译码系统的编码译码的方法为:步骤一:GPS/北斗双系统模块每秒钟产生一次时间信息和一个秒脉冲信号,步骤二:将步骤一所述的时间信息发送到单片机,单片机将接收到的时间信息进行译码,得到时间信息,步骤三:将步骤二所述时间信息同时输入到AC码编码控制逻辑模块和DC码编码控制逻辑模块,同时执行步骤四和步骤五,步骤四:DC码编码控制逻辑模块对接收到的时间信息进行编码,完成对DC码的编码,执行步骤八,步骤五:AC码编码控制逻辑模块根据接收到的DC码对FPGA中产生的1KHz的正弦波进行幅度调制,完成对AC码的编码,步骤六:将调制后的信号输入到DAC芯片,得到IRIG-B的AC码的模拟量信息,步骤七:将步骤六得到的模拟量信息经过比较器输入到AC码译码控制逻辑模块,得到DC码数字序列,并输入到DC译码控制逻辑模块,步骤八:DC译码控制逻辑模块将接收到的DC码数字序列进行译码,得到时间信息,根据IRIG-B码的协议,P脉冲是一种位置标志位码元,每两个连续的“P”脉冲,之后表示一组新的时间信息的到来,判断出每一个码元所表达的具体含义,当检测到IRIG-B码的两个“P”脉冲之后,在下一个码元开始的上升沿把译出的信息赋值到相应的表示时间信息的寄存器变量中,然后输入到上位机,即完成对DC码的译码和AC码的译码。本发明通过系统的编码功能实现对系统译码功能的检验,系统本身可以完成自检功能。编码的基准源来自于GPS/北斗双系统模块,把译码的结果和GPS/北斗双系统模块的时间信息通过CPCI总线上传到上位机,即将自检的结果与原始的时间源作比较可以很方便的检验系统的译码功能的准确性,实现了在没有IRIG-B码外部信号的情况下完成对译码功能的自检。本发明的主要优点是:1.FPGA配合外围DAC芯片实现对IRIG-B码的两种形式AC码及BC码的编码输出;2.FPGA配合外围比较器芯片实现对IRIG-B码的两种形式AC码及BC码的输入译码;3.通过对译码和编码功能的输入输出环回,实现系统的自检,而不需要外部的IRIG-B码的信号源。4.IRIG-B码(AC码及DC码)编码的时间基准来自系统上的GPS/北斗双系统模块,通过对译码结果和GPS/北斗双系统模块产生的时间进行比较可以更好的对系统的准确性进行验证。5.本系统的编码所用的时钟与译码所用的时钟不同,可以更好的模拟外部的IRIG-B码的输入。6.本方法设计的各部分功能模块具有独立性与通用性,可应用于其它设计。附图说明图1为系统整体工作框图;图2为AC码与DC码的关系示意图;图3为AC码编码控制逻辑的状态图;图4为DC码译码控制逻辑状态图;图5为DC码译码结果输出控制逻辑状态图;图6为AC码的输入与过零比较的关系示意图;图7为过零比较器零点附近产生抖动问题示意图;图8为本发明的工作流程;图9为具体实施方式五所述的编码译码的方法的流程图。具体实施方式具体实施方式一:参见图1说明本实施方式,本实施方式所述的基于FPGA的IRIG-B码编码译码系统,它包括GPS/北斗双系统模块1、FPGA2、单片机3、DAC芯片4、比较器芯片5、上位机6和PCI转接卡7,FPGA2内嵌存储控制模块2-1、AC码编码控制逻辑模块2-2、DC码编码控制逻辑模块2-3、DC译码控制逻辑模块2-4和AC码译码控制逻辑模块2-5,所述GPS/北斗双系统模块1用于输出时间信息并同时发送给单片机3和存储控制模块2-1,存储控制模块2-1用于将接收到的时间信息作为原始的时间源,还用于将该原始的时间源通过PCI转接卡7输入到上位机6,单片机3用于将接收到的时间信息进行译码并输出给DC码编码控制逻辑模块2-3和AC码编码控制逻辑模块2-2,DC码编码控制逻辑模块2-3用于将单片机3发送来的时间信息进行DC码的编码,AC码编码控制逻辑模块2-2根据接收到的单片机3发送来的时间信息进行AC码的编码,DAC芯片4用于接收AC码编码控制逻辑模块2-2输出的调制后的信息,并进行D/A转换,比较器芯片5用于采集输入的AC码的零点,AC码译码控制逻辑模块2-5用于控制数据采集芯片采集AC码的幅值,并将其转换为DC码,DC译码控制逻辑模块2-4用于对输入DC码译码,转换为时间信息。本实施方式所述的FPGA2通过PCI转接卡7与上位机6相连是指通过PCI转接卡把模块插到计算机的PCI插槽中;在上位机6中安装模块的驱动;在安装GPS/北斗双系统模块1上安装GPS/北斗双系统模块1的天线;本实施方式所述GPS/北斗双系统模块1、FPGA2、单片机3、DAC芯片4和比较器芯片5集成在板卡上。具体实施方式二:本实施方式是对具体实施方式一的进一步限定,所述DAC芯片4采用DAC7714实现,所述DAC7714为12位的串行输入的D/A转换器。具体实施方式三:本实施方式是对具体实施方式一的进一步限定,所述比较器芯片5为过零比较器芯片。具体实施方式四:参见图9说明本实施方式,具体实施方式一所述的基于FPGA的IRIG-B码编码译码系统的编码译码的方法为:步骤一:GPS/北斗双系统模块1每秒钟产生一次时间信息和一个秒脉冲信号,步骤二:将步骤一所述的时间信息发送到单片机3,单片机3将接收到的时间信息进行译码,得到时间信息,步骤三:将步骤二所述时间信息同时输入到AC码编码控制逻辑模块2-2和DC码编码控制逻辑模块2-3,同时执行步骤四和步骤五,步骤四:DC码编码控制逻辑模块2-3对接收到的时间信息进行编码,完成对DC码的编码,执行步骤八,步骤五:AC码编码控制逻辑模块2-2根据接收到的DC码对FPGA中产生的1KHz的正弦波进行幅度调制,完成对AC码的编码,步骤六:将调制后的信号输入到DAC芯片,得到IRIG-B的AC码的模拟量信息,步骤七:将步骤六得到的模拟量信息经过比较器输入到AC码译码控制逻辑模块2-5,得到DC码数字序列,并输入到DC译码控制逻辑模块2-4,步骤八:DC译码控制逻辑模块2-4将接收到的DC码数字序列进行译码,得到时间信息,根据IRIG-B码的协议,P脉冲是一种位置标志位码元,每两个连续的“P”脉冲,之后表示一组新的时间信息的到来,判断出每一个码元所表达的具体含义,当检测到IRIG-B码的两个“P”脉冲之后,在下一个码元开始的上升沿把译出的信息赋值到相应的表示时间信息的寄存器变量中,然后输入到上位机,即完成对DC码的译码和AC码的译码。本实施方式中DC译码控制逻辑模块2-4输出的DC码和GPS/北斗双系统模块的时间信息上传到上位机,即将自检的结果与原始的时间源作比较,从而实现对译码功能的自检。本发明可以通过板卡上的测试孔用示波器观察产生的DC码和AC码;通过在上位机中观察AC码译码产生的信息、DC码译码产生的信息以及GPS/北斗双系统模块1产生的时间信息来实现系统的自检,具体工作流程如图8所示。本实施方式中的IRIG-B码是时间系统中的一种常用串行传输方式,B码分为直流(DC)码和交流(AC)码,直流码为脉宽编码方式;交流码是以1KHz的正弦波载频对直流码进行幅度调制后形成的。一帧B码共包含10组100位数据,每组数据周期为100ms、包含10个码元,每个码元为10ms宽度,脉冲不同宽度表示不同编码信息,GPS/北斗双系统模块1每秒钟产生一次时间信息和一个秒脉冲信号,其中每个秒脉冲信号包含100个码元,所述码元分为三种,即P脉冲、数字“1”和数字“0”,所述P脉冲的高电平宽度为8ms,低电平宽度为2ms,所述数字“1”的高电平宽度为5ms,低电平宽度为5ms,所述数字“0”的高电平宽度为2ms,低电平宽度为8ms,P脉冲是一种位置标志位码元,一帧B码共包含10个P脉冲,把100位码元分成10组。为了准确测出码元所表示的信息,同时考虑到降低逻辑资源的占用,采用200us的时钟检测每一个码元。考虑到外部信号可能有毛刺以及抖动的情况,当检测到码元的高电平宽度低于400us时不做处理。为了提高对DC码译码的准确性,进行了容错处理。用周期为200us的时钟检测每一个码元的高电平的时间长度T,根据不同T的值来判断码元所表示的信息。本实施方式所述的GPS/北斗双系统模块1每秒钟产生一次时间信息和一个秒脉冲信号(1PPS),所述时间信息和秒脉冲信号是同时产生的,时间信息的数据格式为:“$GPRMC,123400.000,A,4002.2178,N,11618.1057,E,0.026,181.631,180411,,E,A*2C”对于GPS/北斗双系统模块1产生时间信息的数据的译码FPGA2和单片机3都可以完成,由单片机3来译码更加简单。GPS/北斗双系统模块1产生时间信息的数据接口为UART串口,时间信息发送到单片机3。单片机3对时间信息进行译码后发送到FPGA2,FPGA2分别用不同的寄存器表示时间信息的不同部分,即DW_sec_ge[3:0]表示时间信息中秒的个位、DW_sec_shi[3:0]表示时间信息中秒的十位、DW_min_ge[3:0]表示时间信息中分的个位、DW_min_shi[3:0]表示时间信息中分的十位等等。例如:当时间信息是2013年01月21日16时47分39秒时,秒的个位为9则DW_sec_ge[3:0]=1001、秒的十位为4则DW_sec_shi[3:0]=0100,依此类推DW_min_ge[3:0]=0111、DW_min_shi[3:0]=0001。在产生时间信息的下一个脉冲,表示时间信息的各个寄存器变量值赋给DC译码控制逻辑模块2-4,DC译码控制逻辑模块2-4也把相应的时间信息存储在寄存器变量中。由于IRIG-B码在1秒时间内有100个码元,因此用18.432M时钟对秒脉冲信号进行100分频产生信号a_100pps_in,即100PPS信号。用100PPS信号来产生IRIG-B码的码元,在每一个100PPS信号的上升沿产生一个码元,因此100个100PPS信号时间长度即1秒产生100个码元。IRIG-B码的起始信号与秒脉冲信号的上升沿同步,因此用上面方法在1S内产生的误差最大为1个18.432M时钟信号的时钟长度,即1/18432000秒约等于54ns。由于100PPS信号来源于秒脉冲信号的分频,在每一个秒脉冲信号的上升沿开始100分频,因此误差不积累,即产生的IRIG-B码的理论最大误差只有54ns。对应的每一个码元,是时间信号还是P脉冲是有IRIG-B码的协议规定的。例如秒的个位用第1、2、3、4码元表示,时间为2013年01月21日16时47分37秒时,秒的个位为7,用二进制表示为0111,则第1、2、3、4码元分别对应着1110。DC译码控制逻辑模块2-4对于每个码元信息的产生是根据IRIG-B码的协议和接收的时间信息来决定的。每一个码元的时间长度是10ms,用18.432M的时钟计数,用寄存器tmp_P[31:0]表示计数的个数,从0记到184319是10ms,然后从0开始计数。当tmp_P<n时IRIG-B码输出为1,当tmp_P>=n时IRIG-B码输出为0,当码元为P脉冲式时n=147455,即高电平时间长度为8ms。依此类推码元为“1”时n=92159、推码元为“0”时n=36863,其他情况n=36863。tmp_P在两种情况复位归零,一是tmp_P>=184319时,二是100pps的上升沿,这保证了tmp_P在码元的上升沿开始计数。由于用18.432M时钟计数,同上面分析,每个码元信息的理论最大误差只有54ns,且误差不累加。在GPS/北斗双系统模块1产生时间信息的下一个脉冲,表示时间信息的各个寄存器变量值赋给DC译码控制逻辑模块2-4,DC译码控制逻辑模块2-4在第99个码元(共有100个码元,从0开始,第99个码元是最后一个码元并且不表示时间信息)的上升沿把有时间信息决定的N值赋给各个码元的tmp_P。因此产生的IRIG-B码表示的时间信息与GPS/北斗双系统模块1产生时间信息之间差2秒。具体实施方式五:参见图3说明本实施方式,本实施方式是对具体实施方式四的进一步限定,所述步骤五所述的AC码编码控制逻辑模块2-2中DC码对FPGA产生1KHz的正弦波进行幅度调制的具体方法为:AC码编码控制逻辑模块的输入为DC码DC_IN,在DC_IN的上升沿,标志值DC_IN高电平的输入,这时把ROM的地址ROM_ADD复位为0,控制FPGA2的ROM从地址0到地址ROM_ADD依次读出Nx,读出的Nx输入到DACC7714的控制逻辑中,控制DAC芯片4输出相应的幅值,每读一次Nx,ROM的地址ROM_ADD加1,然后延时20us,50次后ROM_ADD复位为0,输出高幅值正弦波,在DC_IN的下降沿,标志值DC_IN低电平的输入,把ROM的地址ROM_ADD复位为50,依次读取Nx50次,然后ROM_ADD复位为50,输出低幅值正弦波,将得到的正弦波进行查表,实现AC码编码。本实施方式中的IRIG-B码的AC码是用DC码对1KHz的正弦波进行幅度调制而成的,因此在产生AC码时,也是在DC码的基础上产生的。AC码产生的是1KHz的正弦波,因此需要外围DAC芯片在FPGA2的控制下产生。每一个码元有10个周期的正弦波,每个正弦波的周期为1ms,正弦波的幅值由码元所表示的信息决定。例如表示“P”脉冲的码元高电平为8ms,低电平为2ms,则产生的正弦波为8个高幅值的正弦波,2个低幅值的正弦波。AC码与DC码的关系如图2所示:AC码的产生是基于FPGA2的查找表法实现的。AC码的产生只需要两种类型的正弦波:高幅值正弦波和低幅值正弦波,高幅值正弦波和低幅值正弦波的幅值比是由AC码所要求的调制比决定的。产生AC码所用的外围芯片为DAC7714,此芯片为12位的串行输入的DA转换器,不同的输入对应着不同的输出。输入的数据与输出的电压的关系有如下公式(1)给出:各参数的含义:Vout:DAC的电压输出VREFL:负参考电压VREFH:正参考电压N:数字量输入数字量输入的范围为0-4096,对应的输出为-10V~10V。根据采样定理对1KHz的正弦波进行采样,采样频率最少为5KHz。DAC7714完成一次输出需要11us,输出频率能够达到90KHz。根据DAC芯片的输入输出特性同时考虑到正弦波曲线的光滑性,把高幅值正弦波的一个周期内的幅值按时间均匀分成50等份即采样频率为50KHz,根据得到的Voutx计算出相应的Nx,计算过程有LabVIEW编写的一个软件自动完成。有LabVIEW根据计算公式(1)计算得到的50个12位的二进制数分别存储到一个以HEX为后缀的文件中,对应的地址分别为0-49,FPGA2内的ROM从这个文件中读取相应的数据。同理由低幅值正弦波得到的50个数存储到地址为50-99的空间中去。具体实施方式六:本实施方式是对具体实施方式四的进一步限定,所述步骤四所述的DC码编码控制逻辑模块2-3产生DC码数字序列的方法为::根据IRIG-B码的协议和接收的时间信息,用18.432M时钟对每一个秒脉冲信号进行100分频,产生信号a_100pps_in,即100PPS信号,用100PPS信号来产生IRIG-B码的码元,在每一个100PPS信号的上升沿产生一个码元,每一个码元的时间长度是10ms,用18.432M的时钟计数,用寄存器tmp_P[31:0]表示计数的个数,从0记到184319是10ms,然后从0开始计数,当tmp_P<n时IRIG-B码输出为1,当tmp_P>=n时IRIG-B码输出为0,当码元为P脉冲式时n=147455,即高电平时间长度为8ms,码元为“1”时n=92159,码元为“0”时n=36863,其它情况n=36863,当tmp_P>=184319或100pps的上升沿时,tmp_P复位归零,DC码编码控制逻辑模块2-3在第99个码元的上升沿把有时间信息决定的N值赋给各个码元的tmp_P。具体实施方式七:参见图4和图5说明本实施方式,本实施方式是对具体实施方式四的进一步限定,所述AC码编码控制逻辑模块2-2包括如下工作状态:AC码编码控制逻辑模块2-2处于空闲状态时输入DC码,当DC码处于下降沿时,AC码编码控制逻辑模块2-2由空闲状态转入低幅值正弦波输出状态,当DC码处于上升沿时,AC码编码控制逻辑模块2-2由空闲状态转入高幅值正弦波输出状态,当DC码处于上升沿时,AC码编码控制逻辑模块2-2由低幅值正弦波输出状态转入高幅值正弦波输出状态,当DC码处于下降沿时,AC码编码控制逻辑模块2-2由高幅值正弦波输出状态转入低幅值正弦波输出状态。具体实施方式八:参见图6说明本实施方式,本实施方式是对具体实施方式四的进一步限定,所述AC码译码控制逻辑模块2-5的具体工作过程为:将AC码编码输入经过一个过零比较器,在过零比较输出的上升沿之后延时250us正好检测到AC码输入的峰值,这时控制ADC芯片采集AC码的输入,设AC码高正弦波的最大峰值为X,低正弦波的最大峰值为Y,AD采集的值为Z,当Y<Z<=X时输出高电平,当Z<=Y时输出低电平。本实施方式中的AC码译码控制逻辑模块2-5检测到高电平后开始计时,如果高电平的时间长度不够20us,则重新开始计算高电平,这样就可以很好的解决过零比较器在零点附近抖动的问题。过零比较器零点附近产生抖动问题示意图如图7所示。DC码的输出与AC码的输入相比正好延迟了250us即四分之一个周期,AC转换为DC码之后,输入到DC译码控制逻辑模块2-4就可以完成对AC码模块的译码。具体实施方式九:参见图4和图5说明本实施方式,本实施方式是对具体实施方式四的进一步限定,所述DC译码控制逻辑模块2-4译码的具体工作状态为:当DC码高电平输入时,由空闲状态转入干扰判断状态,在干扰判断状态时,对输入的DC码进行判断,如果有毛刺以及抖动,则由干扰判断状态转入空闲状态,如果没有毛刺以及抖动,则由干扰判断状态转入高电平计数状态,检测到码元宽度X大于6.2ms时,由高电平计数状态转入P脉冲处理状态,检测到码元宽度X大于3.8ms且小于6.2ms时,由高电平计数状态转入数字1处理状态,检测到码元宽度X大于1.4ms且小于3.8ms时,由高电平计数状态转入数字0处理状态;所述DC译码控制逻辑模块2-4结果输出的具体工作状态为:当检测到两个连续的“P”脉冲信号时,由空闲状态转入状态标志状态,当DC码输入上升沿时,由状态标志状态转入数据输出状态,数据输出状态转入延时状态,接着由延时状态转回空闲状态。本实施方式中译出的时间与DC码表示的时间之间差1s,这是不可避免的。本发明实现了IRIG-B码的环回自检,DC码编码的输出信号在板卡的外面环回到DC码译码的输入信号,DC译码控制逻辑模块2-4把DC码的时间信息译出后放到相应的寄存器中,通过CPCI总线上传到上位机中,用LabVIEW编写的软件显示,GPS/北斗双系统模块1产生的时间信息一路发送的单片机3译码,另一路直接发送到FPGA2,FPGA2中的串行接收模块把收到的串行数据转换为并行数据存储到FIFO中,根据FIFO收到的数据个数,再把FIFO中的数据转移到FPGA2中的RAM中去,这样上位机就可以随时读取FPGA2中收到的GPS/北斗双系统模块1发来的时间信息,解决了能把FIFO读空的问题。上位机读取到GPS/北斗双系统模块1产生的原始信息后会对它进行译码,把时间信息译出来,DC码从原始信息经历编码译码之后与原始信息相比延时了3秒,AC码延时了3.25秒。在LabVIEW编写的上位机软件中可以很方便的观察DC码译码信息、AC码译码信息和原始的时间信息。