当前位置: 首页 > news >正文

[实战] IRIG-B协议详解及Verilog实现(完整代码)

目录

  • IRIG-B(B码)协议详解及Verilog实现
    • 一、IRIG-B协议概述
    • 二、帧格式详细解析
      • 1. 码元类型与索引计数
      • 2. 时间编码字段
      • 3. 控制功能码元(CF)
      • 4. 纯二进制秒码(SBS)
    • 三、编码与信号特性
    • 四、时间编码实现
      • 1. 时间参数转换
      • 2. 帧数据填充规则
    • 五、从数字编码到物理信号
      • 1. 波形生成原理
      • 2. 示例波形分析(前20码元)
    • 六、协议特性与工程实践
      • 1. 直流(DC)与交流(AC)调制对比
      • 2. 扩展协议实践
    • 七、应用场景与优势
    • 八、总结

IRIG-B(B码)协议详解及Verilog实现

代码下载(含Verilog实现与python编码实现)

一、IRIG-B协议概述

IRIG-B(InterRange Instrumentation Group-B)是由美国靶场仪器组制定的时间同步标准,广泛应用于电力、通信、航空航天及军事领域。其核心特点为每秒传输一帧时间码(1帧/s),包含100个码元,每个码元持续10ms。协议支持直流(DC)和交流(AC)两种调制方式,其中:

  • IRIG-B(DC):采用脉宽调制,同步精度达几十纳秒,接口为TTL或RS422。
  • IRIG-B(AC):通过1kHz正弦波载波幅度调制,同步精度为10~20微秒,接口为平衡接口。

二、帧格式详细解析

IRIG-B的帧结构以秒为周期,每帧包含100个码元,通过脉宽和位置标识编码时间信息及控制功能。

1. 码元类型与索引计数

  • 码元类型
    • “0”码元:脉宽2ms(占索引计数间隔的20%)。
    • “1”码元:脉宽5ms(占索引计数间隔的50%)。
    • 位置识别标志“P”:脉宽8ms(占索引计数间隔的80%),每10个码元出现一次(P0~P9)。
  • 索引计数
    • 从帧参考点(Pr)开始,以10ms为间隔递增,范围0~99。
    • 帧参考点由连续两个“P”码元标识,第二个“P”码元前沿为“准时”参考点。用易懂的话描述就是,每帧的P0的上升沿为1秒的开始,连续的两个P,其实是由上一帧的P9和下一帧的P0组成。

简单易懂的说法就是每个码元都是1个10ms的脉冲,占空比为20%表示0,站控比为50%表示1,占空比80%表示P。也就是每个0由2ms高和8ms低构成,1由5ms高和5ms低构成,P由8ms高和2ms低构成。

2. 时间编码字段

时间信息采用二进制编码十进制(BCD)格式,按“秒-分-时-天”顺序排列:
具体帧结构如下所示
IRIG-B帧结构分组表(0-99码元)

码元范围字段名称编码内容说明
0P0(帧头标识)8ms高电平 + 2ms低电平帧起始标志
1-4BCD秒个位秒个位(0-9)权重1、2、4、8
6-8BCD秒十位秒十位(0-5)权重1、2、4(高位补0)
10-13BCD分个位分个位(0-9)权重1、2、4、8
15-17BCD分十位分十位(0-5)权重1、2、4(高位补0)
20-23BCD时个位时个位(0-9)权重1、2、4、8
25-26BCD时十位时十位(0-2)权重1、2(高位补0)
30-33BCD日个位年积日个位(0-9)权重1、2、4、8
35-38BCD日十位年积日十位(0-9)权重1、2、4、8
40-41BCD日百位年积日百位(0-3)权重1、2(高位补0)
50-58BCD年信息年个位/十位(00-99)控制字段扩展
60-78控制/备用字段闰秒标志、校验位、自定义用途用户可编程
80-97二进制天内秒一天以内的秒技术,二进制表示标准二进制

具体结构如下图所示
在这里插入图片描述


关键字段说明

  1. 位置标识符(P类型)

    • P0-P10:共11个位置标识符(码元0,9,19,29,39,49,59,69,79,89,99),用于同步和字段分隔,波形固定为8ms高电平+2ms低电平。
  2. 时间字段

    • 二进制秒(80-97):直接编码0-86399的二进制值(低位在低码元,如Bit0在码元80)。
    • BCD时间:每个时间单位(秒、分、时、日、年)拆分为个位和十位的BCD码,例如:
      • 秒=23 → 个位=3(BCD 0011,码元1-4),十位=2(BCD 0010,码元6-8)。
  3. 年积日(DOY)

    • 由年、月、日计算得出(如2023年10月1日对应DOY=274),编码为3位BCD:
      • 274 → 百位=2(码元30-33),十位=7(码元35-38),个位=4(码元40-41)。
  4. 控制与扩展

    • 码元50~57 年的个位和十位
    • 码元58:关键控制位,通常用于闰秒指示。
    • 码元90-98:用户自定义,可加入CRC校验或扩展信息。

