新闻中心

EEPW首页>EDA/PCB>设计应用> 基于FPGA的IRIG-B编码器的设计

基于FPGA的IRIG-B编码器的设计

作者: 时间:2012-08-27 来源:网络 收藏

if pps上升沿then rx_count=0

else接收到数据and rx_count

M12T在每个1 pps的上升沿过后送出当前时间,而通过UART接收到时间时,B码当前帧已经启动,据此形成的B码要等下一个pps参考点之后才可以发送,所以对接收的时间要进行预进位处理。

本文在预处理部分设计了一个RTC计时链,在每个1 pps的上升沿,计时链向上进位,编码模块从RTC计时链取绝对时间。从UART接收到新的时间后,如果该时间与计时链的值有差异,则将通过计时链的同步置数接口修正计时链的值。同时计时链负责把M12T的二进制时间转换成压缩的BCD码,还要根据当前接收到的年月日,计算当天是全年中的第几天,即码中的Day字段,而且在预加1 s和转换时间格式时,要注意闰年和月大和月小对Day字段的影响。

4编码模块实现

4.1DC编码模块

分析B码可以发现,秒的最低位出现在MMH=1处,分的最低位出现在MMH=10处,小时的最低位出现在MMH=20处,依次类推。按照图1,容易得出时间寄存器输出时刻和码元计数器MMH之间的关系。由于码元周期固定为10 ms,可以这样实现编码,定义一个模10的计数器MML和逻辑向量CMP(9 down to0)来表征一个码元在10 ms的状态。MML每ms加1,同时根据MML的值,选择CMP的一位更新输出状态,步骤如下:

(1)构建模10计数器MML,以及一个1 ms定时器;

(2)在PPM12信号的上升沿复位MML和1 ms定时器;

(3)1 ms定时器溢出时,MML加1;

(4)根据MML和CMP输出编码信号IRIG_B_OUT,即IRIG_B_OUT=CMP(MML);

(5)在PPM12的上升沿根据第3.1节所得码元计数器MMH重新加载CMP

算法VHDL描述如下:

在上述VHDL编码的实现中,MSCLK为1 mS计数脉冲,同步于PPM12信号的上升沿。CMP的输出值由函数IRIG_B根据输入参数决定,若为0,则输出“0000000011”,对应2 ms;若为1则输出“0000011111”,对应5 ms,在索引脉冲和参考点Pr处,CMP取值“0011111111”,对应8 ms。而最终的编码输出IRIG_B_OUT在每个1 ms脉冲的上升沿,根据CMP(MML)的值决定为高或为低。



关键词:IRIG-BFPGA编码器

评论


相关推荐

技术专区

关闭