我们将通过解析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中看到有程序包作用域和函数作用域属性,但是似乎没有一种方法可以根据我看到的程序包重命名引脚,假设我正确阅读文档。
此功能是否需要扩展包范围的属性功能?还是通过花式别名有更简单的方法?
谢谢
答案 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"