origen ::参数集在$ dut re-NIT上被删除



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'将迫使它每次执行文件。

最新更新