LFSR线性反馈移位寄存器及Verilog实现

一、LFSR

LFSR线性反馈移位寄存器,通常由移位寄存器和异或门组成,主要用于产生伪随机序列等。

线性反馈的含义是各个寄存器的输出通过一个反馈函数连接到第一级触发器的输入;LFSR中的寄存器的个数被称为LFSR的级数。

在这里插入图片描述

LFSR分为两类:

  • 斐波那契LFSR(多对一)

    多个寄存器的输出通过反馈函数来驱动一个触发器的输入

  • 伽罗瓦LFSR(一对多)

    一个寄存器的输出通过反馈驱动多个触发器的输入

其中,多项式决定了反馈函数,下面将详细介绍。

二、斐波那契LFSR

我们以下面的多项式举例:

X 3 + X 2 + 1 X^3+X^2+1 X3+X2+1

其对应的电路结构如下:

在这里插入图片描述

即输出是第3级寄存器的输出,并且其和第2级寄存器的输出异或之后作为第1级寄存器的输入。

假设初始状态为111,则之后三级寄存器的输出(bit0、bit1、bit2)变化过程为111→011→001→100→010→101→110→111→011又回到之前的循环。

Verilog代码如下:

module LFSR(
    input clk,         
    input rst,
    output reg data_out // 伪随机信号输出
);

reg [2:0] lfsr=3'b111; // 4位线性反馈移位寄存器

always @(posedge clk or posedge  rst) begin
    if(rst)
    begin
        data_out<=1'b0;
    end
    else begin
    // LFSR 伪随机序列生成算法
    lfsr <= {lfsr[1:0], lfsr[2] ^ lfsr[1]};
    // 输出伪随机序列的最高位作为数据输出
    data_out <= lfsr[2];
end
end

endmodule

仿真结果如下:

在这里插入图片描述

三、伽罗瓦LFSR

我们以下面的多项式举例:

X 3 + X 2 + 1 X^3+X^2+1 X3+X2+1

其对应的电路结构如下:

在这里插入图片描述

即输出是第1级寄存器的输出,并且也是第3级寄存器的输入;同时第三级寄存器的输出和第1级寄存器输出异或的结果作为第2级寄存器的输入。

假设初始状态为111,则之后三级寄存器的输出(bit2、bit1、bit0)变化过程为111→101→100→010→001→110→111又回到之前的循环。

Verilog代码如下:

module LFSR(
    input clk,         
    input rst,
    output reg data_out // 伪随机信号输出
);

reg [2:0] lfsr=4'b1111; // 4位线性反馈移位寄存器

always @(posedge clk or posedge  rst) begin
    if(rst)
    begin
        data_out<=1'b0;
    end
    else begin
    // LFSR 伪随机序列生成算法
	 lfsr <= {lfsr[0], lfsr[0] ^ lfsr[2],lfsr[1]};
    // 输出伪随机序列的最高位作为数据输出
    data_out <= lfsr[0];
end
end

endmodule

仿真结果如下:

在这里插入图片描述

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值