i在$ dut初始化期间创建许多测试接口参数。当我们从第三方获得许多信息来源时,该应用程序以"加载"或"导入"模式插入模型。对于参数,源是本机ruby,因此无论启动方法(加载或导入)如何,代码是这样需要的:
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
我可以在执行命令'Origen P myflowfile.rb'的$ dut初始化结束时看到它们:
[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模型的其他部分,例如引脚和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"回调中放了一个断点,每次点击点击时都会看到不同的结果。在第一次休息时,参数就在那里,随后的休息时间没有。
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的重复初始化,此处记录
2)参数集哈希的清空,这是由于问题1(以及某些参数集初始化代码
我相信,这与参数定义期间定义为$ dut实例的参数 @所有者有关,并且 @所有者在随后的参数查询中被重新定义为$ dut ProductController实例。
thx
这里的问题是参数最终通过调用require 'some_file.rb'
。
每当内部重新加载目标时,Ruby都会再次撞到线路,但没有做任何事情,因为它知道它已经需要该文件并有效跳过该行。
将其更改为load 'some_file.rb'
将迫使它每次执行文件。