Verilog数字系统基础设计-LFSR

引言

LFSR(线性反馈移位寄存器)用于产生可重复的伪随机序列PRBS,该电路由n级触发器和一些异或门组成。在每个时钟周期内,新的输入值会被反馈到LFSR内部各个触发器的输入端,输人值中的一部分来源于LFSR的输出端,另一部分由LFSR各输出端进行异或运算得到。

该电路具有以下特点:

  • 如果初始状态相同,则最终会得到相同的输出序列(即输出序列是确定的);

  • 输出序列趋向于随机序列(伪随机);

  • 经过一定次数的迭代后,你将得到与初始状态相同的状态值;(最大重复间隔可由(2^n- 1)计算,其中n为移位寄存器的数目)

由于上述特性,LFSR主要用于生成PN序列(伪噪声序列)。

LFSR的初始值被称为伪随机序列的种子,其最后一个触发器输出的就是一个周期性重复的伪随机序列。由n个触发器构成的LFSR电路可以产生一个周期为2^n-1的序列。以3比特LFSR为例,触发器依次重复出现111,101,100,010,001,110及011这7种组合,最后一个触发器输出的就是一个周期为7的伪随机序列。目前有两类常用的LFSR电路:斐波那契LFSR与伽罗瓦LFSR下面分别进行介绍。

斐波那契LFSR与伽罗瓦LFSR

斐波那契LFSR也可称为多到一型LFSR,即多个触发器的输出通过异或逻辑来驱动一个触发器的输入。

与此相反,伽罗瓦LFSR为一到多型LFSR,即一个触发器的输出通过异或逻辑驱动多个触发器的输入。这两种电路都产生(2^n-1)序列,但是一到多型LFSR具有更高的速度,因为它的两个触发器之间仅使用一个异或门。图6.1至图6.3是3比特和4比特LFSR的具体电路。

伽罗瓦LFSR(反馈多项式为x^3+x^2+1):

  • 触发器xl的输入通常来自于触发器x2的输出;

  • x3(最高项)的输入通常来自于xl的输出;

  • 此多项式中剩余触发器的输入是xl的输出与其前级输出异或的结果;

  • x2的输人由x1的输出与x3的输出通过异或运算得到。

LFSR电路可用于构建高速计数器,LFSR计数器与二进制计数器有何不同呢?二进制计数器产生重复且规整的输出序列,而LFSR计数器产生的序列是近似随机的。我们是否可以从LFSR链中任意位置取值并且通过异或逻辑产生伪随机序列呢?答案是肯定的,这样可以产生伪随机序列,但此时序列的长度可能不是最长的。换言之,对于由n个触发器构成的LFSR而言,选择合适的反馈多项式不仅可以产生伪随机序列,而且可以产生最大长度的伪随机序列。

LFSR反馈多项式

本电路中每次迭代的状态转换如下表所示,在这个表中,你会发现到上面列出的所有属性。

产生最大长度伪随机序列的反馈多项式如下表所示。表中给出了n取不同值时产生最大长度伪随机序列的反馈多项式。需要注意的是,对于任意给定的移位寄存器长度n,可能存在不止一个产生最大长度伪随机序列的反馈多项式。

在上面表述中这个电路被表示为一个多项式,但是你会发现很难把真实的电路和生成的多项式联系起来,下面的插图将帮助你理解生成的多项式的含义。

//上图中,原作者可能存在一个错误,应该是1X^1, 而不是0X^1

//理解:反馈路径存在,取1;反之,取0。x^4 、x和x^0存在,x^3和x^2不存在,所以是【1 0 0 1 1】

LFSR的用法

LFSR具有广泛的应用, 下面对其中的一些典型应用进行介绍。

LFSR计数器

LFSR可用于构建通过随机序列状态进行计数的计数器。与常见的计数器相比, LFSR计数器具有速度快 、 消耗逻辑门少的特点。

扰码器/解扰器

