verilog中函数用法

verilog中函数用法

  • 读写文件常用
    • 1.1打开文件
    • 1.2读写文件
  • 2执行系统命令

读写文件常用

1.1打开文件

$fopen打开文件,用法如下:
1. $fopen("<文件名>");
2. <句柄>=$fopen(“<文件名>”);

用法1自然无须多解释,对于用法2,句柄就是任务$fopen返回的多通道描述符,默认为32位,最低位(第0位)默认被设置1,默认开放标准输出通道,即transcript窗口。

注意:用 f o p e n 打 开 文 件 会 将 原 来 的 文 件 清 空 , 若 要 读 数 据 就 用 fopen打开文件会将原来的文件清空,若要读数据就用 fopenreadmemb, r e a d m e m h 就 可 以 了 , 这 个 语 句 不 会 清 空 原 来 文 件 中 的 数 据 。 用 readmemh就可以了,这个语句不会清空原来文件中的数据。 用 readmemhfopen的情况是为了取得句柄,即文件地址,也就是写文件时用$fdisplay(desc,“display1”);时才用。

  integer handle1;
  handle1=$fopen("file1.dat",wb);

1.2读写文件

写文件我们用到系统任务 $fdisplay, $fwrite.
两者用法相似,前者写完就会自动换行,后者不会换行。

interger handle1;
handle1 = $fopen("file1.dat","wb");
#可以用$fdisplay
$fdisplay (handle1,"write name here ");
#也可以用$fwrite
$fwrite(handle1,"write name here");
$fwrite(handle1,"/n");

读文件使用$fread。

interger code;
reg [7:0] mem[4:0];
interger fd;
fd = $fopen("test.bin","rb");

code = $fread(mem,fd);
$fread(mem,fd);

2执行系统命令

在$system(" ") " "中的命令只能是命令字符串本身或者是linux的环境变量,是不认识sv中定义的string的。

string output_sim_yuv = "a0.log";
string output_ref_yuv = "b0.log";
$system("cmp output_sim_yuv output_ref_yuv > cmpjpgdec");

这时候就可以使用$sformat().

$sformat(output_sim_yuv,"a0.log");
$sformat(output_ref_yuv,"b0.log");
$system("cmp output_sim_yuv output_ref_yuv > cmpjpgdec");

你可能感兴趣的:(#,SystemVerilog,systemverilog)