Menu Close

Verilog中function在PRBS方面的应用

作者:图图,庄乾起,Yvonne

Verilog编程时,使用function可以将可被复用的组合逻辑功能提取出来,使代码易于参数化,也便于维护。因此在许多的代码复用设计中都采用了function 调用的方式实现,特别是有一定功能的函数发生器。下面以二进制伪随机序列生成器为例介绍function调用在参数化设计中的应用。

举例如下:
PRBS(Pseudo-random Binary Sequence)通过一个生成多项式产生伪随机数据,特别适合FPGA中通信加密处理。

一般来说,PRBS由LFSR(linear feedback shift register,线性反馈移位寄存器)生成。在生成过程中,数据进行移位及异或操作。

这里以16-bit数据为例。原始数据为data = 16’b1000_0111_0011_0101。

对第11,13,14和16位进行异或的操作,其对应的反馈多项式(模2)为fed_poly = x^{16}+x^{14}+x^{13}+x^{11}+1 。注意:反馈多项式里的’1′(或 x^{0})不表示相对应位的异或,表示异或结果对第一位的输入。

其对应的反馈数为fed_poly = 17’b1011_0100_0000_0000_1,fed_poly[16:1] = 16’b1011_0100_0000_0000。那么将描述图1所示的过程可以表达为:

^ ( data & fed_poly[16:1] ) = ^(16’b1000_0111_0011_0101  &  16’b1011_0100_0000_0000)

如果是每次向左进行移一位操作的话,那么最终的表达式result为

result = { data[15:1],^ ( data & fed_poly[16 : 1] )};

如果是每次向右进行移一位操作的话,那么最终的表达式result为

result = { ^ ( data & fed_poly[16 :1] ),data[15:1]};

图1 将原始多项式相应的位进行异或[1]

 

通过Verilog中function的巧妙运用,可并行实现参数化数据位宽的PRBS,模块化的设计可以被之后复用。

引用代码(部分代码有修改和注释)如下:

代码来源:Xilinx论坛 > 资源分享区,链接:https://forums.xilinx.com/t5/%E8%B5%84%E6%BA%90%E5%88%86%E4%BA%AB%E5%8C%BA/%E5%88%86%E4%BA%AB-verilog-function%E7%9A%84%E4%BD%BF%E7%94%A8/td-p/1230626

注:本文采纳IC知识库 论坛中 图图的文章

[1] “Linear-feedback shift register,” Wikiwand. [Online]. Available: https://www.wikiwand.com/en/Linear-feedback_shift_register. [Accessed: 13-Aug-2021].

Posted in FPGA, FPGA 教材教案, Verilog, 开发语言, 教材与教案, 文章, 编程语言