加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Verilog中产生不同概率分布的随机数的系统任务函数

(2010-04-08 15:37:32)
标签:

杂谈

http://s15/middle/6840802cga24ab35f35fe&690

verilog语言中用来产生随机数的举例
 
module probability; // probability distribution functions:

reg [23:0] r1,r2; 
integer r3,r4,r5,r6,r7,r8,r9;
integer seed, start, \end mean, standard_deviation;
integer degree_of_freedom, k_stage;
initial begin 
seed=1; start=0; \end =90; mean=5; 
standard_deviation=2; degree_of_freedom=2; k_stage=1; #1;
r1 $random 60; // random -59 to 59
r2 {$random} 60; // positive value 0-59 
r3=$dist_uniform (seed, start, \end 
r4=$dist_normal (seed, mean, standard_deviation) ;
r5=$dist_exponential (seed, mean) ;
r6=$dist_poisson (seed, mean) ;
r7=$dist_chi_square (seed, degree_of_freedom) ;
r8=$dist_t (seed, degree_of_freedom) ;
r9=$dist_erlang (seed, k_stage, mean) 
end 
initial #2 $display ("?",$time,,r1,,r2,,r3,,r4,,r5); 
initial begin #3; $display ("?",$time,,r6,,r7,,r8,,r9); end

endmodule

 
 
//result 
2.000000              57                               9
3.000000                                         2

 
以上几个例子是用来产生随机数的系统任务指令,上面的例子中仅仅产生了9个不同概率分布的随机数,若是在时钟上升沿的控制下,则能够产生一组随机数。例如将程序改为如下的形式:
module probability; // probability distribution functions:

reg [23:0] r1,r2; 
reg clk;
integer r3,r4,r5,r6,r7,r8,r9;
integer seed, start, \end mean, standard_deviation;
integer degree_of_freedom, k_stage;
initial begin 
seed=1; start=0; \end =90; mean=5; 
standard_deviation=2; degree_of_freedom=2; k_stage=1; #1;
end 

initial clk  0;
always #5  clk ~clk;

always@(posedge clk)begin 
r1 $random 60; // random -59 to 59
r2 {$random} 60; // positive value 0-59 
r3=$dist_uniform (seed, start, \end 
r4=$dist_normal (seed, mean, standard_deviation) ;
r5=$dist_exponential (seed, mean) ;
r6=$dist_poisson (seed, mean) ;
r7=$dist_chi_square (seed, degree_of_freedom) ;
r8=$dist_t (seed, degree_of_freedom) ;
r9=$dist_erlang (seed, k_stage, mean) 
end 
initial #2 $display ("?",$time,,r1,,r2,,r3,,r4,,r5); 
initial begin #3; $display ("?",$time,,r6,,r7,,r8,,r9); end

endmodule

 
程序运行后,经过Modelsim仿真得到的结果如下(产生的这种随机数可以用来在testbench中进行仿真使用):



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有