如何根据封装来处理不同的引脚名称

时间:2018-06-20 22:01:49

标签: origen-sdk

我们将通过解析xml设计文档将引脚导入dut模型,该文档根据封装列出了不同的引脚名称:

  <pin name="mypin" direction="input">
   <package_list>
    <package package="pkg_a" name="mypin_a" location="XX" direction="input"/>
    <package package="pkg_b" name="mypin_b" location="XX" direction="input"/>
   </package_list>
  </pin>

这是相同的引脚,只是不同的名称,取决于其封装。 在我的红宝石流文件中,根据测试插入,我设置了包装,以便在访问dut模型的针脚时获得正确的针脚。

当前是否有一种方法可以访问相同的引脚,但根据封装而更改其名称?就像在使用上面的示例时一样,我将如何获得这种行为?

Package     Pin Name
--------------------
nil         mypin
pkg_a       mypin_a
pkg_b       mypin_b

我在origen documentation中看到有程序包作用域和函数作用域属性,但是似乎没有一种方法可以根据我看到的程序包重命名引脚,假设我正确阅读文档。

此功能是否需要扩展包范围的属性功能?还是通过花式别名有更简单的方法?

谢谢

2 个答案:

答案 0 :(得分:1)

即使这是相同的物理引脚,但是如果不同的名称互斥,是否需要以这种方式建模?

例如虽然这将被建模为3个单独的pin对象,但是3个封装选项中的每一个都只能使用其中的一个,因此它的行为应像您想要的那样:

add_package :none
add_package :pkg_a
add_package :pkg_b

add_pin :mypin,   package: :none,  direction: :input
add_pin :mypin_a, package: :pkg_a, direction: :input
add_pin :mypin_b, package: :pkg_b, direction: :input

我想您可能想要的是能够在每个包装范围内调用dut.pin(:mypin)并使其返回具有当前包装正确ID的引脚,但是我找不到方法得到这样的别名才能正常工作。 也许我们需要考虑将这种包范围的别名添加到Origen中。

与此同时,也许您可​​以在应用程序中使用辅助方法?

def find_pin(id)
  dut.pins("#{id}_#{dut.package.id.to_s.sub('pkg_', '')")
end

dut.package = :pkg_a

pin = find_pin(:mypin)
pin.id    # => :mypin_a

dut.package = :pkg_b

pin = find_pin(:mypin)
pin.id    # => :mypin_b

答案 1 :(得分:1)

另一种选择是使用引脚元数据哈希-每个引脚都有一个元数据哈希,您可以在其中存储所需的任何内容:

add_package :pkg_a
add_package :pkg_b

add_pin :mypin, package: :all, direction: :input,
                meta: { names: { pkg_a: "mypin_a", pkg_b: "mypin_b"}}

然后,您就定义了单个引脚,并且可以在应用程序代码中很容易地检索特定于封装的名称:

origen(main):002:0> dut.package = :pkg_a
=> :pkg_a
origen(main):007:0> dut.pin(:mypin).meta[:names][dut.package.id]
=> "mypin_a"
origen(main):008:0> dut.package = :pkg_b
=> :pkg_b
origen(main):009:0> dut.pin(:mypin).meta[:names][dut.package.id]
=> "mypin_b"