verilog 产生m序列

原创 2016年08月30日 23:02:31

m序列是最常用的伪随机序列,是最长线性反馈移位寄存器序列的简称。如果是4级的寄存器(下面都假设n=4),那么最长周期是2^4-1=15。

m序列的特征多项式必须是4次的本原多项式。必须满足条件:

1、既约的;

2、可整除x^15+1,这里15=2^4-1;

3、不可整除x^q+1,q<15。

若已知4次的本原多项式为x^4+x+1,那么反馈逻辑就是a4 = a1 + a0(mod 2)。然后赋予初状态,那么由线性反馈逻辑和初状态就能决定m序列了。

veirlog代码如下

module m_sequence
(
	input				clk,
	input				rst,
	output		 		out,
	output  reg [3:0]	shift
);

always @( posedge clk)
	if( rst == 1'b0) 
		shift <= 'b0001;
	else 
		begin
			shift <= (shift >> 1'b1); 
			shift[3] <= shift[0]^shift[1];
		end

assign out = shift[0];
endmodule
测试文件
<pre name="code" class="plain">`timescale 1ns/1ns
module tb_m();
reg clk;
reg rst;
wire [8:0]	O_m;
wire 		O_m_0;

initial 
begin
	clk=0;
	rst=0;
	#50 
	rst=1;
end

always #10 clk=~clk;

m_sequence m_sequence_inst(
	.clk(clk),
	.rst(rst),
	.out(O_m),
	.shift(O_m_0)
);

//将modelsim数据保存到txt文件
reg  i =0;  
always @ (posedge clk)  
begin  
    if (!rst)  
        i <=0;  
    else if (i<700)     
        i <= i+1;  
    else  
        i<= 700;  
end  
      
  
integer w_file;  
    initial w_file = $fopen("data_out_1.txt");  
    always @(i)  
    begin  
        $fdisplay(w_file,"%d",O_m_0);  
        if(i == 8'd609)    //共写入254个数据  
            $stop;  
    end     
endmodule






使用matlab进行数据对比:

matlab m序列的产生使用

 

 p_i = commsrc.pn('GenPoly',		[4 1 0], ...
              'InitialStates',	[zeros(1, 3), 1],   ...
              'NumBitsOut',		16-1);

pn_i=[generate(p_i)].'; 
使用上式产生的序列周期为15,频谱图如下图所示


modelsim采样得到的数据频谱图如下图所示



在做对比时一定要注意matlab 产生m序列的初始状态

<span style="color:#ff0000;"><strong>              'InitialStates',	[zeros(1, 3), 1],   ...</strong></span>
<span style="color:#ff0000;"><strong>应与verilog给的初始状态一致。</strong></span>

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Verilog实现m序列发生器

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

用verilog实现m序列生成

m序列是最常用的伪随机序列,是最长线性y

用verilog编写m序列代码

Verilog m序列

  • 2012-09-14 14:42
  • 364B
  • 下载

Verilog学习笔记4:关于5M40ZE64C4N接地的问题

已经入夜了,还是把这篇日志写下为好。从下午开始,一直调试5M40ZE64C4N,始终不能下载,试了很多种办法,也不行。在网上查了很多资料,但没有一个能够说清楚。马上就要放弃的时候,找到原因了。把它写下...

12阶m序列verilog程序

system verilog与c语言接口读取yuv图像序列

system verilog代码 `define PIC_W 176 //图像宽 `define PIC_H 144 //图像高 `define FRAME 300 //总帧数 `define ...

verilog 写的m序列

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)