Origen ::参数集在$ dut重新初始化时被删除

时间:2017-08-30 21:13:28

标签: origen-sdk

我在$ 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

1 个答案:

答案 0 :(得分:0)

这里的问题是通过调用require 'some_file.rb'最终加载参数。

每当目标在内部重新加载时,Ruby会再次命中该行但不会执行任何操作,因为它知道它已经需要该文件并且有效地跳过该行。

将其更改为load 'some_file.rb'将强制它每次都执行该文件。