马上注册,看完整文章,学更多FPGA知识。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
基于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.1 7阶架构设计
注: 代表异或
说明:r0异或r4赋值给r6,其它值按位移就可以。
信号说明
代码如下
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阶架构设计
信号说明
代码如下
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阶仿真波形
8阶仿真波形
|