[实战] 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已成为不可或缺的时间同步标准。
研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)