tag 标签: prbs

相关博文
  • 热度 6
    2017-9-29 17:11
    1204 次阅读|
    0 个评论
    之前一直在讲高速串行的协议,MAC,PHY,PMD层,PMA层吗,PCS层。。。看大家回答的数量也不是很多,弱弱的问一句大家都消化了吗?的确,讲到各个层的功能,数据在芯片内部如何去运作协调这方面的确有点高深。其实坦白说哈,作为同组的一员,我也对上面的文章和刘工深感佩服(点赞点赞)。既然上层的东西不那么好理解的话,我们还是说回点接地气的吧。我们知道,无论上层如何运作,最终还是要去到物理层上面去,最终我们的数据就在上面传输,而传输的方式就是各种不同速率的码型。从本期开始,我们将介绍下关于码型的一些东西。  PRBS:Pseudo-Random Binary Sequence,中文翻译叫做伪随机二进制序列,江湖人简称它为伪随机码。做过测试的朋友们都应该特别熟悉,就是使用PRBS这种伪随机码进行高速串行通道的测试,主要是测试误码率的情况,例如我们常用的一些协议,PCIE,USB,以太网或者下图的光模块的测试等等…… 当然我们信号高速串行信号仿真的时候,也会有各种prbs码型进行,一个10G-SFP+光模块PCB通道的仿真模型如下: 为什么业界公认选择这种prbs码型进行测试(仿真)呢?主要原因是这种码型与真实链路的数据传输情况非常接近。因为在真实情况中,所以的数据组合都是随机出现的,没有任何规律可言。 而PRBS 的码流在很大程度上具有这种“随机数据”的特性,“0”和“1”随机出现,这种码流的频谱特征和白噪声非常接近,所谓“白噪声”就是在一个比较宽的频域里功率密度谱均匀分布,也就是所有的频率都具有相同的能量,因此该码型能够模拟各种不同频率数据组成的情况,使测试更符合真实的情况。 那prbs这种随机码真的就是没有任何规律的吗??当然不是,不然的话为什么还要分prbs1-31那么多种呢。之所以要叫伪随机码,其实就是码流在周期内部是随机的,但是在各个周期里面又是完全相同的。咋一看,好像说了等于没有,大家可能有疑问,在周期内部是随机的,那不还是随机嘛?其实这个随机是要打个问号的,正确来说是“有顺序的随机”。所谓顺序就是通过不同阶数的prbs码来体现,例如,我们常用的有阶数7、9、11、15、20、23、31,也就是我们常说的PRBS7、PRBS9、PRBS11、PRBS15、PRBS20、PRBS23、PRBS31。 前面说了,不同的阶数会有不同的码型,那它们之间有什么规律呢?不同阶数是怎样生成码型的呢?我们以PRBS3进行说明。 PRBS码型是由PRBS码型发生器产生的,下面是一个简单发生器的示意图:   架构很简单,就由两部分组成:移位寄存器和异或运算器。首先移位寄存器,顾名思义作用就是移位,1个bit发送后,把下一个bit推向前准备发送;异或运算,简单点说就是两个不一样就是“1”,两个一样就是“0”,因此有“1”和“1”是0,“0”和“0”是0,“1”和“0”是1。那像上面这个PRBS3发生器,进行异或的位是第二位和第三位,因此用一个多项式命名它,叫做1+X2+X3。 这样我们可以开始进行计算了。首先我们有一个初始状态“111”。我们就有了下面这么一个计算过程(画得不好,大家看内容就好)。简单说明一下,红色为异或运算过程,蓝色为每次移位后的bit,绿色为输出的数据bit,紫色说明绕一圈之后又回到了原先,循环了一次。   经过本文之后,大家是不是对感觉很高深神秘的prbs码型有了更接地气的认识和理解了呢?当然,本文举例的prbs3是比较简单的,感觉它没经过几位就可以循环一次了,大家推导起来也比较方便。 ​ ​
  • 热度 6
    2017-6-12 08:41
    4148 次阅读|
    0 个评论
    在进行数字接口的测试时,有时会用到一些特定的测试码型。比如我们我们在进行信号质量测试时,如果被测件发送的只是一些规律跳变的码型,可能代表不了真实通信时的最恶劣情况,所以测试时我们会希望被测件发出的数据尽可能地随机以代表最恶劣的情况。同时因为这种数据流很多时候只是为了测试使用的,用户的被测件在正常工作时还是要根据特定的协议发送真实的数据流,因此产生这种随机数据码流的电路最好尽可能简单,不要因此额外占用太多的硬件资源。 伪随机码的生成 那么怎么用简单的方法产生尽可能随机一些的数据流输出呢?首先,因为真正随机的码流是很难用简单的电路实现的,所以我们只需要生成尽可能随机的码流就可以了,其中最常用的一种数据码流就是PRBS(Pseudo Random Binary Sequence,伪随机码)码流。 PRBS码的产生非常简单,下图 是个的PRBS7的产生原理,只需要用到7个移位寄存器和简单的异或门就可以实现。 所谓PRBS7,是指码流的重复周期为(2^7-1)个比特,即这个电路产生的0、1的码流序列是每127个比特为周期重复一次。下面是上述电路产生的PRBS7的数据码流:1111111000000100000110000101000111100100010110011101010011111010000111000100100110110101101111011000110100101110111001100101010 如果我们把移位寄存器的数量增加到9个,就可以产生PRBS9的码流,即以511个bit为周期重复发送的数据码流。下面是PRBS9码流里511个bit周期的内容: 1111111110000011110111110001011100110010000010010100111011010001111001111100110110001010100100011100011011010101110001001100010001000000001000010001100001001110010101011000011011110100110111001000101000010101101001111110110010010010110111111001001101010011001100000001100011001010001101001011111110100010110001110101100101100111100011111011101000001101011011011101100000101101011111010101010000001010010101111001011101110000001110011101001001111010111010100010010000110011100001011110110110011010000111011110000 从以上的数据流中我们可以看到,在每个大的重复周期内的0、1数据流看起来是随机的,满足了我们对于数据随机性的要求。但是同时其数据流中有大的重复周期,比如PRBS7的码流的重复周期是127个比特,PRBS9的码流的重复周期是511个比特,并不是真正的随机码流,所以这种码流被称为伪随机码。 从上面的描述可以看出,即使要产生PRBS31的非常长大的数据码流,也只需要用到31个移位寄存器和简单的异或电路,不需要占用太多的硬件资源。除此以外,伪随机码在实际的应用中还有一系列非常优异的特性。主要特点如下。 伪随机码频域特征 对于一个理想的PRBS码流(假设信号的上升沿无限陡的情况),如果我们用频谱仪观察一下其频谱,会发现其频谱的包络是个Sin(x)/X的Sinc函数,功率接近为0的点都发生在频率为数据速率整数倍的频点。而各条谱线间的间隔=(数据速率/PRBS码型长度)。 比如对于10Gbps的PRBS15的码流来说,其频谱在10GHz、20GHz、30GHz…等频点会出现功率接近为0的情况,而各条谱线的间隔=(10G/32767)≈305KHz;如果数据速率不变,把码型的长度增加到PRBS31,则功率包络不变,但是各条谱线间的间隔=(10G/2147483647)≈4.7Hz,看起来就更像一个均匀的Sinc函数的包络。下图是理想PRBS码流的信号频谱。 伪随机码时域特征 即使从时域来看,PRBS码流里面的数据也好像是完全随机的,可以代表真实通信时信号的最恶劣情况,伪随机码的周期越长,随机性越好。实际应用中比较常见的伪随机码有PRBS7(重复周期为127个比特)、PRBS9(重复周期为511个比特)、PRBS11(重复周期为2047个比特)、PRBS15(重复周期为32767个比特)、PRBS23(重复周期为8388607个比特)、PRBS31(重复周期为2147483647个比特)等。 PRBS码还有一个特点,就是码流越长,码流里连续的1或连续的0的数量越多。比如对于PRBS7码来说,其码流里最多有7个连续的1和6个连续的0;而对于PRBS31码流来说,其码流里最多有31个连续的1和30个连续的0。这种特性用在测量里可以很方便地找到码流的起始点。下图是不同的PRBS码的周期长度和码流里最多的连续的1或0的数量的一个比较。 伪随机码的可预测性 PRBS码流看起来是随机的,但并不是真正的随机码,其有精确的重复周期,而且每一个后续bit都是可以预计的。只要收发双方约定好了要使用的PRBS码长度,接收端只要正确接收到很少的数据bit就可以据此精确预测后面到来的每个bit。 比如对于PRBS7来说,接收端只要连续正确接收到7个bit的数据并填充到7个移位寄存器里,就可以用和发送端一样的电路精确生成后面到来的每一个bit,如果把其后续生成的bit和实际接收到的bit做比较,就可以统计接收的数据的误码率。即使对于PRBS31码来说,也只需要连续正确接收到31个bit就可以完成同步过程。PRBS码的这种自同步特性大大方便了误码率的测试,因此大部分高速总线的误码率测试场合都会使用PRBS码。 伪随机码的码型不受分频影响 PRBS码有一个非常有趣的特性,即不受分频电路的影响。比如我们把PRBS7码流里的奇数bit单独提取出来,其仍然是PRBS7的码流;同样如果把其偶数bit提取出来,也仍然是PRBS7的码流。对于PRBS码,只要进行的是2的N次方的整数分频,得到的码流还仍然是一样的PRBS码流。这种特性可以很方便地用在一些复用和解复用器的测试中。下图是用PRBS码进行复用/解复用器传输误码率测试的一个例子。 正是由于PRBS码的伪随机性、自同步特性、电路简单等一系列优异的特性,很多高速数字总线的信号质量或者系统传输误码率等测量场合都会用到PRBS码,PRBS码是高速信号测试中最常用的一种码型。
  • 热度 9
    2015-1-16 09:18
    8170 次阅读|
    2 个评论
    在 FPGA 中利用 LFSR 实现 PRBS 概述          LFSR ( Linear Feedback Shift-Register ),即线性反馈移位寄存器,可以用于创建 Pseudo-Random Binary Sequence ( PRBS ),即伪随机序列,的一种逻辑电路。一个 LFSR 电路有一系列 M 寄存器和决定序列转换状态的反馈抽头组成。反馈抽头由模 -2 多项式描述。对于一个 M 级 LFSR 来说,最多可以有 2 m 个状态,全“ 0 ”状态不会转入其他状态,所以 LFSR 的最长周期是 2 m -1 。而 PRBS 是 LFSR 的二进制输出。          LFRS 和 PRBS 在数字系统被广泛使用。在 SONET 应用中 PRBS7 需要被用于数据扩展( Data Spreading )(每个数据位被一个 PRBS 位调制),而在 CDMA 无线通信里, PRBS 序列被用于产生扩频数据(每个数据位被一个 PRBS 位调制)以及同步(基站发送已知的 PRBS 码)。在高速串行系统, PRBS 需要被用于 BER ( bit-error-rate )测试(这个可以在 ALTERA 带 GXB 的器件中经常看到此应用)。在数据处理中, PRBS 有时候还会用于白噪声的产生,例如,作为数字噪声源。 拓扑结构 图 1 显示了 LFSR 两种通用的拓扑结构,即 斐波那契 ( Fibonacci ) 和伽罗瓦 ( Galois ) 。这两种拓扑结构和移项操作有关。图1显示了序列的移项方式,图1-a是Fibonacci,改变移项以及求和节点方向后就可以转换成图1-b所示的Galois拓扑。图1-c通过转换,得到和图1-a一样移项方向的Galois拓扑结构。 图1所示的“求和节点”其实就是一个模-2加法器,可以用典型的XOR门来实现。可以用XNOR门(即对求和取反)来替代XOR来实现求和节点。理由是基于XOR门的LFSR的无效状态时全零状态;由于事实上如果移位寄存器加载零值,模-2求和结果还是为零,这样LFSR状态就永远不会改变。而基于XNOR门的LFSR序列的无效状态是上述基于XOR的无效状态的补码(取反),所以这时候无效状态为全1。 图1显示了Fibonacci和Galois两种拓扑结构之间非常有趣的差异,即Fibonacci结构通过求和节点时(可能需要宽输入异或门)有一个潜在的长组合路径,而Galois形式的每个求和节点都是寄存器输出。这意味着,Galois更适合在FPGA中实现。然而,LFSR原始多项式一般只有2个、4个或者6个反馈抽头,这些反馈抽头用一个或者很少几个LE即可实现,所以两种结构并无明显比对方更容易实现优点。对于并行输出的PRBS,两种结构电路都是对多输入求和并寄存器输出,使得电路变成一个更复杂的系统,所以再次表明,这两种结构彼此之间并没比对方更优特点。       图 1 : LFSR 两种通用拓扑结构 多项式符号          LFSR 反馈抽头由模 -2 多项式描述,反馈点由特征多项式决定。原始多项式( Primitive Polynomials )产生最长序列(即 m 序列),这时候特征多项式等于原始多项式。有多种形式可以表示多项式,比如抽头形式、功能形式以及二进制形式(也可以表现为十进制或者十六进制)。图 1 显示的两种拓扑结构中, X n 表示了多项式反馈抽头。图 2 分别用这三种形式显示了一个 7-bit LFSR ( PRBS7 )序列,其抽头为 ,功能多项式为 X 7 +X 6 +1 ,二进制形式为 1100_0001b = C1h = 193 。图 2 所示的拓扑结构还有一个镜像多项式,即 X 7 +X 1 +1 , 1000_0011b = 83h = 131 。          在使用多项式和对应硬件实现 LFSR 和 PRBS 时有许多的歧义使用,而且歧义产生源头有多处。你比如在图 1 移位方向上定义有抽头索引,在图 2 中,有相关于抽头的索引定义的移位寄存器索引。如果任何上述索引改变(比如取反)那么一个不同的 LFSR 就被实现了。另外,事实上 LFSR 存在的镜像多项式对(其实就是反向序列)也是产生歧义的源头之一。   图 2 :多项式 X 7 +X 6 +1 的 PRBS7 LFSR 拓扑结构 图 3 :某些级数下本原多项式个数以及前 10 个本原多项式的对照表 一个实例 以 48 级本原多项式 x 48 +x 9 +x 8 +x 6 +1 为例,其周期为 281474976710655 (约 256Tbits ),假如以 1Mbps 的速率发送,发送一个完整周期的时间为约 9 年。其移位寄存器表示形式为 BIN = B9 XOR B8 XOR B6 XOR B0 。可以在 FPGA 中用如图 4 所示方法实现。 图 4 : 48 级 PRBS 在 FPGA 中的一个实现 移位寄存器在复位时,从 data 载入常数 1234567890 作为种子。种子不同时生成的序列有很大差别。两个具有相同种子相同结构的 PRBS 发生器产生的序列完全一样 。  
  • 热度 8
    2014-2-8 22:02
    1650 次阅读|
    0 个评论
    高速接口中的 PRBS 模块的设计 KevinWan   在高速设计中为了测试高速串行通道传输的误码率,通常通过发送 PRBS 码来进行测试。 原理:用生成函数产生一段随机码流,然后按周期循环。 PRBS 码的周期长度与其阶数有关,常用的阶数有 7 、 9 、 11 、 15 、 20 、 23 、 31 。 对于 n 阶 PRBS 码,每个周期的序列长度为 2^n-1 。 在每个周期内, “0” 和 “1” 是随机分布的,并且 “0” 和 “1” 的个数相等。 连续个 “1” 的最大数目为 n ,连续个 “0” 的最大数目为 n-1( 反转后就是 n-1 个连 “1” 和 n 个连 “0”) 。   在对高速信号链路进行误码测试时,基本上都是利用 PRBS 码流来模拟真实的线网码流环境,因为在线网中,所有的数据都是随机出现的,没有任何规律可言,而 PRBS 码流在一定程度上具有这种 “ 随机数据 ” 特性,二进制 “0” 和 “1” 随机出现,其频谱特征与白噪声非常接近。 PRBS 码流的阶数越高,其包含的码型就越丰富,就越接近真实的线网环境,测试的结果就越准确。 一个 PRBS 序列可以串 / 并转换成多路( 2 、 4 、 8 、 16… 路),每路输出的速率降低,但仍然保持原序列的一切特征;反之,同一时钟源低速率多路( 2 、 4 、 8 、 16… 路)同一 n 数的 PRBS 可以经并 / 串转换成高速率的 n 阶 PRBS 。 本文采用 Verilog 来设计 PRBS 模块,可以通过外部的参数配置输出 prbs7, prbs9, prbs15, prbs23, prbs31      TX_Data = PRBS_reg ;  end end assign PRBS_Data = TX_Data; endmodule
  • 热度 7
    2012-6-27 20:01
    1959 次阅读|
    0 个评论
    最近一个朋友让帮忙做个DVB-S的m序列发生器仿真,做完记录下。 各个数字电视广播传输标准都含有能量扩散模块,即为了消除输入的TS流中含的长“0”或长“1”,进行的一个伪随机化处理,也就是我们说的能量扩散模块或者m序列发生器。 TS包的简单结构如下图:   固定长度为188字节,第一个为同步字节47H,DVB-S中还规定8个TS帧为一个超帧,对每个超帧的第一个TS帧的同步字节47H进行翻转成B8H。 PRBS的二进制生成多项式为:P(X)=1+X 14 +X 15 结构图如下: 由一个移位寄存器、两个异或门和一个与门组成,其中移位寄存器的初始序列为100101010000000。 需注意的是,DVB-S中规定,每个超帧数据开始前需对PRBS进行初始化,并且每个同步字节都不进行伪随机化,但移位寄存器需要进行移位。 综上,matlab仿真程序如下: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% DVB-S PRBS %  2012/6/25 % %% initial PACKAGE_BYTES = 188; TEST_PACKETS = 400; PRBS_INIT_DATA = ; %% PRBS null_package_data = ; data = repmat(null_package_data, ); data_before_prbs = data; % super frame 1st sync change for periods=1:TEST_PACKETS;     for i=1:PACKAGE_BYTES;         if i==1 mod(periods,8)==1             data((periods - 1) * PACKAGE_BYTES + i) = 255 - 71;    % B8HEX         end     end end % frame data prbs for periods=1:TEST_PACKETS;     for i=1:PACKAGE_BYTES;         tempbin = zeros(1, 8);         if i==1 mod(periods,8)==1             PRBS = PRBS_INIT_DATA;         else             %PRBS generator is 1+x^14+x^15             tempbin = xor(PRBS(15:-1:8), PRBS(14:-1:7));             PRBS(15:-1:9) = PRBS(7:-1:1);             PRBS(8:-1:1) = tempbin;         end         if i1             tempdata = data((periods - 1) * PACKAGE_BYTES + i);             datastr = dec2bin(tempdata, 8);             tempdatabin = zeros(1, 8);             tempdatabin(1:8) = datastr(1:8) - 48;             databin = xor(tempbin, tempdatabin);             data((periods - 1) * PACKAGE_BYTES + i) = sum(databin.* );         end     end end data_after_prbs = data; 仅供参考。
相关资源
  • 所需E币: 3
    时间: 2019-12-28 23:57
    大小: 29KB
    上传者: 二不过三
    TheMAX9247featuresaninternaltestmode,whichisusefulfordebuggingtheseriallinkorgeneratingaknown-goodtestpatternforparametermeasurement.ThisapplicationnotedetailstheMAX9247'stwoprimarytestmodes:PRBSandunencoded.……
  • 所需E币: 3
    时间: 2019-5-26 09:12
    大小: 7.73MB
    上传者: royalark_912907664
    基于减少8B/10B编码器占用的逻辑资源和保证该编码器误码率为0的目的,采用查表法和组合逻辑实现相结合的方法设计实现了符合嵌入式互连规范RapidIO协议的8B/10B编码器,通过伪随机二进制序列(PseudoRandomBinarySequence,PRBS)检测方法对该编码器进行验证。FPGA综合结果表明,该设计占用的LUT为32,占用较少的逻辑资源。采用PRBS-7测试结果表明,该8B/10B编码电路误码率为0,表明了该8B/10B编码器传输信息的可靠性。
广告