昨天在用Vivado写Testbench顶层时,为了以后便于数据的存储导出分析,需要用的文件数据记录的功能,于是,下面谈谈$fopen/$display/$fclose这三者的用法。
$fopen——打开文件
用法1:$fopen("<文件名>");
用法2:<文件句柄> = $fopen("<文件名>");
$fdisplay——写文件
用法:$fdisplay(<文件描述符>,p1,p2,...pn);
$fclose——关闭文件
用法:$fclose(<文件描述符>);
举例
integer handle;//定义后面要用到的变量 //... //... handle = $fopen("data.txt");//打开文件 //... //... always #10 clk = ~clk;//定义时钟 always #20 begin $fdisplay(handle,"%d",rand_num);//写数据 while(!rst_n) $fclose(handle);//关文件 end
实例:
//test $fopen integer handle; initial begin handle = $fopen("../data.txt"); end reg [7:0]test_cnt; always @ (posedge sys_clk) begin if (sys_rst) test_cnt <= 8'h0; else if (test_cnt == 8'h1E) test_cnt <= test_cnt; else if (fix_timer_o[1]) test_cnt <= test_cnt + 1'b1; else test_cnt <= test_cnt; end always @ (posedge fix_timer_o[1]) if (test_cnt == 8'h1E) $fclose(handle); else $fdisplay(handle,"%d",test_cnt); // else if (fix_timer_o[1]) // $fdisplay(handle,"%d",test_cnt); // else // ; endmodule
备注:
1、在Vivado中使用$fopen时,需要在initial中调用,否则会出现Critical Warnning(可能在Modelsim中没有此问题);
2、只有执行了$fclose语句后,文件才会被写入并保存;
3、输出的文件是在工程的一个XX.sim文件夹底下,网上有帖子说不能指定或者不能用相对路径指定输出文件的存储路径。