2

抱歉,如果标题有点令人困惑,但是 Origen 提供哪些选项/约定来设置不一定是硅模型或只是一般助手的子块?

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

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

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

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

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

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

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

谢谢

4

2 回答 2

2

这是一个非常好的问题。

实际上还有另外两个选择:

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

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

我认为#2 使用参数的方式并非最初的预期,也许它可以工作,但我无法想象它。

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

所以,我在这里最好的答案是我不知道,但你谈到了一个很好的观点,即我们需要一个官方 API 或至少对此提出建议。

如果你能想到更好的东西,我认为你应该对为此向 Origen 添加新东西的可能性持开放态度。

在我写这篇文章的时候,我想#5 也会支持实例级配置,尽管有点啰嗦:

def initialize(options = {})
  Origen.app.config.scan_chain_length = 6
end
于 2017-10-10T17:29:23.510 回答
1

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

@金蒂

您如何看待“组件”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 都可以从中受益,并使设置更清晰、更可定制。

于 2017-10-10T21:14:05.517 回答