芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球
四社区联合力荐!近500篇数字IC精品文章收录
【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍

Verilog伪随机数生成器[线性反馈移位寄存器]

  • 一、前言
  • 二、题目
  • 三、原理
    • 3.1 移位寄存器
    • 3.2 反馈回路
    • 3.3 Update反馈回路
  • 四、RTL设计
  • 五、Testbench设计
  • 六、仿真分析
  • 七、参考资料

一、前言

本系列旨在提供100%准确的数字IC设计/验证手撕代码环节的题目,原理,RTL设计,Testbench和参考仿真波形,每篇文章的内容都经过仿真核对。快速导航链接如下:

1.奇数分频
2.偶数分频
3.半整数分批
4.小数/分数分频
5.序列检测器
6.模三检测器
7.饮料机
8.异步复位,同步释放
9.边沿检测(上升沿,下降沿,双边沿)
10.全加器,半加器
11.格雷码转二进制
12.单bit跨时钟域(打两拍,边沿同步,脉冲同步)
13.奇偶校验
14.伪随机数生成器[线性反馈移位寄存器]
15.同步FIFO
16.无毛刺时钟切换电路

本篇文章中的线性反馈寄存器,属于现代密码学的相关内容,简单来说,线性反馈寄存器的应用场景主要体现在密码学的加密上,线性结构搭配着非线性结构,共同完成加密过程,虽然说线性反馈寄存器属于伪随机数,选用不同的seed,伪随机数生成序列不同,但是同大多数密钥流产生器一样,序列足够长的时候,线性反馈寄存器也会体现其周期性,线性反馈移位寄存器(LSFR),具体可以细分为斐波那契LFSR伽罗瓦LFSR他们的具体结构相似,但面积或速度更优化

二、题目

使用Verilog,设计如下电路,复位是q[4:0]的值为11110(改编自HDLBits Lfsr5)输出的位置在q[0]处。

三、原理

3.1 移位寄存器

以上的图片显示了移位寄存器的数据移动,在reset信号到来时,移位寄存器复位成001010,之后随着clk上升沿,不断右移,输出结果为out,reset信号到来时,移位寄存器的初值为1或是0,决定了移位寄存器的seed,同样一个结构,seed不同,输出的out序列就不一样,这里的内容倒是与verilog中的系统函数$random(seed)添加种子生成随机数异曲同工,读者可以好好思考一下。

3.2 反馈回路

假如我们将out连接回移位寄存器的头部,就形成了一个反馈回路,新的移位寄存器的输出序列图如下所示,跟随clk信号打拍,这个序列可以一直输出下去。

3.3 Update反馈回路

不简单的进行移位,而是在移位的基础上加上异或门,如题目中所示,这就相当于每进行一次移位,寄存器中的值会发生改变,一直移动,一直改变,就形成了伪随机数。

四、RTL设计

module LSFR(clk,rst_n,out);
input clk;
input rst_n;
output out;reg [4:0] shift_reg;assign out = shift_reg[0];always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
shift_reg <= 5'b1_1110;
else
begin
shift_reg [4] <= shift_reg [0]^1'b0;
shift_reg [3] <= shift_reg [4];
shift_reg [2] <= shift_reg [3]^shift_reg[0];
shift_reg [1] <= shift_reg [2];
shift_reg [0] <= shift_reg [1];
end
endendmodule

五、Testbench设计

`timescale 1ns / 1ps
module LSFR_Tb();reg clk;
reg rst_n;
wire out;LSFR u1(.clk(clk),.rst_n(rst_n),.out(out));always #5 clk = ~clk;initial
begin
clk = 0;
rst_n=1;#4
rst_n = 0;
#25
rst_n = 1;
#40;
#1000
$stop;end
endmodule

六、仿真分析

可以发现,从M1到M2与M2到M3的序列是重复的,印证了之前作者所说序列足够长时的伪随机数生成器的周期性。

七、参考资料

HDLBits五位线性反馈移位寄存器
HDLBits三位线性反馈移位寄存器

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

  1. 【数字IC手撕代码】Verilog奇数分频|题目|原理|设计|仿真(三分频,五分频,奇数分频及特殊占空比)

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

  2. 【数字IC手撕代码】Verilog偶数分频|题目|原理|设计|仿真(二分频,四分频,六分频,八分频,偶数分频及特殊占空比)

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

  3. 【数字IC手撕代码】Verilog固定优先级仲裁器|题目|原理|设计|仿真

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

  4. 【数字IC手撕代码】Verilog自动售卖饮料机|题目|原理|设计|仿真

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

  5. 【数字IC手撕代码】Verilog半整数分频|题目|原理|设计|仿真

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

  6. 数字IC手撕代码-兆易创新笔试真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  7. 数字IC手撕代码---百题斩

    前言: 本篇导览目录,用来索引笔者写的其他手撕代码文章 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC ...

  8. 数字IC手撕代码--小米科技(除法器设计)

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

  9. 数字IC手撕代码-泰凌微笔试真题

    前言: 本专栏旨在记录高频笔面试手撕代码题,以备数字前端秋招,本专栏所有文章提供原理分析.代码及波形,所有代码均经过本人验证. 目录如下: 1.数字IC手撕代码-分频器(任意偶数分频) 2.数字IC手 ...

最新文章

  1. OSChina 周六乱弹 —— 小明和网关超经典的故事~
  2. python创意编程比赛-报名了!2019年全国青少年创意编程与智能设计大赛报名开始了...
  3. 安徽计算机省一级考试试题,安徽计算机一级考试试题及答案
  4. 图像-摄像头驱动流程
  5. advanced installer更换程序id_好程序员web前端培训分享kbone高级-事件系统
  6. python笔记-python编程优化:常用原则和技术介绍
  7. sphereface conv64
  8. 想成为编程高手,从基础做起
  9. graphpad做饼图_走进隆江糖饼老店,探秘绿豆饼制作过程
  10. cacti配置流量汇总
  11. flac批量转mp3,详细步骤
  12. python scrapy之模拟浏览器的随机更换
  13. Linux下载源码编译出错,编译小度wifi源码出错!
  14. 四川省巴中市谷歌高清卫星地图下载
  15. What Is Harmony OS? Huawei’s New Operating System Explained
  16. java 调用felix_寻找在动态加载Jar文件中使用Apache Felix并在Java中在运行时实例化类的基本示例...
  17. [重磅]秦雯讲大数据:心动.幡动.风动
  18. java毕业设计广告投放mybatis+源码+调试部署+系统+数据库+lw
  19. 通过微信公众号远程控制设备STM32+NB模组方案
  20. 华为 DHCP基本配置及概念

热门文章

  1. 【技术变现小技巧】-- Boss直聘 批量打招呼
  2. golang mysql 中间件_golang编写的数据库中间件kingshard
  3. java访问数据库的中间件有哪些_数据库中间件是什么?
  4. tc环境下的计算机绘画的方法,讨论学生电脑绘画制作的具体指导方法
  5. 我要学画画(持续更新~)
  6. CRM系统提升销售业绩的三个能力
  7. mac tar解压错误
  8. JS实现五子棋单人双人简易游戏(下)
  9. 【pytest】日志管理-logging模块
  10. 签到考勤java课设_Java程序设计课程设计学生考勤系统Word版