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

  • 相关阅读:
    5-29
    5-28
    5-27
    -5-26
    5-25
    5-24
    5-21
    RabbitMQ消息中间件极速入门与实战
    细说java多线程之内存可见性
    全面解析java注解
  • 原文地址:https://www.cnblogs.com/lifei-chan/p/8949496.html
Copyright © 2020-2023  润新知