RTL设计(6)- 伪随机数生成器
伪随机数生成器
- 伪随机数概述
- 伪随机数生成器
- 运行结果
伪随机数概述
伪随机序列又称为伪随机码,是一组人工生成的周期序列,具有某种确定的编码规则,同时又便于重复产生和处理,因而在通信领域应用广泛。通常产生伪随机序列的电路为反馈移位寄存器,分为线性反馈移位寄存器和非线性反馈移位寄存器。
线性反馈移位寄存器(LFSR)产生的周期最长的二进制数字序列称为最大长度线性反馈移位寄存器序列,简称m序列,移位寄存器的长度为n,则m序列的周期为2n-1,没有全0状态。
伪随机数生成器的初始状态由微处理器或其他模块通过seed(种子)给出。seed不能是全0,是因为0^0=0,模块会陷入0的死循环。
伪随机数生成器
使用LFSR设计一个伪随机数生成器。
randomgen.v
`timescale 1ns / 1ps
// Company:
// Engineer:
//
// Create Date: 2020/12/13
// Author Name: Sniper
// Module Name: randomgen
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
module randomgen(input clk,input rst_n,input load,input [7:0] seed,output reg [7:0] rand_num
);always@(posedge clk or negedge rst_n)
beginif(!rst_n)rand_num <= 0;else if(load)rand_num <= seed;elserand_num[7:0] <= {rand_num[6:0], rand_num[1] ^ rand_num[2] ^ rand_num[7]};
endendmodule
tb_randomgen.v
`timescale 1ns / 1ps
// Company:
// Engineer:
//
// Create Date: 2020/12/13
// Author Name: Sniper
// Module Name: tb_randomgen
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
module tb_randomgen;//input
reg clk;
reg rst_n;
reg load;
reg [7:0] seed;//output
wire [7:0] rand_num;initial
beginclk = 0;rst_n = 0;load = 0;seed = 0;#100;rst_n = 1;@(posedge clk);seed <= 100;load <= 1;@(posedge clk);load <= 0;end//clock
always #5 clk = ~clk;//DUT
randomgen DUT
(.clk(clk),.rst_n(rst_n),.load(load),.seed(seed),.rand_num(rand_num)
);initial
begin$dumpfile("tb_randomgen.vcd");$dumpvars(0,tb_randomgen);
endinitial #1000 $finish;endmodule
运行结果
vcs -R randomgen.v tb_randomgen.v
RTL设计(6)- 伪随机数生成器相关推荐
- 【数字IC手撕代码】Verilog伪随机数生成器|线性反馈移位寄存器|题目|原理|设计|仿真
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
- Verilog 实现伪随机数生成器(线性反馈移位寄存器)
Verilog 实现伪随机数生成器(线性反馈移位寄存器) 1,题目 2,RTL代码设计 3,testbench测试代码 4,前仿真,波形验证 参考文献1 1,题目 不简单的进行移位,而是在移位的基础上 ...
- RTL设计与编码指导
一般性指导原则 面积和速度的平衡与互换原则 面积(Area)是指一个设计所消耗的目标器件的硬件资源数量,对FPGA,可以使用所消耗的触发器(FF)和查找表(LUT)来衡量.速度(Speed)是指设计在 ...
- java伪随机数生成器
关于随机数的基本概念 1.对随机数性质分类: 随机性:符合该性质的叫弱伪随机数.这种随机数仅可以用于一般应用,无法用在密码学,例如java中的java.util.Random类 不可预测性:符合该性质 ...
- FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证
前言 本文首发:FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证 RAM以及ROM在FPGA中的实现大体有两种方式,一种是使用IP核定制,一种是RTL设计. 也许有人会反驳,那原语呢? ...
- 《FPGA入门教程》看书随笔——RTL设计
1.使用verilog进行RTL设计一般可归纳为3种基本的描述方式: (1)数据流描述:采用assign连续赋值语句 (2)行为描述:使用always语句或initial语句块的过程赋值语句 (3)结 ...
- 计算机仿真随机数生成,伪随机数生成器研究
摘要: 本文主要考虑了基于计算复杂性定义的伪随机数生成器.介绍了单向函数与伪随机数生成器之间的关系以及几种常见的基于离散对数问题,DDH问题的伪随机数生成器.在分析了它们的安全性和效率的同时也提出了改 ...
- gjrand 4.0 发布,C语言的伪随机数生成器
gjrand 4.0 使用新的底层生成器,生成随机数结果更加无误. gjrand 是一个C语言的伪随机数生成器.伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,例 ...
- c语言中定义密码为英文字母,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...
- 四位密码器c语言编程,请设计 一个密码生成器,要求随机生成4组10位密码(C语言)...
请设计 一个密码生成器,要求随机生成4组10位密码(密码只能由字母和数字组成),每一组必须包含至少一个大写字母,每组密码不能相同,输出生成的密码. #include #include #include ...
最新文章
- php 点击选择图片上传,快速实现PHP图片上传和预览
- linux下oracle自动创建实例脚本
- Failed to convert property value of type java.lang.String to required type java.lang.Integer for pro
- mac 设置mysql开机自启动
- MATLAB数据分析
- socket 编程:回射客户/服务程序
- 戴尔看好Ubuntu超越Windows的十个优势
- 海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识
- 对创业者来说,创业心学就是一个不断提升自己
- SqlCacheDependency 实现数据缓存
- 华为华三学习工具模拟器安装教 程(ENSP与HCL)
- 图片拼图效果——ps
- 计算机语言学方面的期刊.,自然语言处理投稿哪些sci期刊
- 和平精英官方网站静态页面制作与学习html+css保姆级教程
- <C++>详解类对象作为类成员时调用构造和析构的时机及静态成员解释
- 万语千言,不敌一纸情书
- opencv-11-中值滤波及自适应中值滤波
- Unity通过鼠标或者手势实现拉进拉远,旋转等操作的常用方法
- 创业时代的七堂必修课
- 5736. Single-Threaded CPU
热门文章
- 描写计算机教室的词语,关于描写教室的词语
- 陈怡暖:FED决议措辞偏鹰,黄金先扬后抑险守千二关
- java.lang.IllegalStateException: Fragment already added
- 学java好还是学挖机好_现在开挖掘机还能月入上万吗,为何年轻人还是热衷于学挖掘机?...
- indexOf 的使用
- java clh_Java多线程编程CLH锁详解
- 计算机上瘾英语对话,对手机上瘾的英语作文(精选5篇)
- Android应用各个开放平台市场
- 爱因斯坦广义相对论: 质量/能量物体是如何影响时空的?
- 阿里服务器配置随笔记 centos 服务器 Linux 部分命令合集