【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现 您所在的位置:网站首页 四位移位寄存器全状态图 【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现

【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现

2024-06-09 23:32| 来源: 网络整理| 查看: 265

【FPGA】线性反馈移位寄存器(LFSR)的Verilog实现 孤独的单刀 分类:硬件电路 发布时间 2024.04.10阅读数 517 评论数 0 什么是移位寄存器

移位寄存器:是指多个寄存器并排相连,前一个寄存器的输出作为下一个寄存器的输入,寄存器中存放的数据在每个时钟周期向左或向右移动一位。

下面的右移移位寄存器因为左侧没有有效输入,所以在第4个时钟周期,寄存器内就已经没有有效数据了。

反馈移位寄存器:寄存器被移出的数据后又通过某种方式或函数重新连接到了移位寄存器的输入端,从而使得移位寄存器有不断的输出。

线性反馈移位寄存器(Linear-Feedback Shift Register,LFSR):当反馈移位寄存器的反馈函数为线性函数时,就称这个移位寄存器是反馈移位寄存器。LFSR所用的线性反馈函数一般为 异或 或者 同或。

在每个时钟周期,LFSR的新的输入值会被反馈到内部各个寄存器的输入端,输入值中的一部分来源于LFSR的输出端,另一部分来源于LFSR各输出端进行异或运算得到。

什么是LFSR

LFSR的初始值被称为种子(Seed)。由异或门构成的LFSR的种子不能为全0,因为0与0异或永远为0,所以移位寄存器的输出永远都不会变化。同理,由同或门构成的LFSR的种子则不能为全1。

LFSR中的寄存器的个数被称为LFSR的级数。一个3级的LFSR最多同时存放3bit数据。一个n级的LFSR最多只有2^n - 1个状态(因为要排除全0状态 或 全1状态),比如3级的LFSR就只有7个状态。

LFSR的有些位参与反馈,有些位不参与反馈,其中参与的位被称为抽头。因为触发器编号从1开始,因此抽头的取值范围是1~(2^n-1)。

如果设计得当(与抽头有关),那么LFSR产生的状态可以是周期性的。只要选择合适的反馈函数便可使序列的周期达到最大值(2^n-1),周期达到最大值的序列称为m序列( m-sequence )。比如下面的LFSR(假设种子为111)会依次产生111>110>100>001>010>101>011 这7个状态,然后又重新从111开始循环。

不同的级数如何选取正确的抽头?可以参考下面这个表,表内的抽头选取都是可以保证LFSR能运转到最多状态的。

LFSR的两种分类

目前有两类常用的LFSR:斐波那契LFSR 和 伽罗瓦LFSR,下面分别就进行介绍。

斐波那契LFSR(Fibonacci LFSRs),又被称为多到一型LFSR,即多个触发器的输出通过反馈来驱动一个触发器的输入。下图是一个典型的斐波那契LFSR,反馈抽头为3和2。

伽罗瓦LFSR(Fibonacci LFSRs),又被称为一到多型LFSR,即以个触发器的输出通过反馈来驱动多个触发器的输入。下图是一个典型的伽罗瓦LFSR,反馈抽头同样为3和2。这个伽罗瓦LFSR同样可以产生7级序列,但是序列的排序与斐波那契LFSR产生的序列是不同的。

斐波那契LFSR和伽罗瓦LFSR有同样的功能,但是伽罗瓦LFSR的电路性能要由于斐波那契LFSR,因为它在两个触发器之间只使用了一个异或门(或者同或门)。

Verilog实现与仿真

下面用Verilog分别实现抽头为(8.6.5.4)的8级斐波那契LFSR和伽罗瓦LFSR,8级LFSR的状态数为2^8-1=255个。.这个网站LFSR自动工具有一个很好用的LFSR工具,可以自定义抽头、级数,反馈方式和LFSR种类,它可以自动生成Verilog代码和穷举所有的LFSR状态。

斐波那契LFSR

用同或门作为反馈函数生成抽头为(8.6.5.4)的8级斐波那契LFSR,Verilog代码如下:

//8级斐波那契LFSR(多到1型LFSR)设计 //同或门作为反馈函数,反馈多项式为 f(x)=x^8 + x^6 + x^5 + x^4 + 1 module LFSR8_Fib( input clk, input rst, output reg [7:0] lfsr ); always @(posedge clk) begin if(rst) //同或门种子可以选取全0,同时FPGA复位后也会复位到0,比较方便 lfsr


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有