热度 27
2015-1-16 09:18
14502 次阅读|
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 发生器产生的序列完全一样 。