verilog | 十一、m序列发生器

一、定义

m序列:最长线性反馈移位寄存器序列的简称。是一种伪随机序列、伪噪声码。

伪随机序列:不能预先确定但可以重复实现的序列。

二、原理

递推方程:

特征方程:

x^i仅指明其系数代表ci的值,x本身的取值并无实际意义。

本原多项式:

若反馈移位寄存器的特征多项式为本原多项式,则移位寄存器能产生m序列。

若一个n次多项式f(x)满足:

1)既约的:不能再因式分解;

2)可整除(x^m + 1), m = 2^n - 1;

3)除不尽(x^q + 1), q < m;

则称:f(x)为本原多项式。

三、实现

//以x8+x4+x3+x2+1为例:
module m_sequence(
    input        sclk,
    input        rst_n,
    output        m_seq
);
 
parameter POLY = 8'b10001110;
reg [7 : 0] shift_reg;
 
always@(posedge sclk or negedge rst_n)
begin
    if(rst_n == 0)
    begin
        shift_reg <= 8'b11111111;
    end

    else
    begin
        shift_reg[7] <= (shift_reg[0] & POLY[7]) ^
                        (shift_reg[1] & POLY[6]) ^
                        (shift_reg[2] & POLY[5]) ^
                        (shift_reg[3] & POLY[4]) ^
                        (shift_reg[4] & POLY[3]) ^
                        (shift_reg[5] & POLY[2]) ^
                        (shift_reg[6] & POLY[1]) ^
                        (shift_reg[7] & POLY[0]);

        shift_reg[6 : 0] <= shift_reg[7 : 1];
    end
end
 
assign m_seq = shift_reg[0];
 
endmodule

  • 5
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
m序列(Maximal Length Sequence)发生器是一种能够产生最长长度的伪随机序列的电路,通常用于通信系统中的扰码、同步、频率同步等应用。下面是一个基于Verilog的m序列发生器的实现原理: m序列的生成是通过反馈移位寄存器实现的。其基本原理是将寄存器中的数据进行异或操作后输出,并将输出的结果反馈到寄存器的最高位,然后将寄存器中的数据向左移位。这个过程不断重复,直到寄存器中的数据与初始状态相等时停止。 具体实现如下: 1. 定义一个n位的寄存器(n为m序列的长度),并将其初始化为一个非零值,例如全1或其他非零值。 2. 在每个时钟周期中,将寄存器中的数据左移一位,并将最高位的数据与反馈多项式进行异或操作。反馈多项式的选择对m序列的质量影响很大,常用的反馈多项式有x^7+x^6+1、x^15+x^14+1、x^31+x^28+1等。 3. 将异或操作的结果输出,并将其反馈到寄存器的最高位。 4. 当寄存器中的数据与初始状态相等时,停止输出m序列。 下面是一个简单的m序列发生器Verilog代码示例: ```verilog module m_sequence( input clk, output reg out ); reg [6:0] reg; // Feedback polynomial: x^7+x^6+1 always @(posedge clk) begin out <= reg[0]; reg <= {reg[6]^reg[5], reg[6:1]}; end endmodule ``` 以上代码实现了一个长度为7的m序列发生器,反馈多项式为x^7+x^6+1。在每个时钟上升沿时,将寄存器中的数据左移一位并进行异或操作,并将输出的结果反馈到寄存器的最高位,最终输出最低位的数据作为m序列。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值