CMI码解析:它真的是我国PCM数字设备间的标准传输接口码型吗?
1. 背景:接口码型“张冠李戴”的日常
做 PCM 接口开发时,最怕的不是调不通,而是“调通了却用错了码型”。
现场常见对话:
甲方:板卡输出口是 PCM 码流,你们直接接光模块就行。
乙方:收到,我们按 CMI 码布线。
三个月后:系统误码率 10⁻³,互相甩锅。
CMI(Coded Mark Inversion)因为名字里带“码”,常被默认成“中国 PCM 接口码”。
实际上,国内运营商级 PCM 一次群(2 Mbit/s)只认 HDB3,CMI 被标准安排在四次群(139 Mbit/s)及以上,用于 ** coax / 光线路侧**,并非设备间通用背板码。
把 CMI 当“万能接口”塞到 2 M 口,结果时钟恢复困难、直流漂移、误码飙升,就成了日常踩坑三连。
2. 核心指标对比:一张表看清仨码型
| 指标 | CMI | HDB3 | AMI |
|---|---|---|---|
| 编码效率 | 50%(1→2 bit) | 100% | 100% |
| 最大连零 | 3 | 3 | ∞ |
| 时钟恢复 | 优(定时跳变丰富) | 优 | 差(长零失步) |
| 直流分量 | 零(平衡) | 近零 | 零 |
| 检错能力 | 无 | 极性违例可检 | 极性违例可检 |
| 典型速率 | 139 Mbit/s± | 2 Mbit/s | 2 Mbit/s |
| 标准定位 | 线路侧四次群 | 设备口一次群 | 设备口一次群 |
结论:CMI 的“主场”在高速线路,不是 2 M 背板。
3. 标准溯源:GB/T 7611-2016 原文截图级摘要
GB/T 7611-2016《数字网系列比特率接口》写道:
139 264 kbit/s 接口电气特性应符合CMI编码;
2 048 kbit/s 接口电气特性应符合HDB3编码。
一句话:CMI 只活在139 M 口,2 M 口请自觉 HDB3。
其他行标 YD/T 1011、YD/T 1071 对 SDH 光口也重复了这条底线。
4. 实测:FPGA 实现 CMI 编解码 + 示波器波形
4.1 编码规则(复习)
- “0” → 01
- “1” → 交替 00 / 11
4.2 Verilog 关键片段(125 MHz 系统时钟,线速 139 Mbit/s)
// cmi_encoder.v module cmi_encoder( input clk_125m, // 125 MHz 系统时钟 input dat_in, // 串行 NRZ 输入 input dat_val, // 输入有效 output reg cmi_p, // 正端输出 output reg cmi_n, // 负端输出 output reg cmi_val ); reg [1:0] shf = 2'b01; reg last_1 = 0; always @(posedge clk_125m) begin if (dat_val) begin if (!dat_in) begin // 0 -> 01 {cmi_p,cmi_n} <= 2'b01; cmi_val <= 1'b1; end else begin // 1 -> 00/11 交替 last_1 <= ~last_1; {cmi_p,cmi_n} <= last_1 ? 2'b11 : 2'b00; cmi_val <= 1'b1; end end else cmi_val <== 1'b0; end endmodule4.3 时钟恢复(数字 PLL 简化版)
// simple_cdr.v module simple_cdr( input clk_125m, input cmi_p, input cmi_n, output reg recovered_clk ); reg [7:0] edge_cnt = 0; wire edge = cmi_p ^ cmi_n; // 检测跳变 always @(posedge clk_125m) begin if (edge) edge_cnt <= 0; else edge_cnt <= edge_cnt + 1; // 每 8 个 125M 周期近似 15.6 MHz,与 139 M/8 对齐 recovered_clk <= (edge_cnt == 8'd4); end endmodule4.4 示波器抓拍
- 通道 1:CMI-P,通道 2:CMI-N
- 每bit 双跳变,眼图交叉点干净,时钟恢复裕度 > 0.4 UI
- 139 M 速率下,RJ45 同轴 20 m 无误码;换成 2 M 速率,因跳变密度过高反而 EMI 超标——再次验证“场合不对,努力白费”。
5. 避坑指南:三个典型误用与解药
误把 CMI 当 2 M 背板码
- 现象:接收端失步、BER 10⁻⁴
- 解决:2 M 口请换 HDB3,硬件动不了就 FPGA 做桥接。
长距离铜缆仍用 CMI
- 现象:139 M 速率 100 m 误码山型上升
- 解决:>50 m 直接改光模块,CMI 只保短距同轴。
光模块侧 SFP 把 CMI 当 NRZ 透传
- 现象:光功率正常但误码率飘
- 解决:确认 SFP 是“透明”还是“带码型判决”,后者需关闭线路编码功能,否则双编乱码。
6. 延伸:5G 前传 25G/100G 时代,码型再洗牌
eCPRI 7.0 把 25 Gb/s 前传切成 n×25G 通道,线路侧码型候选:
- NRZ + KP4-FEC
- PAM4 + LDPC
- 低复杂度 CMI-Variant(研究性)
传统 CMI 50% 效率在 25 G 时代直接让带宽翻倍,显然不划算;但“零直流 + 跳变丰富”的思想被重新包装进 PAM4 的Tomlinson-Harashima 预编码。
作为硬件工程师,与其死记码型,不如盯紧“时钟恢复”、“DC 平衡”、“FEC 亲和度”三指标,再在手头 FPGA 上快速 A/B 测试——工具链已成熟,验证一周比拍脑袋一年更省钱。
7. 资源下载
- GB/T 7611-2016 电子版(需登录):
https://openstd.samr.gov.cn 搜索 7611-2016 - 本文 FPGA 工程(MIT 协议):
https://github.com/yourname/cmi_verilog - 示波器眼图模板文件:
同仓库/doc/tek_cmi_139m.set
把 CMI 放回 139 M 的“坑位”,让 HDB3 守好 2 M 的大门,接口选型就不会再背“误码黑锅”。祝各位调试顺利,眼图常开!