明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 1012|回复: 1

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

[复制链接]
发表于 2020-3-20 10:16:59 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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



1.1 M序列简介
     M序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移位寄存器产生的周期最长的序列。一般来说,一个n级线性反馈移位寄存器可能产生的最长周期为(2^n-1)。

    因为移位寄存器的初始值不能为0,否则不管怎么移,移位寄存器的值都不为0,所以最长周期为(2^n-1)。


1.2 应用范围

    m序列是广泛应用的一种伪随机序列,其在通信领域有着广泛的应用,如扩频通信,卫星通信的码分多址,数字数据中的加密、加扰、同步、误码率测量等领域。

    在所有的伪随机序列中,m序列是最重要、最基本的一种伪随机序列。它容易产生,规律性强,有很好的自相关性和较好的互相关性。


1.3 M序列模型

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

30.png


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

37.PNG

    其中Ci 的取值为01,其中C0 Cn-1 1。当此式为本原多项式(只能被1和自身整除,类似于质数)时才能产生M序列。

    这里给出2阶到10阶的本原多项式

32.png


1.4 FPGA实现

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


1.4.1  7阶架构设计

      33.PNG

     注: 代表异或


    说明: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 [6:0] r7;

    assign ms7 = r7[0];

    always @ (posedge clk or negedge rst_n)begin
        if(!rst_n)
            r7 <= INIT;
        else if(en)begin
            r7[0] <= r7[1];
            r7[1] <= r7[2];
            r7[2] <= r7[3];
            r7[3] <= r7[4];
            r7[4] <= r7[5];
            r7[5] <= r7[6];
            r7[6] <= r7[0] ^ r7[4];
        end
        else
            r7 <= r7;
    end

endmodule


1.4.2  8阶架构设计
34.PNG

信号说明

信号
功能
说明
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 [7:0] r8;

    assign ms8 = r8[0];

    always @ (posedge clk or negedge rst_n)begin
        if(!rst_n)
            r8 <= INIT;
        else if(en) begin
            r8[0] <= r8[1];
            r8[1] <= r8[2];
            r8[2] <= r8[3];
            r8[3] <= r8[4];
            r8[4] <= r8[5];
            r8[5] <= r8[6];
            r8[6] <= r8[7];
            r8[7] <= r8[0] ^ r8[4] ^ r8[5] ^ r8[6];
        end
        else
            r8 <= r8;
    end

endmodule



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

    7阶仿真波形

35.png



    8阶仿真波形

36.png






上一篇:基于FPGA的汉明码编码解码设计
下一篇:【至简设计案例系列】基于FPGA的频率、电压测量
FPGA视频课程  培训班 FPGA学习资料
吴老师 18022857217(微信同号) Q1241003385
发表于 2020-11-13 17:05:36 | 显示全部楼层
需要此案例源工程代码等资料的,请联系
MP801开发板 网络培训班 就业培训班 FPGA学习资料
周老师 17002067067(微信同号) Q1727673675
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号-1

GMT+8, 2020-11-29 07:29 , Processed in 0.514938 second(s), 16 queries , File On.

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表