Menu Close

高速通信中的信道编码–加扰与解扰

在上节内容中讲解了串行通信中的帧结构,如每个帧的开始部分都会有前导字和帧起始(即Preamble+SFD)作为帧的标志,在帧同步时作为同步字搜索,接收端可以在搜索到关键字后进行帧同步。这个前导字不仅能提供短暂的直流平衡,还能提供足够的时钟信息,在位同步的解调中起到关键的作用。在自适应位同步的提取中(ACDR),有一个前提是在帧数据部分也应该有足够的边沿变化,而在源码的数据流中长0或长1的概率是非常高的,因此就要将通信中的源码进行变换,通常称为编码。这种用于改善信道的编码称为信道编码。信道编码通常有如下几种,加扰,4b/5b编码,8b/10b编码,64b/66b编码,128b/130b, 128b/132b等,其它几种编码已经在其它章节介绍过了,本节内容着重讲解加扰(Scrambler)编码以及其反变换–解扰(de-scrambler)等原理及使用。

1.  加扰

加扰的原理是在数据串行化时将串行数据流送入加扰器,通过加扰器的模2运算(异或运算)使得长0与长1消除。关于加扰的原理的相关知识,可以参考相关内容。加扰又分为两种,加性加扰和乘性加扰两种。加性加扰如图1所示,

图1 加性加扰器

  • 加性加扰

加性加扰的特点是加扰器产生的模2运算的结果与输入数据再做模2运算,结果作为串行数据输出。加性加扰器有如下内容及特点:

(1)典型生成多项式 ,

G(X) = X15 + X14 + 1

G(X) = X23 + X18 + 1

(2) 运算前需要同步,即在一帧数据发送前应初始化加扰器如图1,在帧数据加扰前应将加扰器的寄存器初始化为1001_0101_0000_000, 例如

                  reg [14:0] sramb_sync = 15’b000_0000_1010_1001;

(3)输入数据不参与加扰器的寄存器移位,仅加扰器自身的模2加结果参与循环移位

(4)解扰器的生成多项式即运算过程与加扰器一致如图1,解扰器也需要帧初始化同步。同步控制一般采用帧起始(如preamble+SFD)或64b/66b的中66-bit的控制位(如01或10, 详细内容请参照64b/66b的内容).

 

例1, 利用生成多项式G(X) = X15 + X14 + 1 实现加性加扰与解码Verilog代码,并通过Modelsim进行验证。

发送端代码:


 

接收端代码:


 

发送接收组装代码:


 

仿真代码:


 

 

图1    tb仿真波形

图1  可以看出在加扰后接系统能正确解扰收发端的加扰数据,详细的加扰效果可以参考图2。

 

图2

图2 中显示了发送程序的加扰效果,红色框中在tx_data在一段时间都为0,但tx_out信号经过加扰后,出现0,1交替输出。

 

图3

图3中可以观察到在接收端rx_in, scb_bit, rx_bit之间的运算,以及scrambler 的移位过程。

上面的例子主要目的是演示了加扰后对发送串行流带来的效果,如图2, 同时对于加性加扰如何根据帧同步控制加扰器进行复位初始化,以及在发送和接收中实现加扰/解扰器的移位。在实际的异步通信中可以用Preamble+SFD实现帧同步,或采用64b/66b的2位控制字实现同步。

  • 乘性加扰

与加性加扰不同的是乘性加扰不仅加扰器自身模2加后循环移位,而且输入数据流也参与模2运算后参与加扰计算,从这一点看数据流的输出与输入之间(历史数据)有相与的关系存在,因此称为乘性加扰。生成多项式为G(X) = X23 + X18 + 1的加扰器如图4所示。

乘性加扰是递归的。即加扰后的信号反馈到移位回路中。

图4

  • 乘性解扰

与加性解扰不同,乘性解扰不需要同步和初始化,但乘性解扰不能使用加扰器进行解扰,这一点与加性加扰器有重大区别,从上的加性加扰和解扰可以看出,加性加扰与解扰使用同一套加扰器。而乘性解扰则是独立的逻辑电路,如图5所示。

图5

解扰器的特点是非递归的,即解扰后的信号不反馈到回路中去。

2 .乘性加扰与加性加扰相比有如下异同点:

    • 加性加扰需要特定初始化值,乘性加扰不需要特定初始化值(可以为随机数)。
    • 加性加扰需要同步复位,乘性加扰不需要同步复位
    • 加性加扰器也加性解扰器,乘性加扰与解扰分别为不同时序逻辑电路,但生成多项式相同。
    • 加性加扰循环移位寄存器不受输入信号的影响是移位寄存器模2运算移位的结果,乘性加扰器的输入参与模2运算并前馈到移位序列中,历史输入数据参与加扰运算。
    • 乘性加扰由于不需要同步复位,因此在加扰和解扰时的逻辑设计相对简单。

3. 乘性加扰与解扰编程与测试

(1) 发送端乘性加扰物理层(phy)的代码mul_scrambler_phy.v


 

(2)接收端端乘性加扰物理层(phy)的代码mul_scrambler_phy.v


 

(3)发送端数据帧及串行化mul_scrambler.v


 

 

(4)接收端串并转换及数据帧mul_descrambler.v


 

(5)收发合并comp_mul_scrabler.v


 

(6)仿真程序tb.v


 

 

(7) 仿真波形

图6  tb.v的仿真波形

图7  mul_scrambler.v  仿真波形

图8  mul_descrambler.v的仿真波形

乘性加扰及解扰工程代码下载:

[content_control]

additive_scrambler.ZIP

[/content_control]

注:加性加扰,将上文中的第一个tb.v替代工程中的tb.v文件即可测试加性加扰/解扰的Verilog RTL 代码。更详细的解释请看对应的视频文件。

Posted in FPGA, FPGA 教材教案, IP开发, 教材与教案, 文章, 集成电路