Verilog:【2】伪随机数生成器(c_rand.v)
碎碎念:
由于师兄那里有些忙碌,前期算法还没来得及测试,导致FOC项目目前短暂停更一下~
同时Basic Verilog前期部分的代码还是比较简单的,因此也在尝试一天多更!人不能闲下来哇,不是说生命不息奋斗不止么(手动沟头)
目录
1 模块功能
2 模块代码
3 模块思路
4 TestBench与仿真结果
1 模块功能
时钟上升沿或者复位信号下降沿触发,利用乘法加法运算来实现伪随机数的生成。
2 模块代码
// C runtime library random number generator
//
// uses 32 logic cells for DFF/ADD and 8 DSP blocks for the
// 32x18=>32 multiplymodule c_rand (clk,rst,reseed,seed_val,out);
input clk,rst,reseed;
input [31:0] seed_val;
output [15:0] out;
wire [15:0] out;reg [31:0] state;always @(posedge clk or posedge rst) beginif (rst) state <= 0;else beginif (reseed) state <= seed_val;else beginstate <= state * 32'h343fd + 32'h269EC3;endend
endassign out = (state >> 16) & 16'h7fff;endmodule
3 模块思路
这里的思路比较清晰,主要利用state连续的乘法与加法运算,配合右移与按位与的操作,产生out作为伪随机数的结果。
算法上使用了线性同余发生器这种比较经典的伪随机数生成办法,具体算法细节就不作赘述,可以参考超链接中的内容。
这里不理解的地方在于最后的按位与操作,是把最高位进行了清0,不知道是否是为了保持符号位为0,才进行的。
4 TestBench与仿真结果
`timescale 1ns / 1ps
module c_rand_tb();reg clk;
reg rstn;
reg reseed;
reg [31:0] seed_val;
wire [15:0] out;
parameter half_cycle = 10;initial
begin
// code that executes only once
// insert code here --> begin clk = 0;forever begin#half_cycle clk = 1;#half_cycle clk = 0;end
// --> end
$display("Running testbench");
end initial
beginrstn = 0;#5 rstn = 1;#10 rstn = 0;
endinitial
beginseed_val = 32'd65535;
endinitial
beginreseed = 0;#25 reseed = 1;#10 reseed = 0;
endc_rand c_rand(.clk(clk),.rst(rstn),.reseed(reseed),.seed_val(seed_val),.out(out)
);endmodule
从仿真结果可以看到,每当新的时钟沿到达是,会产生出新的伪随机数。感觉使用起来还是比较方便的。
这就是本期的全部内容啦,如果你喜欢我的文章,不要忘了点赞+收藏+关注,分享给身边的朋友哇~
Verilog:【2】伪随机数生成器(c_rand.v)相关推荐
- Verilog 实现伪随机数生成器(线性反馈移位寄存器)
Verilog 实现伪随机数生成器(线性反馈移位寄存器) 1,题目 2,RTL代码设计 3,testbench测试代码 4,前仿真,波形验证 参考文献1 1,题目 不简单的进行移位,而是在移位的基础上 ...
- 【数字IC手撕代码】Verilog伪随机数生成器|线性反馈移位寄存器|题目|原理|设计|仿真
芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...
- 计算机仿真随机数生成,伪随机数生成器研究
摘要: 本文主要考虑了基于计算复杂性定义的伪随机数生成器.介绍了单向函数与伪随机数生成器之间的关系以及几种常见的基于离散对数问题,DDH问题的伪随机数生成器.在分析了它们的安全性和效率的同时也提出了改 ...
- gjrand 4.0 发布,C语言的伪随机数生成器
gjrand 4.0 使用新的底层生成器,生成随机数结果更加无误. gjrand 是一个C语言的伪随机数生成器.伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,例 ...
- java伪随机数生成器
关于随机数的基本概念 1.对随机数性质分类: 随机性:符合该性质的叫弱伪随机数.这种随机数仅可以用于一般应用,无法用在密码学,例如java中的java.util.Random类 不可预测性:符合该性质 ...
- random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器. random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器.Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输 ...
- python标准库生成随机数_Python3标准库:random伪随机数生成器
1. random伪随机数生成器 random模块基于Mersenne Twister算法提供了一个快速伪随机数生成器.原来开发这个生成器是为了向蒙特卡洛模拟生成输入,Mersenne Twister ...
- [Python标准库]random——伪随机数生成器
Python 版本:1.4 及以后版本 random 模块基于 Mersenne Twister 算法提供了一个快速伪随机数生成器.原先开发这个生成器是为了向蒙特卡洛模拟生成输入,Me ...
- 使用python实现伪随机数生成器
在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了. 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币.骰子.转轮.使用电子元件的噪音.核裂变等等.产生 ...
- 第五章:数学运算-random:伪随机数生成器-生成随机数
5.3 random:伪随机数生成器 random模块基于Mersenne Twister算法提供了一个快速伪随机数生成器.原先开发这个生成器是为了向蒙特卡洛模拟生成输入,Mersenne Twist ...
最新文章
- Oracle查看用户权限
- java八种语言_Java语言八种基本类型
- JMeter获取JSON内容
- Imbalanced data – Finding Waldo
- Mybatis3(3)动态 SQL
- OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽
- 疫情与资本寒冬双重危机下,智领云为何能拿到数千万融资?
- a as as big rat_超好玩!12句英语绕口令,你能一口气读完几句?
- 什么是 Power BI?
- etl全量增量抽取方式
- sql统计表个数以及表中字段个数
- Deepin 系统启动kettle(Pentaho )
- 保险IT从业者必须知道 的健康险
- git 拉取远程分支到本地的简便方法
- 计算机数据的平均函数是,excel软件中数据的平均值怎么求取
- 混币器Tornado遭制裁 对DeFi市场意味着什么?
- 如何联系CSDN客服
- 机床数控改造控制系统设计(微型计算机),大学生毕业论文:普通车床数控研究及改造设计...
- 以微信小程序相册为例,看Serverless DevOps最佳实践
- 趣味C语言系列 02——绘制圆