帧结构示意图

[P0] 1-8  [P1] 10-13 14-17 [P2] 20-23 24-27 [P3] ... [P10]
|-二进制秒-|------BCD秒-----|------BCD分-----| ...    |--帧尾--|

3. 控制功能码元(CF)

位于P5~P8之间,共27位,用于扩展功能或自定义协议,例如:

  • 状态标识、设备编号或特殊命令。
  • 码元50~57用做年的个位和十位
  • 无统一标准编码,由设备生产商自定义。

4. 纯二进制秒码(SBS)

从P8开始,占17位,表示从午夜开始的秒数(0~86399),每日重复。

三、编码与信号特性

  • 编码方式
    • 脉宽调制:通过脉宽差异区分“0”和“1”。
    • 载波调制(AC):1kHz正弦波,调制比10:3,正交过零点与码元前沿对齐。
  • 信号传输
    • DC码:抗干扰性强,适合短距离高精度同步。
    • AC码:支持远距离传输,但精度略低。

四、时间编码实现

以2025-12-03 01:03:04为例

1. 时间参数转换

  • 日期计算:2025年12月3日为第337天(非闰年)

    • 非闰年,12月3日对应年积日 337(计算方式:31天(1月)+28天(2月)+31天(3月)+30天(4月)+31天(5月)+30天(6月)+31天(7月)+31天(8月)+30天(9月) +31天 (10月)+30天(11)月 + 3天(12月3日)= 337)。
  • BCD编码表

字段十进制值7位BCD编码码元填充位置
秒(S)040000100十位 码元1-4(0000),个位 6-8(0100)
分(M)030000011十位 码元10-13(0000),个位 15-17(011)
时(H)01000001十位 码元20-23(0000),个位 25-27(01)
天(D)3370101010001百位 码元30-33(0101),35-38(0001),40-41(0001)

2. 帧数据填充规则

  1. 秒信息填充

    • 码元1-4:0000(低位)
    • 码元6-8:100(高位,补零至4位)
  2. 分信息填充

    • 码元10-13:0000(低位)
    • 码元15-17:011(高位,补零至4位)
  3. 时信息填充

    • 码元20-23:0000(低位)
    • 码元25-27:01(高位,补零至4位)
  4. 天信息填充

    • 码元30-33:0101(337的高4位)
    • 码元35-38:0001(337的中4位)
    • 码元40-41:0001(337的低4位,补零)

五、从数字编码到物理信号

1. 波形生成原理

每个码元由10ms周期构成,通过脉宽调制实现数字编码:

码元类型高电平持续时间低电平持续时间典型应用场景
“0”2ms8ms秒/分/时低位编码
“1”5ms5ms天信息高位编码
“P”8ms2ms帧同步与位置标识

使用python生成完成编码和波形生成,python代码如下:

# -*- coding: utf-8 -*-
"""
Created on Mon Apr 28 20:36:41 2025@author: Neol
"""import matplotlib.pyplot as plt  
import numpy as np  # 定义时间参数  
year = 2025  
month = 12  
day = 3  
hour = 1  
minute = 3  
second = 4  # 计算年积日(非闰年)  
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  
day_of_year = sum(days_in_month[:month-1]) + day  # 转换为BCD编码  
def to_bcd(value, bits):  return [int(b) for b in format(value, '0{}b'.format(bits)).zfill(bits)]  second_bcd = to_bcd(second, 7)  # 0-59需要7位  
minute_bcd = to_bcd(minute, 7)  
hour_bcd = to_bcd(hour, 6)     # 0-23需要6位  
day_bcd = to_bcd(day_of_year, 10)  # 1-366需要10位  # 构建帧结构(简化示例,仅包含时间字段)  
frame = [  *second_bcd, 0, *second_bcd[4:],  # 秒信息(码元1-4,6-8)  0,0,0,0,  # 填充位  *minute_bcd, 0, *minute_bcd[4:],  # 分信息(码元10-13,15-17)  0,0,0,0,  # 填充位  *hour_bcd, 0, *hour_bcd[4:],      # 时信息(码元20-23,25-27)  0,0,0,    # 填充位  *day_bcd[:4], 0, *day_bcd[4:8], 0, *day_bcd[8:],  # 天信息(码元30-33,35-38,40-41)  *[0]*27,   # 控制功能码元(CF)  *[0]*17    # 纯二进制秒码(SBS)  
]  # 生成波形(脉宽调制)  
time_points = []  
signal = []  
current_time = 0  for bit in frame:  # 每个码元周期10ms  if bit == 0:  pulse_width = 2  # 2ms高电平  elif bit == 1:  pulse_width = 5  # 5ms高电平  else:  # P码元  pulse_width = 8  # 8ms高电平  # 生成高电平  time_points.extend([current_time + i for i in range(pulse_width)])  signal.extend([1]*pulse_width)  # 生成低电平  time_points.extend([current_time + i for i in range(pulse_width, 10)])  signal.extend([0]*(10 - pulse_width))  current_time += 10  # 绘制前200ms波形(显示前20个码元)  
plt.figure(figsize=(12, 4))  
plt.step(time_points[:200], signal[:200], where='post')  
plt.title('IRIG-B(DC) Waveform Example (First 20 Code Elements)')  
plt.xlabel('Time (ms)')  
plt.ylabel('Amplitude')  
plt.yticks([0, 1], ['Low', 'High'])  
plt.grid(True)  
plt.show()

