线性反馈移位寄存器(linear feedback shift register, LFSR)是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。

线性反馈移位寄存器(LFSR)是一个产生二进制位序列的机制。这个寄存器由一个初始化矢量设置的一系列信元组成,最常见的是,密钥。这个寄存器的行为被一个时钟调节。在每个定时时刻,这个寄存器信元的内容被移动到一个正确的位置,这个排外的或这个信元子集内的内容被放在最左边的信元中。输出的一个位通常来自整个更新程序。LFSRs的应用包括产生伪随机数字,伪噪声序列,快速数字计算器和灰数序列。LFSRs软件和硬件的执行是相同的。

一个n阶的LFSR由n个触发器和若干个异或门组成。在实际应用当中,主要用到两种类型的LFSR,即异或门外接线性反馈移位寄存器(IE型LFSR,图1)和异或门内接线性反馈移位寄存器(EE型LFSR,图2)。其中g0 g1 g2 gn为’0’或’1’, Q1 Q2 Q3 Qn为LFSR的输出,M(x)是输入的码字多项式,如M(x)=x4+ x1+ 1,表示输入端的输入顺序为11001,同样,LFSR的结构也可以表示为多项式G(x),称为生成多项式:

G(x)= gn*xn+ …+g1*x1+ g0;

以EE型LFSR为例来分析LFSR的工作原理以应用

以n = 3 来做个例子,具体的电路图如图3所示:

假设开始的时候(D2,D1,D0 ) = (0,0,1),那么每过一个时钟周期会进行跳变一次,可以看到具体的跳变如图4所示:

然后我们可以看到这个计数器循环起来了,无论进入那样一个状态除了0之外,都可以循环着回来,其实这里就相当于了一个3bit的伪随机数,很有意思,不是所有的多项式都有这个特性,我们现在在从数学上面来看看这个问题,其实最上面的电路是可以看成是一个除法电路,在Galois域的一个除法电路。现在假设的是R(x)是寄存器中剩余的数据,M(x)是输入的码字多项式,然后数学公式可以表示成:

然后分别计算出了M(x)的各种情况,

对于这个部分的计算我开始走进了误区,因为开始我把这的除法当作二进制除法来算了,所以一直没得到正确的结果,后来我明白了这的除法是模二的除法,在LFSR的结果中,多项式中的“+”都是模2加,就是异或运算,所以是没有进位的概念;同样,这里的除法秀的也是模2除法,即除法过程中用到的减法是模2减法,是不会产生加法进位和减法借位的运算,所以在进行模2除法时,只要部分余数首位为1,便可上商1,否则上商0,然后按照模2减法求得余数,当被除数被除完时,最后得到比除数少一位的余数。

这里用一个例子说明一下,比如M(x)=x7时,R(x)=1;模2的计算公式如下:

所以这里一定要区别模2和二进制数之间的运算的区别。

M(x)和R(x)到底是什么意义呢?

比如M(x)=1时,R(x)=1,指的就是当M(x)输入一个1时,这时的R(x)为1,即寄存器剩余的数为001,即Q1=1,Q2=0,Q3=0。

又M(x)=x时,R(x)=x,指的就是当M(x)顺序输入1,0时,这时的R(x)为x,即寄存器剩余的数为010,即Q1=0,Q2=1,Q3=0。

同理,可以知道,当M(x)=x6时,R(x)=x2+1,指的就是当M(x)顺序输入1,0,0,0,0,0,0时,这时的R(x)为x2+1,即寄存器剩余的数为010,即Q1=1,Q2=0,Q3=1。

可以看出,当第一个时钟时输入端输入一个1时,以后保持输入端为0,则随着时钟的到来,输入码字多项式就是按照1,x,x2,x3,x4,x5,x6,x7,…,xn这样的顺序发展着,观察前六个输入的R(x)分别对应的输出为:001,010,100,011,101,111,101,111,刚好为除去000的其他七个状态,当M(x)为x7时,输出又回来001,所以输出一直这样循环下去,因此LFSR可以用来BIST的伪随机测试码产生器。

线性反馈移位寄存器的实现

1、写出n阶线性反馈移位寄存器的实现过程

2、假设一个GF(2)上的5阶线性反馈移位寄存器的反馈函数为

f(x1,x2,x3,x4,x5)=x1+x5

初始状态为10011,试写出该线性反馈移位寄存器的输出序列

程序:

#include《iostream》

#include《math.h》

using namespace std;

void GF(int a,int n)

{

int b;

for(int i=1;i《32;i++)

{

cout《《(a&1);

b=a&1^((a》》4)&1);

a=a》》1^(b《《4);

}

}

int main()

{

int a=0,b;

int n;

cout《《“请输入线性移位寄存器的阶数:”;

cin》》n;

cout《《“请输入初始状态:”;

for(int i=1;i《=n;i++)

{

cin》》b;

a=a^(b《《(i-1));

}

cout《《“输出序列为:”;

GF(a,n);

cout《《endl;

return 0;

}

运行结果:

