在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2169|回复: 10

[求助] 如何把sequence的log写入到文件?

[复制链接]
发表于 2022-3-27 23:48:45 | 显示全部楼层 |阅读模式
50资产
module taa ();
    import uvm_pkg::*;

    class test_env extends uvm_env;
        `uvm_component_utils(test_env)

        function new(string name="test_env", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
        endfunction: build_phase

        function void final_phase(uvm_phase phase);
            super.final_phase(phase);
            `uvm_info("XXXX", $sformatf("message2"), UVM_LOW)
        endfunction:final_phase
    endclass: test_env

    class test_base extends uvm_test;
        `uvm_component_utils(test_base)
        UVM_FILE file_handler;
        test_env env;

        function new(string name="test_base", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            file_handler = $fopen("logfile.log", "w");
            set_report_id_action_hier("XXXX", UVM_DISPLAY | UVM_LOG);
            set_report_id_file_hier("XXXX", file_handler);
            env = test_env::type_id::create("test_env", this);
        endfunction: build_phase

        function void connect_phase(uvm_phase phase);
            `uvm_info("XXXX", $sformatf("message1"), UVM_LOW)
        endfunction: connect_phase

        function void final_phase(uvm_phase phase);
            $fclose(file_handler);
        endfunction:final_phase
    endclass: test_base

    initial begin
        run_test("test_base");
    end
endmodule


以上代码为什么只能把message1写入到文件,而message2却不在log文件里啊?

最佳答案

查看完整内容

再仔细看了一下你代码,你代码还有一个问题:你的env的例话时间太晚了,你在调hier设置的时候env都没例化,build phase一开始就例化吧
发表于 2022-3-27 23:48:46 来自手机 | 显示全部楼层
再仔细看了一下你代码,你代码还有一个问题:你的env的例话时间太晚了,你在调hier设置的时候env都没例化,build phase一开始就例化吧
 楼主| 发表于 2022-3-27 23:50:44 | 显示全部楼层
这里是test_env的log没办法写入到文件里啊,明明是加了hier的
发表于 2022-3-28 09:09:32 来自手机 | 显示全部楼层
final phase是自顶向下执行的,你都把文件close了当然写不进,张强的书对final phase的讲解有误
 楼主| 发表于 2022-3-28 14:47:28 | 显示全部楼层


eaglezhang01 发表于 2022-3-28 09:09
final phase是自顶向下执行的,你都把文件close了当然写不进,张强的书对final phase的讲解有误 ...


那要怎么写呢大哥,final phase不管怎么执行,都是component的最后的phase啊
发表于 2022-3-28 15:38:37 | 显示全部楼层


a1872040489 发表于 2022-3-28 14:47
那要怎么写呢大哥,final phase不管怎么执行,都是component的最后的phase啊


你也没理解人家说的自顶向下执行的意思,final是最后的phase,test层次比env高,你在test层面先把文件关了,env再写肯定不对啊。 你把文件关闭代码放在写入代码后面不就行了吗
 楼主| 发表于 2022-3-28 15:53:22 | 显示全部楼层


fengzhiyong123 发表于 2022-3-28 15:38
你也没理解人家说的自顶向下执行的意思,final是最后的phase,test层次比env高,你在test层面先把文件关 ...


module taa ();
    import uvm_pkg::*;

    class test_env extends uvm_env;
        `uvm_component_utils(test_env)

        function new(string name="test_env", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
        endfunction: build_phase

        function void connect_phase(uvm_phase phase);
            `uvm_info("XXXX", $sformatf("message2"), UVM_LOW)
        endfunction:connect_phase
    endclass: test_env

    class test_base extends uvm_test;
        `uvm_component_utils(test_base)
        UVM_FILE file_handler;
        test_env env;

        function new(string name="test_base", uvm_component parent);
            super.new(name, parent);
        endfunction: new

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            file_handler = $fopen("logfile.log", "w");
            set_report_id_action_hier("XXXX", UVM_DISPLAY | UVM_LOG);
            set_report_id_file_hier("XXXX", file_handler);
            env = test_env::type_id::create("test_env", this);
        endfunction: build_phase

        function void connect_phase(uvm_phase phase);
            `uvm_info("XXXX", $sformatf("message1"), UVM_LOW)
        endfunction: connect_phase

        function void final_phase(uvm_phase phase);
            $fclose(file_handler);
        endfunction:final_phase
    endclass: test_base

    initial begin
        run_test("test_base");
    end
endmodule

这样写呢,都是在connect phase打印,但是只有message1写入到文件了,关闭还是在final phase,也不行啊。。。

发表于 2022-3-28 16:03:24 来自手机 | 显示全部楼层
楼上说的没错,一个解决办法是你不要在test中关在env中打印后再close,另外是在实际项目中不能这么做,刚说的解决方法除非你能知道到底哪个component的final 是最后执行,不然你也不能保证都打出来,实际的项目中final phase很少用,也就最后做些总结的打印,还有就是向你这种close操作,所以你的env在final phase打那句话完全没需求没必要,非要打你可以移到final_phase之前打
 楼主| 发表于 2022-3-28 16:23:34 | 显示全部楼层
本帖最后由 a1872040489 于 2022-3-28 16:25 编辑


eaglezhang01 发表于 2022-3-28 16:03
楼上说的没错,一个解决办法是你不要在test中关在env中打印后再close,另外是在实际项目中不能这么做,刚说 ...


你说的对!
发表于 2022-3-28 17:33:47 | 显示全部楼层


a1872040489 发表于 2022-3-28 15:53
module taa ();
    import uvm_pkg::*;


楼上大哥昨晚上已经告诉你答案了。代码顺序问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 12:27 , Processed in 0.022637 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表