2017-08-30 16 views
0

$ dutの初期化中に多くのテストインターフェイスパラメータを作成します。アプリは、「ロード」モードまたは「インポート」モードのモデルを採用しています。これは、第三者から多くの情報源を得るためです。パラメータについては、ソースは、天然ルビーのでかかわらず、initメソッド(ロードまたはインポート)のコードは、このように必要とされる:

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' 

ここで:ここ

send modeling_method, model_path # load_params or import_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 

は、私は「原産地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}} 

原産地は、テストインタフェースコードに遷移するときしかし、paramsははアクセスできない。

[1] pry(#<STP::Interface>)> $dut.params 
=> #<Origen::Parameters::Missing:0x002aaab22dc378 
@owner=<Model/Controller: PPEKit::Product:23456337817000/PPEKit::ProductController:23456355062960>> 

Iが、しかし、そのようなピン及びsub_blocksとして$のDUTモデルの他の部分を見ることができる。

[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>, 

モデルinitとテストフロー生成の間でいつか消去されるようです。そこで私は'on_load_target' callbackにブレークポイントを設定し、ブレークポイントに達するたびに異なる結果を見ました。最初の休憩では、パラームはそこにあり、それ以降の休憩ではパラームはなかった。私はここで2つの問題があるかもしれないと信じて

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)パラメータセットのハッシュの排出を文書化し、これは#1の問題が原因です(パラメータセット初期化コード

パラメータ定義中に$ dutインスタンスとして定義されているパラメータ@ownerと関係があり、パラメータ定義中に@ownerが再定義されていると考えられますそれ以降のパラメータのクエリで$ dut ProductControllerインスタンスとしてインジェクトされます。

THX

+1

最初のコードスニペット(Origen.top_level.define_params ...)がどこで/どのように呼び出されていますか? – Ginty

答えて

0

ここでの問題は、パラメータが最終的require 'some_file.rb'を呼び出すことによって読み込まなっているということです。

ターゲットが内部的に再ロードされるたびに、Rubyはその行を再びヒットしますが、既にそのファイルを必要としていて、その行を効果的にスキップしていることを知っているので何もしません。

load 'some_file.rb'に変更すると、毎回ファイルが実行されます。

+0

私は変更を行いましたが、引き続き同じ動作が見られます。モデルの2番目の初期化で、パラメータが再び欠落します。 –

+0

Origen.top_levelがターゲット再ロード中にその時点で以前のDUTインスタンスを指し示しているという副次的問題があるのだろうかと思います。 – Ginty

+0

私はそれを標準のlibディレクトリにプルすることで動作させることができました。助けてくれてありがとう! –

関連する問題