明德扬吴老师 发表于 2020-3-20 10:16:59

【原创】基于FPGA的M序列发生器设计

基于FPGA的M序列发生器设计
作者:小周 本文为明德扬原创及录用文章,转载请注明出处!


1.1 M序列简介   M序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移位寄存器产生的周期最长的序列。一般来说,一个n级线性反馈移位寄存器可能产生的最长周期为(2^n-1)。
    因为移位寄存器的初始值不能为0,否则不管怎么移,移位寄存器的值都不为0,所以最长周期为(2^n-1)。

1.2 应用范围

    m序列是广泛应用的一种伪随机序列,其在通信领域有着广泛的应用,如扩频通信,卫星通信的码分多址,数字数据中的加密、加扰、同步、误码率测量等领域。
    在所有的伪随机序列中,m序列是最重要、最基本的一种伪随机序列。它容易产生,规律性强,有很好的自相关性和较好的互相关性。

1.3 M序列模型

   n级线性移位寄存器结构如下


      上图可以转换成数学表达式

    其中Ci 的取值为0或1,其中C0 、Cn-1 为1。当此式为本原多项式(只能被1和自身整除,类似于质数)时才能产生M序列。
    这里给出2阶到10阶的本原多项式


1.4 FPGA实现

   我们以7阶、8阶本原多项式为例设计两个M序列发生器

1.4.17阶架构设计

   
   注: 代表异或

    说明:r0异或r4赋值给r6,其它值按位移就可以。

信号说明

信号功能说明
clk模块工作时钟输入
rst_n系统复位 输入
en使能信号,表示移位一次。输入
ms7输出的M序列输出
r7移位寄存器输出,位宽为7位


代码如下

module ms7_generate(clk, rst_n, en, ms7, r7);
    parameter INIT = 7'b000_0001;
    input clk, rst_n;    input en;    output ms7;    output reg r7;
    assign ms7 = r7;
    always @ (posedge clk or negedge rst_n)begin      if(!rst_n)             r7 <= INIT;      else if(en)begin            r7 <= r7;            r7 <= r7;            r7 <= r7;            r7 <= r7;            r7 <= r7;            r7 <= r7;            r7 <= r7 ^ r7;      end      else            r7 <= r7;    end
endmodule


1.4.28阶架构设计

信号说明

信号功能说明
clk模块工作时钟输入
rst_n系统复位 输入
en使能信号,表示移位一次。输入
ms8输出的M序列输出
r8移位寄存器输出,位宽为8位



代码如下

module ms8_generate(clk, rst_n, en, ms8, r8);
    parameter INIT = 8'b0000_0001;
    input clk, rst_n;    input en;    output ms8;    output reg r8;
    assign ms8 = r8;
    always @ (posedge clk or negedge rst_n)begin      if(!rst_n)             r8 <= INIT;      else if(en) begin            r8 <= r8;            r8 <= r8;            r8 <= r8;            r8 <= r8;            r8 <= r8;            r8 <= r8;            r8 <= r8;            r8 <= r8 ^ r8 ^ r8 ^ r8;      end      else            r8 <= r8;    end
endmodule



1.5仿真验证
    tb文件参考工程文件夹中的sim文件夹
    7阶仿真波形



    8阶仿真波形


明德扬周老师 发表于 2020-11-13 17:05:36

需要此案例源工程代码等资料的,请联系
页: [1]
查看完整版本: 【原创】基于FPGA的M序列发生器设计