APP下载

Seal 地震采集系统CRC数据差错控制方法研究

2022-04-02刘建军

石油化工建设 2022年2期
关键词:寄存器校验时钟

刘建军

中海油服物探事业部 天津 300452

SEAL 408XL 地震数据采集系统借鉴陆地408UL采集系统的各种优越性,集最新的电子计算机技术与网络技术于一体,很好地解决了数据采集传输的实时同步特性和及时的数据传输误码控制[1-2]。以下重点介绍CRC差错控制原理和Seal 数据采集传输原理,然后对一些常见的故障进行简单分析。

1 Seal 系统数据采集传输原理

Seal 系统通过高频时钟脉冲和不同的数据帧(Frame)传输协议来实现采集系统的实时同步性,即通过两种不同的频率来实现数据的同步传输:在电缆上(line)使用8.192 MHz 频率传输数据;在CM408XL 系统内部(Transmission)同步传输频率为16.384MHz。在传输过程中,SEAL 系统中央单元在其Left Transverse 和Right Transverse 中以1ms 每次的速度产生数据帧;数据帧在DCXU 中分别通过电缆的高端(High line)和低端(Low line)填充到每个FDU 中,所有的数据以数据帧的形式在FDU/ LAUM 和LAUM/ LAUM 之间进行传输。每个数据帧由64 个单元(Cell)组成:第一个单元为帧头段(Frame Header),后面的63 个单元被分配给LAUM/ LAUM 或LAUM/ FDU 之间通讯使用。在FDU中每个单元分配16 个字节(Bytes)的长度,在中央控制箱体CM408XL 中每个单元分配32 个字节的长度[3]。图1 为数据帧的结构示意图。

图1 数据帧结构示意图

在FDU 中每个数据帧占1M 的容量,在Transverse中每个数据帧占2M 的容量。数据帧单元由单元头段(Cell Header)、单元数据(Cell data)和循环冗余校验码(Cell CRC)三部分组成:单元头段占1 个字节长度;单元数据段在FDU 中占14 个字节长度,在Transverse 中占30 个字节长度;单元循环冗余校验码占1 个字节长度。

FDU/ LAUM 之间通过低层传输协议通讯。FDU 采用寻址方式标记的方法将它的数据写入数据帧头段后面的单元数据段,并在单元头段中将对应的数据位设置为“忙”(Busy)来表示对应的数据单元已被占用。在采集期间,FDU 每1ms 向数据帧的每个单元数据段中写入4 个采样点,寻址方式是连续的第N 个FDU 会将数据写入第N 个单元数据段。LAUM/ LAUM 之间通过高层传输协议进行通讯。LAUM 接到FDU 的采集数据后,进行简单的处理并压缩成数据包,以数据包的形式发送给中央控制单元[4]。

数据的传输和FDU 的采集是同步的,在传输过程中采用了循环冗余校验CRC 的错误检测机制。LAUM 向中央记录单元传输数据的过程与FDU 采集没有时间上的关联性,在此过程中应用高层协议传输来实现传输错误检测和错误恢复。

2 Seal 系统CRC校验原理及方法

循环冗余码(Cyclical Redundancy Check,CRC)是数据通信中应用最广的一种检验差错方法。其由两部分组成:前部分是信息码,就是需要校验的信息;后部分是校验码。在实际应用中,在发送端用数学方法产生一个循环码,叫做循环冗余检验码,在信息码位之后随信息一起发出;在接收端也用同样方法产生一个循环冗余校验码。将这两个校验码进行比较,如果一致就证明所传信息无误;如果不一致就表明传输中有差错,并要求发送端再传输。CRC校验具有实现简单、检错能力强、占用系统资源少、软硬件均能实现等优点,被广泛使用在各种数据校验中[5]。

2.1 循环冗余校验CRC 算法分析

CRC 利用除法及余数的原理实现错误侦测(Error Detecting)。如果CRC 码共长n 个bit,信息码长k 个bit,就称为(n,k)码。它的编码规则是:首先将原信息码(kbit)左移r 位(k+r=n);其次运用一个生成多项式g(x)(也可看成二进制数)用模2 除上面的式子,得到的余数就是校验码。

需要说明的是,模2 除就是在除的过程中用模2 加,模2 加实际上就是我们熟悉的异或运算,即加法不考虑进位,公式可以表达为0+0=1+1=0,1+0=0+1=1,即‘异’则真,‘非异’则假,也就是‘模2 减’和‘模2 加’直值表完全相同。有了加减法就可以用来定义模2 除法,于是可以用生成多项式g(x),进而生成CRC 校验码。

