2017-08-30 49 views
0

在$ dut初始化過程中,我創建了許多測試接口參數。該應用以「加載」或「導入」模式進入模型,因爲我們從第三方獲得許多信息來源。爲參數,源是本地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 

我可以命令「奧利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>> 

我可以,不過,見$ 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' 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>> 

我相信有可能是2個問題在這裏:

1)測試流程生成過程中的$ DUT的重複初始化,記錄here

2)參數設置散列的排空,這是由於問題#1(和一些參數集初始化代碼

我相信它參數@owner被定義爲參數定義中的$ dut實例和@owner被重新定義在隨後的參數查詢中被定義爲$ dut ProductController實例。

THX

+1

你能提供在哪裏/如何第一代碼片段(Origen.top_level.define_params ...)被調用的更多信息? – Ginty

回答

0

這裏的問題是,這些參數最終得到通過調用require 'some_file.rb'加載。

只要目標在內部重新加載,紅寶石再次打線,但因爲它知道,它已經要求該文件,並有效地跳過該行不會做任何事情。

將其更改爲load 'some_file.rb'將強制它每次都執行該文件。

+0

我做了改變,但仍看到相同的行爲。在模型的第二次初始化時,參數再次丟失。 –

+0

我不知道是否有一個次要的問題那麼Origen.top_level仍然朝着在該點之前的DUT實例目標重新加載過程中指向。 – Ginty

+0

我能夠通過將其拉入標準lib目錄中來使其工作。謝謝您的幫助! –