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打开文件会将原来的文件清空,若要读数据就用 fopen打开文件会将原来的文件清空,若要读数据就用readmemb, r e a d m e m h 就 可 以 了 , 这 个 语 句 不 会 清 空 原 来 文 件 中 的 数 据 。 用 readmemh就可以了,这个语句不会清空原来文件中的数据。 用 readmemh就可以了,这个语句不会清空原来文件中的数据。用fopen的情况是为了取得句柄,即文件地址,也就是写文件时用$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");