将参数传递给非硅子块/帮助者的约定

时间:2017-10-10 14:27:42

标签: origen-sdk

很抱歉,如果标题有点令人困惑,但Origen为设置不一定是硅模型的子块提供的选项/约定是什么,或者只是一般帮助?

例如,我有一个扫描助手插件,可引导用户创建扫描测试程序。我想在顶级应用中添加选项/自定义列表。有几种方法可以做到这一点:

  1. 我可以添加一个attr_readers /方法列表。我认为这看起来有点丑陋,并且在其他任何东西都没有使用的顶层添加了一堆东西,它会炸掉$ dut.methods。

  2. 我可以使用此处定义的参数:http://origen-sdk.org/origen/guides/models/parameters/并在扫描测试器应用中调用它们。但是看一下这些指南,我认为这不是理想的用例。它看起来更像上下文切换,但可能只是示例用例。

  3. 我可以在顶层添加一个scan_tester.setup方法。这似乎是不必要的,因为它基本上做与#2相同的事情,但需要一个'设置'要调用的方法。是的,它只有1行,但是如果你搞砸了或者忘记添加那行,那么你可以通过#2避免一些调试(如果扫描参数不是,我可以打印警告)提供帮助警告错别字等。)

  4. 我可以将其设置为子块(目前我是如何得到它的),但这并不合适。扫描不是硅模型,因此基地址是无用的,但是需要。它没有登记册等。

  5. 然后还有其他' Ruby'我可以做的事情(通过on_create设置,使用全局变量等)但这些似乎都没有上述任何一个选项出于某种原因(主要是,我需要更多设置而不是使用任何现有选项)

    其中任何一个都可行。但从传统的角度来看,我的扫描测试仪设置应该朝哪个方向发展?还有其他选择我没有考虑过吗?我倾向于选择#2,因为它看起来最干净。

    由于

2 个答案:

答案 0 :(得分:2)

这是一个非常好的问题。

实际上还有两个选择:

  1. 从插件添加应用程序配置参数:http://origen-sdk.org/origen/release_notes/#v0_7_24

  2. 定义JTAG和其他早期插件使用的常量:http://origen-sdk.org/jtag/#How_To_Use

  3. 我认为#2正在以一种原本不打算使用的方式使用参数,也许它可以工作但我只是无法想象它。

    我不太喜欢#5或#6,因为它们提供应用程序级别和类级别配置,这有时候是你想要的,但是现在我经常看到(DUT)实例需要更多 - 级别配置。

    所以,我在这里的最佳答案是我不知道,但你提到我们需要有一个官方API或至少有一个推荐的好点。

    我认为如果你能想到更好的东西,你应该愿意为Origen添加一些新东西。

    正如我写这篇文章一样,我认为#5也会支持实例级配置,虽然有点啰嗦:

    def initialize(options = {})
      Origen.app.config.scan_chain_length = 6
    end
    

答案 1 :(得分:1)

我的评论不会保留其格式,所以在这里它看起来更好:

@Ginty

您如何看待'组件'API。例如,我们可以:

# components.rb 
component(:scan, TIPScan::ScanTester, 
    # options
    wgl_dir: ..., # defaults to Origen.app.root/pattern/wgl
    custom_sort: proc do {|wgl_name| ...},
) 

# then we can do things like: 
$dut.scan #=> TIPScan instance 
$dut.component(:scan) #=> same as above 
$dut.components #=> [TIPScan instance, ...] 
$dut.has_component(:scan) #=> true etc. 

几乎只是一个用于处理这些问题的精简子块类。我认为我们的IAR / C编译器甚至CATI都可以从中受益,并使设置更清晰,更可定制。