zoukankan      html  css  js  c++  java
  • Testbench学习——$fopen/$display/$fclose

    昨天在用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文件夹底下,网上有帖子说不能指定或者不能用相对路径指定输出文件的存储路径。

  • 相关阅读:
    Java中类的继承
    信号量、PV原语及其应用
    Python-subprocess执行命令并将输出劫持实现实时记录到日志
    Python-logging模块定制格式描述符实现定长日志等级
    Python-logging模块实现同时向控制台和文件打印日志
    SpringBoot学习笔记(二)
    Kubernetes学习日记(四)
    Kubernetes学习日记(三)
    SpringBoot学习笔记(一)
    Kubernetes学习日记(二)
  • 原文地址:https://www.cnblogs.com/lifei-chan/p/8949496.html
Copyright © 2011-2022 走看看