例如,对于g(x)=x4+x3+x2+1 的解释:(都是从右往左数)x4 就是第五位是1,因为没有x1 所以第2 位就是0。11101|110,0000(设a=11101,b=1100000),取b 的前5位11000 跟a 异或得到101,101 加上b 没有取到的00 得到10100,然后跟a 异或得到01001,也就是余数1001,所以CRC 码是110,1001。

根据应用环境与习惯的不同,CRC 又可分为以下几种 标 准:CRC- 12 码;CRC- 16 码;CRC- CCITT 码;CRC- 32 码。其中CRC- 12 码通常用来传送6- bit 字符串。CRC- 16 及CRC- CCITT 码则用是来传送8- bit 字符。CRC- 16 为美国采用,而CRC- CCITT 为欧洲国家所采用。 CRC- 32 码大都被采用在一种称为Point- to- Point 的同步传输中。

2.2 CRC实现办法

2.2.1 软件实现方法

以最常用的CRC- 16 为例来说明其生成过程。CRC- 16 码由两个字节构成,在开始时CRC 寄存器的每一位都预置为1,然后把CRC 寄存器与8- bit 的数据进行异或;之后对CRC 寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC 寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,如果LSB 为零,则无需进行异或。重复上述由高至低的移位8 次,第一个8- bit 数据处理完毕,用此时CRC 寄存器的值与下一个8- bit 数据异或并进行如前一个数据似的8 次移位。所有的字符处理完成后,CRC 寄存器内的值即为最终的CRC 值。

CRC 的计算过程:

(1)设置CRC 寄存器,并给其赋值FFFF(hex);

(2)将数据的第一个8- bit 字符与16 位CRC 寄存器的低8 位进行异或,并把结果存入CRC 寄存器;

(3)CRC 寄存器向右移一位,MSB 补零,移出并检查LSB;

(4)如果LSB 为0,重复第三步;若LSB 为1,CRC寄存器与多项式码相异或;

(5)重复第3 与第4 步直到8 次移位全部完成,此时一个8- bit 数据处理完毕;

(6) 重复第2 至第5 步直到所有数据全部处理完成;

(7) 最终CRC 寄存器的内容即为CRC 值。

常用的CRC 循环冗余校验标准多项式见式(1)—式(3)。

以CRC(16 位)多项式为例,其对应校验二进制位为1 1000 0000 0000 0101。其中上述列出的标准校验多项式都含有(X+1)的多项式因子;各多项式的系数均为二进制数,所涉及的四则运算仍遵循对二取模的运算规则。

2.2.2 硬件实现

最普通的CRC 硬件实现方法是串行计算方法,即使用一位数据输入,n 位长度的原始数据连续计算n 次后得出校验码。串行计算的电路结构简单,容易实现,可以工作在较高的时钟频率下。随着通信速度的不断提高,高的数据传输带宽要求CRC 的计算速度越来越快,串行计算的方法已经不适应要求,并行计算方法越来越受到人们的重视。

(1)串行实现。每次输入一位数据,输入数据和上一次异或运算的结果组成新数据,循环进行异或运算,直到所有数据都已经输入,整个电路可以用移位寄存器加异或门实现。CRC 串行实现的电路结构如图2 所示。

图2 串行实现电路结构图

gi 的取值范围是0 或1。取0 时,表示断路,不需要异或运算;取1 时,表示通路,需要异或运算,其中g0和gk都为1。对于k 位的CRC 校验,需要k 个寄存器。当有新的数据输入后,异或运算立刻得出新的CRC,寄存器在时钟沿移位,等待新的输入数据,反复循环,就可以计算出CRC 的值。串行的方法虽然可以计算各种CRC,但是一个时钟周期只能计算一位数据,效率比较低,只适用于低速的串行输入输出系统。而当数据传输的速度很高,或者是多位数据并行传输时,需要引入并行计算的实现方法。并行的实现方法可以在一个时钟内对多位数据进行编码,从而提高了CRC 的计算速度。

(2)并行实现。并行CRC 计算可以在串行计算的基础上改进电路结构来实现。在串行实现中,一个时钟周期处理一位数据。而并行实现是把串行实现中多个时钟周期处理的数据集中到一个时钟周期内处理,即使用多级组合逻辑电路来实现,如图3 所示。

图3 优化前的组合反馈电路结构