LFSR可用作扰码器来产生重复的比特图案。当重复间隔较大时, 该比特图案看上去就像一个随机的比特序列。用户数据发送前和扰码器生成的序列进行异或, 然后发出, 此时发送的数据就是经过扰码的数据。接收电路与发送电路采用相同的多项式, 这样, 解扰器就可以将发送端原始的用户数据恢复出来。

LFSR还可应用于其他领域, 如密码系统 、 BIST ( 内建自测试 )、 快速以太网及吉比特以太网等。

扩展:m序列

m Sequence (MLS : Maximum Length Sequence)

m序列是一类特殊的LFSR序列,为了更好的理解m序列,首先你需要理解LFSR序列的概念。

与典型的LFSR相比,m序列有什么特别之处?

如果使用LFSR生成一个序列,输出最终会重复它自己,但是在大多数应用程序中,其目的是使用给定数目的移位寄存器(后续用taps表示这些寄存器)生成尽可能长的非重复序列。m-Squence 是一种特殊类型的LFSR,它为每个给定的taps提供了最长的非重复序列。

下表显示了各种taps的已知m序列:

参考链接:http://mail.sharetechnote.com/html/Handbook_Communication_LFSR.html

Verilog 高级数字系统设计

推荐阅读

【Vivado那些事】如何查找官网例程及如何使用官网例程

【Vivado使用误区与进阶】总结篇

【Vivado那些事】Vivado中常用的快捷键(二)其他常用快捷键

SystemVerilog数字系统设计_夏宇闻 PDF

图书推荐|ARM Cortex-M0 全可编程SoC原理及实现

1202年了,还在使用虚拟机吗?Win10安装Ubuntu子系统及图形化界面详细教程

Github 上有哪些优秀的 VHDL/Verilog/FPGA 项目

AD936x+ZYNQ搭建OpenWIFI

面试中经常会遇到的FPGA基本概念,你会几个?

Xilinx FPGA MIPI 接口简单说明

介绍一些新手入门FPGA的优秀网站

Vivado ML(机器学习) 2021尝鲜

推荐一些可以获取免费的国外的原版书籍(电子版)网站

FPGA 的重构

浅析FPGA局部动态可重构技术

ISP(图像信号处理)算法概述、工作原理、架构、处理流程

国产CPU概括

从电子游戏历史看IC发展的助推剂

80年代电子游戏及电脑游戏的发展历史

PCIe总线的基础知识

万字长文带你回顾电子游戏的七十多年历史(完整版)

FPGA中异步复位,同步释放的理解

OpenFPGA系列文章总结

用Verilog设计一个16 位 RISC 处理器

介绍一些新手入门FPGA的优秀网站(新增)
如何提高FPGA的工作频率

【Verilog】深入理解阻塞和非阻塞赋值的不同

简谈 Xilinx FPGA 原理及结构

【官方推荐】学习Zynq-7000的入门书单

【Vivado那些事】Xilinx 7系列时钟结构详解

点击上方字体即可跳转阅读

