介绍
uvmgen是VCS自带可执行文件,可以用于uvm环境的生成。
使用流程是运行uvmgen,然后通过敲入需求,生成需要的uvm环境,环境只能包含1个主agent和1个从agent。
使用步骤
生成环境
terminal输入uvmgen,然后会弹出很多问题。
首先可以选择生成1完整环境或者2组件模板,组件又包含agent、driver、seq等。

后面会继续填写环境、agent名称,和各个组件名称(明明自动加缀就好),和是否添加寄存器模型等问题。
其中有一个问题是do you want create your own methods,正常选否,会使用`uvm_object_utils这些uvm宏语句,如果选是脚本会替换成sv语句。
仿真
使用uvmgen命令后会出现环境名同名的目录,就是仿真环境。在run目录下执行make comp和make run分别实现编译和仿真。
个人使用vcs版本2022,没有遇到不加-full64的问题,但因为monitor里有$finish,仿真会提前结束。

生成环境
(1)test
首先通过Makefile看到执行的tc是vrf_test,在对应文件中可以看到执行的seq是mst_seqr_sequence_library。
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
env = vrf_ral_env::type_id::create("env", this);
uvm_config_db #(uvm_object_wrapper)::set(this, "env.master_agent.mast_sqr.main_phase",
"default_sequence", mst_seqr_sequence_library::get_type());
endfunction
(2)seq
在seq文件中,可以看到2个agent的seq分别发起10次传输。
virtual task body();
repeat(10) begin
`uvm_do(req);
end
endtask
(3)driver
在driver中可以看到会调用空task,没有任何行为,需要手动需修改,monitor也类似。
task mst_drv::run_phase(uvm_phase phase);
super.run_phase(phase);
// phase.raise_objection(this,""); //Raise/drop objections in sequence file
fork
tx_driver();
join
// phase.drop_objection(this);
endtask: run_phase
task mst_drv::tx_driver();
endtask : tx_driver
总结
脚本定位还是生成模板,环境直接用比较毛坯,还需要很多手工修改,而且作为Synopsys VCS自带工具和自己的VIP也没有联动,如果真有需要感觉还不如直接用VIP的example来改,或者让豆包生成一个模板。

4011

被折叠的 条评论
为什么被折叠?



