很抱歉,如果标题有点令人困惑,但Origen为设置不一定是硅模型的子块提供的选项/约定是什么,或者只是一般帮助?
例如,我有一个扫描助手插件,可引导用户创建扫描测试程序。我想在顶级应用中添加选项/自定义列表。有几种方法可以做到这一点:
我可以添加一个attr_readers /方法列表。我认为这看起来有点丑陋,并且在其他任何东西都没有使用的顶层添加了一堆东西,它会炸掉$ dut.methods。
我可以使用此处定义的参数:http://origen-sdk.org/origen/guides/models/parameters/并在扫描测试器应用中调用它们。但是看一下这些指南,我认为这不是理想的用例。它看起来更像上下文切换,但可能只是示例用例。
我可以在顶层添加一个scan_tester.setup方法。这似乎是不必要的,因为它基本上做与#2相同的事情,但需要一个'设置'要调用的方法。是的,它只有1行,但是如果你搞砸了或者忘记添加那行,那么你可以通过#2避免一些调试(如果扫描参数不是,我可以打印警告)提供帮助警告错别字等。)
我可以将其设置为子块(目前我是如何得到它的),但这并不合适。扫描不是硅模型,因此基地址是无用的,但是需要。它没有登记册等。
然后还有其他' Ruby'我可以做的事情(通过on_create设置,使用全局变量等)但这些似乎都没有上述任何一个选项出于某种原因(主要是,我需要更多设置而不是使用任何现有选项)
其中任何一个都可行。但从传统的角度来看,我的扫描测试仪设置应该朝哪个方向发展?还有其他选择我没有考虑过吗?我倾向于选择#2,因为它看起来最干净。
由于
答案 0 :(得分:2)
这是一个非常好的问题。
实际上还有两个选择:
从插件添加应用程序配置参数:http://origen-sdk.org/origen/release_notes/#v0_7_24
定义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
答案 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都可以从中受益,并使设置更清晰,更可定制。