2

我们通过解析 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>

这是同一个引脚,只是根据其封装的不同名称。在我的 ruby​​ 流文件中,根据测试插入,我设置了包,以便在访问 dut 模型引脚时获得正确的引脚。

目前有没有办法访问相同的引脚但根据包更改其名称?如在使用上述示例时,我将如何获得这种行为?

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

我在origen 文档中看到有包范围和函数范围的属性,但似乎没有办法根据我看到的包重命名引脚,假设我正在正确阅读文档。

此功能是否需要扩展包范围的属性功能?或者有没有通过一些花哨的别名更简单的方法?

谢谢

4

2 回答 2

1

另一种选择是使用 pin 元数据散列 - 每个 pin 都有一个元数据散列,您可以在其中存储您喜欢的任何内容:

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"
于 2018-06-21T08:48:02.450 回答
1

即使这是同一个物理引脚,如果不同的名称互斥,是否需要这样建模?

例如,虽然这将被建模为 3 个单独的引脚对象,但在 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
于 2018-06-21T04:04:10.077 回答