2. 示例波形分析(前20码元)

在这里插入图片描述

波形解析

  1. 帧同步建立(0-20ms):

    • 码元0(P9):8ms高电平(0-8ms)
    • 码元1(P0):8ms高电平(10-18ms)
    • 第二个P码元前沿(18ms)为时间基准点
  2. 秒信息编码(20-80ms):

    • 码元2-5:0000(2ms脉宽)
    • 码元6:1(5ms脉宽)
    • 码元7-8:00(2ms脉宽)
  3. 保留位填充(80-120ms):

    • 码元9-12:0000(2ms脉宽)
  4. 分信息编码(120-180ms):

    • 码元13-16:0000(2ms脉宽)
    • 码元17:1(5ms脉宽)
    • 码元18-19:11(5ms脉宽)

可综合Verilog模块
代码下载(含Verilog实现与python编码实现)

六、协议特性与工程实践

1. 直流(DC)与交流(AC)调制对比

特性DC码(TTL/RS422)AC码(1kHz载波)
同步精度20-50ns1-20μs
传输距离<10米(无中继)>1公里(需中继)
抗干扰性优(差分传输)良(载波调制)
典型应用发电厂保护装置、精密实验室广域时间网络、军事通信系统

2. 扩展协议实践

  • 年份信息嵌入

    • 通过控制功能码元(CF)扩展:
    • 码元50-57:8位BCD编码(2025年→25年→个位码元50-53,0010,十位码元54-57,0101
  • 北斗融合方案

    • 北斗终端输出TOD(Time Of Data)接口
    • 通过FPGA实现IRIG-B编码转换
    • 同步精度优于50ns(DC码)

七、应用场景与优势

  • 应用场景
    • 电力系统:同步发电厂、变电站设备时钟。
    • 通信网络:基站时间同步。
    • 航空航天:卫星发射、飞行器测控。
    • 工业自动化:生产线设备协同。
  • 优势
    • 高精度:DC码同步精度达纳秒级,AC码达微秒级。
    • 标准化:接口统一,兼容性强。
    • 可靠性:抗干扰设计,适应恶劣环境。

八、总结

IRIG-B协议通过每秒一帧的脉宽编码,实现了高精度时间同步。其帧格式严格定义了时间字段和控制功能,支持直流/交流两种调制方式,兼顾了短距离高精度和远距离传输需求。在电力、军事等关键领域,IRIG-B已成为不可或缺的时间同步标准。

研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)


相关文章:

  • 【重走C++学习之路】22、C++11语法
  • vim粘贴代码格式错乱 排版错乱 缩进错乱 解决方案
  • C++(初阶)(十四)——多态
  • 程序进程多任务线程
  • el-dialog弹窗关闭时调了两次刷新数据的接口
  • Linux文件的一般权限
  • 在Spark集群中搭建Standalone
  • 2025“钉耙编程”中国大学生算法设计春季联赛(8)10031007
  • 嵌入式开发学习日志Day11
  • 【403 Error】Atcoder Beginner Contest 403 题解
  • Redo log,Undo log和binlog
  • 系统思考提升培训效能
  • 培养一个输出型的爱好
  • 【Git】项目多个分支开发、维护与优化处理 ing
  • miniconda在ARM64位芯片上面的安装
  • Windows应用-屏幕截图
  • 解决 shadui组件库Popover 点击后会消失
  • 【蓝桥杯省赛真题58】Scratch画台扇 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解
  • 人工智能与机器学习:Python从零实现K-Means 算法
  • frp内网穿透的基础使用
  • 现场|西岸美术馆与蓬皮杜启动新五年合作,新展今开幕
  • 国家发改委:是否进口美国饲料粮、油料不会影响我国粮食供应
  • 戴昕谈隐私、数据、声誉与法律现实主义
  • 央媒谈多地景区试水“免费开放”:盲目跟风会顾此失彼
  • 我国首次实现地月距离尺度卫星激光测距
  • 政治局会议:积极维护多边主义,反对单边霸凌行径