Verilog数字系统基础设计-LFSR相关推荐

  1. Verilog数字系统基础设计-扰码与解扰

    Verilog数字系统基础设计-扰码与解扰 扰码可以对原始的用户数据进行扰乱,得到随机化的用户数据.发送电路在发送数据前先对数据进行随机扰乱,接收电路使用相同的扰乱算法重新恢复出原始的数据. 什么是扰 ...

  2. Verilog数字系统基础设计-数据转换器

    绪论 在一些应用中,两个电路模块交界处,一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时需要进行数据转换.例如,在SATA控制器中,内部数据位宽为32比特,但是与外部物理收发器PHY的接口 ...

  3. Verilog数字系统基础设计-CRC

    CRC(循环冗余校验) CRC介绍 临时"插播",后面有实例. CRC(Cyclic Redundancy Check,循环冗余校验)是数据帧传输中常用的一种差错控制编码方式,针对 ...

  4. 数字系统课程设计——VHDL密码锁控制器

    @数字系统课程设计 VHDL密码锁控制器 VHDL语言设计的密码锁控制器,模拟仿真平台为vivado 2018.(学生:慌慌和张张) 使用器材:Nexys4 DDR Artix-7 FPGA 设计软件 ...

  5. 高速数字系统时钟设计-AD9516

    此篇是我在学习中做的归纳与总结,其中如果存在版权或知识错误请直接联系我,欢迎留言. PS:本着知识共享的原则,此篇博客可以随意转载,但请标明出处! 在高速数字系统中,时钟起到至关重要的作用,它决定系统 ...

  6. Verilog数字系统教程学习——Verilog语法的基本概念

    Verilog HDL是一种用于数字系统设计的语言.Verilog HDL既是一种行为描述语言也是一种结构描述语言. 行为描述--逻辑--reg型变量 结构描述--连线--wire型变量 这就是说,无 ...

  7. 数字系统重要指标-吞吐率和时延

    数字系统重要指标-吞吐率 吞吐率被定义为数字电路单位时间内传输数据的量或单位时间完成的工作量.传输的数据越多或做的工作越多,则吞吐率越高.吞吐率有时候和性能.带宽可以互换使用.对于CPU来说,吞吐率定 ...

  8. logisim数据选择器_利用Logisim构建小型数字系统(运动码表)

    本文主要介绍的是中国大学mooc上"计算机硬件系统设计"课程中的一个实验.首先,我对本课程的课程组深表感谢,开发了这么好的学习资源供学生在线学习. 下面介绍的是这个实验的设计过程. ...

  9. 数字逻辑课程设计,简单的8位模型计算机verilog设计

    简单8位模型计算机 0.摘要 1.绪论 1.1 模型计算机简介 1.2 设计主要内容 1.2.1 设计指标 1.2.2 设计思路 2.系统设计 2.1模型计算机原理 2.2 模型计算机组成 2.3 模 ...

最新文章

  1. python dlib学习(四):单目标跟踪
  2. 重构 pdf_三维温度场的重构方法,更准确地监测储能系统的电池堆内部温度
  3. BBC:乐在其中统计学 (2010)
  4. junit junit_穿越JUnit流
  5. [react] 怎样在react中使用innerHTML?
  6. mysql中怎么实现Apriori_关联规则算法Apriori的学习与实现
  7. Enterprise Library v3 初步开发计划
  8. 翻译:理解TCP/IP网络栈编写网络应用(上)
  9. 11条要点速读:网络小额贷款业务管理暂行办法(征求意见稿)
  10. visio网络拓扑图 下载_Visio2019软件下载及安装教程
  11. 计算机思维在化学上的应用,信息技术在化学教育中的应用
  12. c语言opengles程序,OpenGL教程 OpenGL编程指南
  13. 入坑之路第七天(防御策略报表工具)
  14. 构建KEGG pathway、Entrez ID、Ensemble ID的对应关系
  15. RZR 丝印RZR Marking RZR 12Pin 芯片,终于找到型号了
  16. linux开启cups服务,Linux中cups打印服务实战设置
  17. oracle数据错误循环冗余检查,/S-Error: (OS 23) 数据错误(循环冗余检查)
  18. jxl实现写入excel模板及导出(带图片)
  19. 7-58 计算油费 (15 分)
  20. PGM:有向图模型:贝叶斯网络

热门文章

  1. 面试题-决战2022
  2. Oracle数据安全面面观【经典博客】
  3. Navicate 破解教程
  4. HandlerThread源码理解
  5. 转来的:Diablo中的七大套装背景
  6. FileStream
  7. Cr3格式怎么换成JPG?分享3种方法,让你轻松搞定
  8. 【UML类图】空心菱形和实心菱形的区别
  9. 云计算每周之“红黑榜”
  10. mysql uuid 触发器_mysql触发器uuid