PRBS简介

声明:文中关于PRBS的介绍参考以下内容
[1].Using Pseudo-Random Binary Sequences to Stress Test Serial Digital Interfaces.
[2].UG476——7 Series FPGAs GTX/GTH Transceivers.
[3].ITU-T Recommendation O.150.

一、PRBS的定义

  PRBS (Pseudo-Random Binary Sequences)伪随机二进制序列是一串数字 1 和 0 的组合,在其序列长度内具有统计学上的随机性。这种序列的相邻比特之间没有相关性,因此可以被视为测试串行数字接口的“最坏情况”压力测试信号。如果接口能够在不产生比特错误的情况下处理这种“嘈杂”的随机比特序列,那么我们就可以确信它能够处理好“干净”的非随机序列。

  虽然 PRBS 序列表现出随机行为,但它实际上是确定性生成的,重复时比特序列总是相同的。例如,PRBS7 序列的字长为 7 位,生成的序列长度为 2^7 - 1(即 127)位,该序列由Pattern发生器无限重复。一般来说,任何 PRBSk 序列的字长都为 k 位,序列长度为 2^k - 1 位。正是这种确定性生成与随机比特模式的结合,使得这些序列成为测试接口的理想选择。由于误码率分析仪知道生成了哪些 PRBS 比特,因此对接口输出比特流进行误码计数就相对简单了。

二、PRBS的选择

  PRBS测试码的选择依据参考文件的推荐,在《Using Pseudo-Random Binary Sequences to Stress Test Serial Digital Interfaces》文档中推荐的PRBS测试码型如下表1所示。

表1 PRBS测试码型选择1

图片

  从表1中可以看出,PRBS9是SFP+的推荐测试码型之一;PRBS15通常用于抖动测试;PRBS23通常用于SDH/SONET的测试,以及SDI芯片制造商用于接口测试;PRBS31是10G以太网的推荐测试码型之一。

  在《UG476——7 Series FPGAs GTX/GTH Transceivers》文档中推荐的PRBS测试码型如下表2所示。

表2 PRBS测试码型选择2

图片

  从表2中可以看出,PRBS7是通常用于8B/10B编码测试;PRBS23用于非 8B/10B 编码测试。

  综合表1和表2的内容来看,PRBS测试码型的选择依据接口的类型和实际的应用场景,具体的码型选择需要参考上述文档和工程应用中的实际需求。

三、PRBS的产生

  以PRBS7为例简单介绍PRBS产生的原理,生成PRBS7测试码型相关的信息如下图1所示:

图片

图1 PRBS7测试码型相关信息

  图1中展示了PRBS7的生成多项式为:

图片

  在生成PRBS7的线性反馈移位寄存器中,对第6位和第7位进行异或操作,并将其输出的结果反馈到第1位,第7位的输出构成PRBS7的输出序列。

  使用Verilog实现一个PRBS7的生成器,代码如下:

module prbs7_gen(
    input       clk         ,
    input       rst_n       ,
    output      prbs7_bit_o    
    );
parameter  INITAIL_VALUE = 7'b0000001;//初始值定义
//表达式:x^7+x^6+1
//初始值:7'b0000001
//寄存器定义:R1-R2-R3-R4-R5-R6-R7,其中最低位为R1,最高位为R7
//输出寄存器:R7
//反馈值:feedback_bit = R7 ⊕ R6
//移位操作: 
// R1_new = feedback_bit, 
// R2_new = R1_old, 
// R3_new = R2_old,
// R4_new = R3_old,
// R5_new = R4_old,
// R6_new = R5_old,
// R7_new = R6_old,
reg [6:0] prbs7_r;
wire      feedback_bit;
always @(posedge clk) begin
    if(!rst_n) begin
        prbs7_r     <= INITAIL_VALUE;
    end
    else begin
        prbs7_r     <= {prbs7_r[5:0],feedback_bit};//PRBS7 实现低位向高位移位
    end
end
assign feedback_bit = prbs7_r[6] ^ prbs7_r[5] ;//对第7位和第6位进行异或操作
assign prbs7_bit_o  = prbs7_r[6];              //以第7位作为实际PRBS7 bit的输出
endmodule

  在该代码中设定的初始值为7’b000_0001,在该代码中prbs7_bit_o的值即为PRBS7序列值。对以上代码在Vivado软件中进行综合,综合的RTL视图如下图2所示:

图片

图2 PRBS7 RTL视图

  可以看到综合出来的结果中包含了1个FDSE和6个FDRE,构成7个寄存器,LUT2进行第6位和第7位输出的异或运算,第7位作为输出,从而综合出来的结果与图1中的生成原理相同。

  对上述代码在Vivado中进行仿真,仿真结果如下图3所示:

图片

图3 PRBS7 仿真结果

  从仿真结果输出可以看到,前16个序列输出分别是0000_0010_0000_1100(前6个输出值为0000_00),前6个连续输出0之后,第7个输出值为1,刚好反映了PRBS7最多连续输出6个0,在输出127位数值之后,开始重复第1个数据,以上输出信息与图1相对应,在证明了代码正确性的同时验证了PRBS7序列的相关性质。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值