我在$ dut初始化期间创建了许多测试接口参数。应用程序在“加载”模型中进入模型。或者' import'模式,因为我们从第三方获得了许多信息来源。对于参数,源是本机Ruby,因此无论init方法(加载还是导入)都需要代码,如下所示:
send modeling_method, model_path # load_params or import_params
以下是该方法:
def load_params(path)
Origen.log.info("PPEKit: Modeling parameters from #{path}")
require path.to_s.chomp('.rb')
Origen.log.info("PPEKit: Modeling of parameters complete")
end
alias_method 'import_params', 'load_params'
以下是上述所需文件的内容:
Origen.top_level.define_params :default do |params|
params.bist.override = 1
params.bist.lev_equ_set = 1
params.bist.lev_spec_set = 1
params.bist.levset = 1
params.bist.seqlbl = 'mbist_cpu_hr_vnom_burst'
params.bist.override_tim_spec_set = 'bist_25Mhz'
params.bist.override_timset = '1,1,1,1,1,1,1,1'
params.bist.site_control = 'parallel:'
params.bist.site_match = 2
end
我可以在执行命令期间在我的$ dut初始化结束时看到它们orcome p myflowfile.rb':
[5] pry(#<PPEKit::Product>)> $dut.params
=> {:bist=>
{:override=>1,
:lev_equ_set=>1,
:lev_spec_set=>1,
:levset=>1,
:seqlbl=>"mbist_cpu_hr_vnom_burst",
:override_tim_spec_set=>"bist_25Mhz",
:override_timset=>"1,1,1,1,1,1,1,1",
:site_control=>"parallel:",
:site_match=>2}}
但是,当Origen转换为测试接口代码时,无法访问参数:
[1] pry(#<STP::Interface>)> $dut.params
=> #<Origen::Parameters::Missing:0x002aaab22dc378
@owner=<Model/Controller: PPEKit::Product:23456337817000/PPEKit::ProductController:23456355062960>>
然而,我可以看到$ dut模型的其他部分,例如pin和sub_blocks:
[2] pry(#<STP::Interface>)> $dut.sub_blocks
=> {"block0"=><Model: PPEKit::Product::Block0:23456336916760>,
"block1"=><Model: PPEKit::Product::Block1:23456336907380>,
"block2"=><Model: PPEKit::Product::Block2:23456336841100>,
它们似乎在模型初始化和测试流生成之间的某个时间被删除。所以我在'on_load_target' callback中放了一个断点,每次遇到断点时都会看到不同的结果。在第一次休息时,参数在那里,在随后的休息时间他们没有。
75: def on_load_target
=> 76: binding.pry
77: to_origen(path: vendor_path.to_s, instantiate_level: :sub_block) if @import
78: end
[1] pry(#<PPEKit::Product>)> $dut.params
=> {:bist=>
{:override=>1,
:lev_equ_set=>1,
:lev_spec_set=>1,
:levset=>1,
:seqlbl=>"mbist_ccx_hr_vnom_burst",
:override_tim_spec_set=>"bist_25Mhz",
:override_timset=>"1,1,1,1,1,1,1,1",
:site_control=>"parallel:",
:site_match=>2}}
[2] pry(#<PPEKit::Product>)>
Frame number: 0/25
From: /users/user/origen/ppekit/lib/ppekit/product.rb @ line 76 PPEKit::Product#on_load_target:
75: def on_load_target
=> 76: binding.pry
77: to_origen(path: vendor_path.to_s, instantiate_level: :sub_block) if @import
78: end
[1] pry(#<PPEKit::Product>)> $dut.params
=> #<Origen::Parameters::Missing:0x002aaab9f3ad48
@owner=<Model/Controller: PPEKit::Product:23456377300040/PPEKit::ProductController:23456379739240>>
我相信这里可能有两个问题:
1)在测试流生成期间重复初始化$ dut,记录为here
2)清空参数集hash,这是由于问题#1(以及一些参数集初始化代码
)我认为它与参数定义期间定义为$ dut实例的参数@owner有关,而@owner在后续参数查询中被重新定义为$ dut ProductController实例。
thx
答案 0 :(得分:0)
这里的问题是通过调用require 'some_file.rb'
最终加载参数。
每当目标在内部重新加载时,Ruby会再次命中该行但不会执行任何操作,因为它知道它已经需要该文件并且有效地跳过该行。
将其更改为load 'some_file.rb'
将强制它每次都执行该文件。