ie型lfsr_线性反馈移位寄存器原理与实现 - 全文相关推荐

  1. 线性反馈移位寄存器LFSR(斐波那契LFSR(多到一型)和伽罗瓦LFSR(一到多型)|verilog代码|Testbench|仿真结果)

    线性反馈移位寄存器LFSR 一.前言 二.LFSR简介 三.斐波那契LFSR和伽罗瓦LFSR 3.1 斐波那契LFSR 3.1.1 斐波那契LFSR 3.1.2 verilog代码 3.1.3 Tes ...

  2. LFSR线性反馈移位寄存器循环码编码原理

    线性反馈移位寄存器(LFSR)循环码编码原理    作为知识储备,近日在学习循环码编码的原理,教材为John G.Proakis和Masoud Salehi所著的<数字通信>第五版,循环码 ...

  3. 【数字IC手撕代码】Verilog伪随机数生成器|线性反馈移位寄存器|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  4. 四类九种移位寄存器总结(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR|verilog代码|Testbench|仿真结果)

    移位寄存器总结 一.前言 二.简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 2.2 verilog代码 2.3 Testbench 2.4 仿真结果 三.逻辑移位与算 ...

  5. HDLBITS笔记29:移位寄存器(包括4位移位寄存器,创建100位左/右旋转器,算术偏移,线性反馈移位寄存器等)

    题目1:4位移位寄存器(4-bit shift register) 构建一个具有异步复位.同步加载和使能功能的 4 位移位寄存器(右移位). reset:将移位寄存器重置为零. load: 加载数据[ ...

  6. 【数字IC/FPGA】线性反馈移位寄存器

    线性反馈移位寄存器 LFSR用于产生可重复的伪随机序列PRBS,该电路有n级触发器和一些异或门组成,如下图所示.它和移位寄存器最大的区别就是他有反馈. 其中,gng_ngn​为反馈系数,取值只能为0或 ...

  7. 线性反馈移位寄存器(LFSR) ______FPGA产生基于LFSR的伪随机数

    FPGA产生基于LFSR的伪随机数 https://blog.csdn.net/qq_34070723/article/details/89736772 1.概念 通过一定的算法对事先选定的随机种子( ...

  8. HDLBits 系列(21)LFSR(线性反馈移位寄存器)

    目录 5 bit LFSR 3 bit LFSR 32 bit LFSR 5 bit LFSR A linear feedback shift register is a shift register ...

  9. 序列密码体制(python随机数密码,RC4,线性反馈移位寄存器

    目录 概念: Vernam密码技术(序列密码的起源 伪随机数 线性反馈移位寄存器: 线性反馈移位寄存器LFSR 概念: 明文按一定长度分组后表示成一个序列,称为明文流.加密时,由种子密钥通过密钥流生产 ...

  10. quartus仿真6:74194构建线性反馈移位寄存器计数器LFSR

    扭环形计数器具有8个有效状态,仍然有8个无效状态.进一步提高移位寄存器构建的计数器的有效状态数,可采用线性反馈移位寄存器计数器(Linear Feedback Shift-Register Count ...

最新文章

  1. 【MM配置】评估和账户确定(Valuation Account Determination) - 1
  2. 【刷出存在感】锋会圆桌现场
  3. E. Company(Codeforces Round #520 (Div. 2))
  4. python考试搜题-大学mooc用Python玩转数据章节考试答案
  5. 5月5日——更改手机状态栏的背景颜色
  6. python学习之路---day12
  7. python 数据库模块_MySQl 数据库 之 python模块 pymysql 简单介绍
  8. 汇编 一星题目字符串合集:输入字符,操作,在屏幕上显示
  9. Atitit java读取堵塞cmd命令行返回结果 java read maven 主要原理是另外线程读取标准流,错误流。。 回显增加out头,这样发布区分errstream和stdstream的
  10. 监控提示服务器状态变更,服务器故障排除与状态监控
  11. xmm1是什么器件_第三章基于Multisim10在模拟电路实验中的应用
  12. densepose的IUV图像I通道数字与身体部分对应关系
  13. 一年级下册计算机教学计划,最新人教版一年级下册教学计划
  14. 数据时代的来临,大数据价值主要体现在哪几个方面?
  15. 毕业设计成品价格_一套毕业设计多少钱
  16. Python基础知识笔记(三)——字典、集合
  17. 【第一期】大话计算机网络(猫、路由器、wifi)
  18. contour 函数详解
  19. es6删除对象的某个属性
  20. 网页数据采集爬虫研究

热门文章

  1. 仙人掌之歌——权力的游戏(1)
  2. 除了php云和骑士还有什么_骑士CMS是什么开源程序
  3. 阿里巴巴矢量图标库在线链接使用图标
  4. Angular实战免费视频教程
  5. Oracle官网下载JDk文档
  6. cad面积累计lisp怎么用_CAD连续面积标注lisp插件
  7. 一个项目需求文档怎么写?
  8. 二分查找算法(Java)
  9. 用python实现简单的好友管理系统
  10. linux 卸载opera,Ubuntu中安装Opera 55 浏览器