[实战] 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码元)
| 码元范围 | 字段名称 | 编码内容 | 说明 | 
|---|---|---|---|
| 0 | P0(帧头标识) | 8ms高电平 + 2ms低电平 | 帧起始标志 | 
| 1-4 | BCD秒个位 | 秒个位(0-9) | 权重1、2、4、8 | 
| 6-8 | BCD秒十位 | 秒十位(0-5) | 权重1、2、4(高位补0) | 
| 10-13 | BCD分个位 | 分个位(0-9) | 权重1、2、4、8 | 
| 15-17 | BCD分十位 | 分十位(0-5) | 权重1、2、4(高位补0) | 
| 20-23 | BCD时个位 | 时个位(0-9) | 权重1、2、4、8 | 
| 25-26 | BCD时十位 | 时十位(0-2) | 权重1、2(高位补0) | 
| 30-33 | BCD日个位 | 年积日个位(0-9) | 权重1、2、4、8 | 
| 35-38 | BCD日十位 | 年积日十位(0-9) | 权重1、2、4、8 | 
| 40-41 | BCD日百位 | 年积日百位(0-3) | 权重1、2(高位补0) | 
| 50-58 | BCD年信息 | 年个位/十位(00-99) | 控制字段扩展 | 
| 60-78 | 控制/备用字段 | 闰秒标志、校验位、自定义用途 | 用户可编程 | 
| 80-97 | 二进制天内秒 | 一天以内的秒技术,二进制表示 | 标准二进制 | 
具体结构如下图所示
 
关键字段说明
-  位置标识符(P类型): - P0-P10:共11个位置标识符(码元0,9,19,29,39,49,59,69,79,89,99),用于同步和字段分隔,波形固定为8ms高电平+2ms低电平。
 
-  时间字段: - 二进制秒(80-97):直接编码0-86399的二进制值(低位在低码元,如Bit0在码元80)。
- BCD时间:每个时间单位(秒、分、时、日、年)拆分为个位和十位的BCD码,例如: - 秒=23 → 个位=3(BCD 0011,码元1-4),十位=2(BCD0010,码元6-8)。
 
- 秒=23 → 个位=3(BCD 
 
-  年积日(DOY): - 由年、月、日计算得出(如2023年10月1日对应DOY=274),编码为3位BCD: - 274 → 百位=2(码元30-33),十位=7(码元35-38),个位=4(码元40-41)。
 
 
- 由年、月、日计算得出(如2023年10月1日对应DOY=274),编码为3位BCD: 
-  控制与扩展: - 码元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)。
 
- 非闰年,12月3日对应年积日 
-  BCD编码表: 
| 字段 | 十进制值 | 7位BCD编码 | 码元填充位置 | 
|---|---|---|---|
| 秒(S) | 04 | 0000100 | 十位 码元1-4(0000),个位 6-8(0100) | 
| 分(M) | 03 | 0000011 | 十位 码元10-13(0000),个位 15-17(011) | 
| 时(H) | 01 | 000001 | 十位 码元20-23(0000),个位 25-27(01) | 
| 天(D) | 337 | 0101010001 | 百位 码元30-33(0101),35-38(0001),40-41(0001) | 
2. 帧数据填充规则
-  秒信息填充: - 码元1-4:0000(低位)
- 码元6-8:100(高位,补零至4位)
 
-  分信息填充: - 码元10-13:0000(低位)
- 码元15-17:011(高位,补零至4位)
 
-  时信息填充: - 码元20-23:0000(低位)
- 码元25-27:01(高位,补零至4位)
 
-  天信息填充: - 码元30-33:0101(337的高4位)
- 码元35-38:0001(337的中4位)
- 码元40-41:0001(337的低4位,补零)
 
五、从数字编码到物理信号
1. 波形生成原理
每个码元由10ms周期构成,通过脉宽调制实现数字编码:
| 码元类型 | 高电平持续时间 | 低电平持续时间 | 典型应用场景 | 
|---|---|---|---|
| “0” | 2ms | 8ms | 秒/分/时低位编码 | 
| “1” | 5ms | 5ms | 天信息高位编码 | 
| “P” | 8ms | 2ms | 帧同步与位置标识 | 
使用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码元)

波形解析:
-  帧同步建立(0-20ms): - 码元0(P9):8ms高电平(0-8ms)
- 码元1(P0):8ms高电平(10-18ms)
- 第二个P码元前沿(18ms)为时间基准点
 
-  秒信息编码(20-80ms): - 码元2-5:0000(2ms脉宽)
- 码元6:1(5ms脉宽)
- 码元7-8:00(2ms脉宽)
 
-  保留位填充(80-120ms): - 码元9-12:0000(2ms脉宽)
 
-  分信息编码(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-50ns | 1-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已成为不可或缺的时间同步标准。
研究学习不易,点赞易。
 工作生活不易,收藏易,点收藏不迷茫 :)
