EETOP 创芯网论坛 (原名:电子顶级开发网)

标题: FPGA如何在一个制定范围产生一个随机数 [打印本页]

作者: xushuai_hit53    时间: 2013-9-10 17:10
标题: FPGA如何在一个制定范围产生一个随机数
FPGA如何在一个高值一个低值间产生一个随机数,真伪随机数无所谓,希望有代码或者公式,谢谢大家。
    我的邮箱xushuai_hit53@163.com
作者: shiyinjita    时间: 2013-9-10 19:49
用pn码就可以的,网上很多例子
作者: xushuai_hit53    时间: 2013-9-11 08:08
回复 2# shiyinjita


    我这初出茅庐,菜鸟一只,pn码是什么意思?
作者: 加油99    时间: 2013-9-11 08:23
百度“FPGA 伪随机数”
作者: xushuai_hit53    时间: 2013-9-11 11:01
回复 4# 加油99


    产生伪随机数的代码啊什么的有很多,但是没有办法设定伪随机码的范围啊
作者: coyoo    时间: 2013-9-11 12:06
比如7bit为随机码,范围就是0到127啊
作者: xiaojia102003    时间: 2013-9-11 13:46
本帖最后由 xiaojia102003 于 2013-9-12 10:35 编辑

楼主是哈工大的?
给你提供1个简单的思路:
范围是A,B的,假设A<B,先用$ramdon生成0<(B-A)范围的随机数,再加上A。 只能用来仿真
作者: shiyinjita    时间: 2013-9-12 07:32
回复 1# xushuai_hit53


   确实不能限定范围,如果仿真可以限定,但是应用还没有想出方法来
作者: hllyh    时间: 2013-9-12 10:02
设置范围按照7#的思路做。下面是Altera公司的一个简单代码:
lfsr.rar
作者: yadog    时间: 2013-9-12 10:20
仿真的话,使用rand函数就可以了

可综合的实现,用PRBS序列加最大最小值限制就实现了
作者: xushuai_hit53    时间: 2013-9-12 12:34
回复 6# coyoo


   我要产生一个16位的随机数,但是有高值和低值,在两个值之间产生一个随机数
作者: xushuai_hit53    时间: 2013-9-12 12:35
回复 7# xiaojia102003


    我是要应用,模仿一个故障,这个光仿真不行,不过同样感谢~!
作者: xushuai_hit53    时间: 2013-9-12 12:37
回复 9# hllyh


    谢谢
作者: xushuai_hit53    时间: 2013-9-12 12:39
回复 10# yadog


    有点不太明白PRBS,这个是在什么地方设置?跟用的开发环境有关吗?我比较熟悉Quartus 2
作者: yucaoxilin    时间: 2013-9-12 21:58
LFSR~~
作者: xushuai_hit53    时间: 2013-9-13 08:06
回复 15# yucaoxilin


    密码学,高端大气上档次啊,谢谢啊,有帮助,现在有一定的想法了。
作者: 浩然若枫    时间: 2013-9-23 08:52
记得像混沌信号就是伪随机序列,可以用FPGA产生一个有一定范围的混沌信号。
作者: xushuai_hit53    时间: 2013-9-23 12:19
回复 17# 浩然若枫


    谢谢,我已经限定了一个范围,你说的好像很有意思,我会查查。
作者: eagle654321    时间: 2013-10-10 17:14
回复 1# xushuai_hit53


    建议你看看LFSR 生成 伪随机序列
作者: donaphael    时间: 2015-1-22 16:03
回复 9# hllyh


   看看了谢谢楼主的分享
作者: glace12123    时间: 2015-1-25 00:17
always @(posedge sys_clk or negedge rst_n)
begin
    if(rst_n == 1'b0)
        prbs_out <= #U_DLY 7'b1110_101;
    else
        prbs_out <= #U_DLY {prbs_out[5:0],prbs_out[6]^prbs_out[5]};

end

恭喜,你已经有一个周期为127的7bit伪随机序列了,它的本原多项式为 x^7 + x^6 + 1,每个时钟周期产生一个,如果要加范围,你可以再逻辑限定,多于某个值后者少于某个值,就给它处理了。
产生PRBS码要用的是LFSR,说白了就是N个移位寄存器,然后把某些寄存器的输出拿来异或,每个时钟周期每个寄存器输出的结果可以组合成1个数,做得烂,这个数就不变,做得好,可以产生2^N -1个大小顺序不同的数,而怎么找抽头,需要去看近世代数知识,寻找本元多项式~~~
作者: huangxjmail    时间: 2015-6-11 11:45
回复 1# xushuai_hit53


    我和楼主有着同样的需求,但是想来想去只能用除法器求余的办法来实现,太费资源,,不知楼主现在有没有更好的方法
作者: xushuai_hit53    时间: 2015-7-1 11:10
回复 22# huangxjmail


    也没有更好的方法,用逻辑生成太费劲了,我这个有上位机,最后在上位机做随机数,把这个数传到FPGA中。
作者: huangxjmail    时间: 2015-7-1 22:45
回复 23# xushuai_hit53


    上位机做速度不够,,目前我只能想到用除法器求余
作者: 辛中臣    时间: 2015-7-2 10:35
x+random
作者: a290727130    时间: 2015-10-13 10:49
下来看看啊
作者: 孑然儿    时间: 2016-5-31 09:57
使用多项式的方法好些,取位异或等。
作者: 无所谓    时间: 2016-5-31 10:08
这个问题比较实在,有时候用的多,学习了
作者: simuzi    时间: 2016-7-27 11:35
$random %范围 不可以吗啊?
作者: 孑然儿    时间: 2016-7-27 16:23
就是利用线性移位寄存器,求异或,多项式根据PN码的就可以。前段时间我刚用过。
作者: yangxueboily    时间: 2016-7-27 20:38
rom..............
作者: dasubuaa    时间: 2018-7-19 14:49
学习了!!
作者: tangchaodefeng    时间: 2018-7-28 22:44
楼上的各位,伪随机数也仅仅是伪随机数而已,是假的。每次程序运行产生的随机数的数字还不是一样的一个确定值。




欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5