FPGA实现IRIG-B(DC)码编码和解码的设计
FPGA完成这个时刻的B码编码后,会立即不断地搜索下一个pps_in的上升沿,GPS模块每秒都会触发pps_in的上升沿,一旦发现pps_in上升沿,马上进入下一秒的编码。这样编程的好处是B码大致上可以与1 pps同步,延迟少且方便测试。FPGA对IRIG-B码秒信号的编码仿真波形如图4所示。
如上图所示,第1行信号是40 MHz的晶振时钟;第2行信号是输入信号pps_in;第3行信号是复位信号,低电平有效;第4行信号是分频后的时钟信号5 MHz;第5行是输入秒信号,此时秒信号sec bcd[7..0]为8位二进制数10001000;最后一行信号是B码的编码信号。当pps_in上升沿到来时,FPGA对B码在5 MHz时钟的上升沿处立即产生高电平,首先是B码输出位置识别标志Pr(高电平8 ms,低电平2 ms),接着8位二进制的秒信号从低位至高位输出,实现计数器计数编码,放大波形可以知道,此时B码与pps_in有100 ns的滞后,100ns的延迟对时序同步影响很小,可以忽略不计。然后FPGA根据状态机的状态运行,直到下一个pps_in上升沿来临。
3IRIG-B码解码
解码部分的设计采用两个时钟来处理,晶振的时钟为40 MHz,通过分频,可以得到一个是10 kHz的时钟,和一个10 MHz的时钟。先采用10 kHz的时钟,当连续监测到2个脉宽为8 ms的位置标示信号时,启动1个计时器,当计时器计时到990 ms时,产生1个使能信号EN,这个信号是传递给高频时钟的监测使能信号。接着计时器清零,等待下一次监测到连续2个脉宽为8 ms的信号出现时,计时器重新开始计时。
如果只采用高频时钟的话,要监测2个脉宽为8 ms的信号与计时将会非常浪费逻辑资源。所以在前一部分的监测与计时用低频时钟进行;在准时对应的上升沿来临前2 ms为高频时钟部分提供1个使能信号;高频时钟处理部分接收到此使能信号EN后再监测B码的PR的上升沿,当监测到PR为高电平后,发出1个脉冲1 pps。经过这样的处理,就能精确的提取出1 pps信号以及与1 pps精确同步的10 MHz脉冲信号。1 pps对时信号的提取如图5所示。
评论