并行计算的缺点是使用了多级组合逻辑的反馈,将产生较大的门延迟,特别是在计算时钟的频率很高时,时钟周期非常小,对时延的要求比较高。比如实现32 位并行输入的CRC- 32,会产生31 次异或操作,电路的门延时可能会很大,而超出系统的时延限度,这取决于组合电路的具体结构。

图3 所示的组合逻辑的延时是各个异或门的累加,异或次数多了以后,延时很大,所以可以对上面的组合逻辑结果Z=A^B^C^D^E^F 进行优化。将逻辑组合改成Z=(A^B)^(C^D)^(E^F),电路的功能不变,综合出的电路结构如图4 所示。优化后的结构利用了电路的并行性,将在串行电路中累加的延时分散到多个并行的分支上,将门延时从5 级降低到3 级,优化后的结构延时以指数级减少。

图4 优化后的组合反馈电路结构

CRC 的硬件实现可以有串行、并行两种方式。其中并行实现方式适用于各种数据宽度CRC 校验,并行输入的数据宽度越宽,速度越快。由于并行计算是通过多级反馈来实现的,所以复杂的反馈组合电路会带来较大的门延迟。通过优化组合电路的结构,可以很大程度上降低延迟,使电路适用于比较高的时钟频率。

循环冗余校验码CRC 算法可以用软件实现,也可以用硬件实现。但软件计算的速度受限于系统CPU 的速度,而使用硬件方式来实现可以提高计算速度,从而提升系统的通信效率。

2.3 Seal 系统中CRC 差错控制方法

差错控制最常用的方法是自动请求重发方式(ARQ)、向前纠错方式(FEC)和混合纠错(HEC)。在传输过程误码率比较低时,用FEC 方式比较理想。在传输过程误码率较高时,采用FEC 容易出现“乱纠”现象。HEC方式则是ARQ 和FEC 的结合。在许多数字通信中,广泛采用ARQ 方式,此时的差错控制只需要检错功能。实现检错功能的差错控制方法很多,传统的有奇偶校验、校验和检测、重复码校验、恒比码校验和行列冗余码校验等。这些方法都是增加数据的冗余量,将校验码和数据一起发送到接受端。接受端对接受到的数据进行相同校验,再将得到的校验码和接受到的校验码比较,如果二者一致则认为传输正确。但这些方法都有各自的缺点,误判的概率比较高。CRC 是由分组线性码的分支而来,其主要应用是二元码组,编码简单且误判概率很低,在通信系统中得到了广泛的应用。

3 Seal 系统CRC报错原因及解决方法

Seal 系统中常见的CRC 错误主要有两种,即数字包LAUM CRC 错误和中央控制箱体CM408XL CRC 错误。

3.1 数字包LAUM CRC 错误

如:Warning! CRC on LAUM # 2486。在报错不多的情况下,电缆可以正常的采集作业,但是对数据的采集质量可能会有影响。因为LAUM CRC 报错的情况下,在Seal 系统中是采用的向前纠错方式,所以这样一来该包的数据可能就由一个近视值来替代。出现这种情况时,可以在Streamer 窗口下右键单击后在弹出的对话框中将报错次数清零。

如果报错的次数过多,可能会导致电缆的掉电。这时如果在测线上,可以重新加电来试,如果能加过去可以提高作业效率。如果加不过去,或者是掉电频繁发生,可以试着更换报错的数字包的前一个或者后一个数字包来解决问题。

3.2 中央控制箱体CM408XL CRC错误报警

例如:Waring! CRC on LCI # 3。这种情况可能是LCI 板接触不良,首先可以通过对换DCXU 和LCI 板的连接线来检查是否为408XL 箱体以外部分的问题。如果408XL 箱体接口以外部分没有问题,可以通过对调两块LCI 板来检查报错的LCI 板是否真的有问题,若有问题换掉LCI 板即可。

4 结语

对Seal 系统数据传输原理的深入分析,有助于更好地理解网络化数据传输对地震采集系统的影响,对故障的排除,以及地震仪器的开发和应用有很大的现实意义。

猜你喜欢

寄存器校验时钟
使用Excel朗读功能校验工作表中的数据
别样的“时钟”
古代的时钟
Lite寄存器模型的设计与实现
二进制翻译中动静结合的寄存器分配优化方法
移位寄存器及算术运算应用
智能电能表的现场快速校验方法探讨
电子式互感器校验方式研究
有趣的时钟
时钟会开“花”