在进行验证的时候,有时需要产生激励数据。我使用perl语言产生随机的激励数据,但是由于perl语言里的random函数无法产生二进制或者十六进制的随机数,所以比如我要产生一个十六进制的二进制随机数,那么我就使用random函数产生一个介于0和65536之间的随机数,然后再将之转换为二进制或是十六进制,再用readmemh或readmemb分别针对十六进制和二进制读取数据。具体程序如下:
1、十进制转换为二进制
# /usr/bin/perl -w
use strict;
open Bin_File,"> Bin_Data.dat";//打开一个文件句柄,并将该句柄作为写句柄;
my $i = 1;
while($i <= 8) { //只产生8个数
my $Data = int(random(65536));
$Data = unpack("B16",$Data);
print Bin_File $Data." ";//因为
verilog中的readmemb函数和readmemh函数所能读取的文本文件中间只能是空格,所以在写入的每个数据后都加一个空格;
$i = $i + 1;
}
2、十进制转换为16进制
# /usr/bin/perl
use strict;
open Hex_File,"> Hex_Data.dat";//打开一个文件句柄,并将该句柄作为写句柄;
my $i = 1;
while($i <= 8) {
my $Data = int(random(65536));
$Data = sprintf("%x",$Data);
print Bin_File $Data." ";
$i = $i + 1;
}
以上就是我所写的程序,在具体的应用中也是可以的,但是对于perl中的unpack以及sprintf函数的用法我还不是特别清楚,所以如果哪位大侠认为我上面的程序有错误,也希望您能不吝赐教!