Origen sdk 子块基地址覆盖?

Origen sdk 子块基地址覆盖?,origen-sdk,Origen Sdk,是否有一种方法可以将不同的基址分配给子块的子块 我有一个案例,我有这样的东西: dut.rb: sub_block ipBlock base_address: 0x11000000 所以这个级别的寄存器都以0x110000000开头 但ipBlock也有自己的子块: ipblock.rb: sub_block subIPBlock base_address: 0x0 由于接口差异,其自身的寄存器需要0基址 不幸的是,当我向子ipBlock添加寄存器时,它们仍然具有顶级ip

是否有一种方法可以将不同的基址分配给子块的子块

我有一个案例,我有这样的东西:

dut.rb:

    sub_block ipBlock base_address: 0x11000000
所以这个级别的寄存器都以0x110000000开头

但ipBlock也有自己的子块:

ipblock.rb:

    sub_block subIPBlock base_address: 0x0
由于接口差异,其自身的寄存器需要0基址

不幸的是,当我向子ipBlock添加寄存器时,它们仍然具有顶级ipBlock的基址:

是否有一种方法可以轻松地重新分配子块的子块的基址?

我相信您可以使用它来实现您想要的

sub_block :subx2, class_name: "SubX", base_address: { ips: 0x2000_0000, ahb: 0x3000_0000 }
dut.subx1.reg1.address(domain: :ips)  # => 0x2000_0200
dut.subx1.reg1.address(domain: :ahb)  # => 0x3000_0200

关于

除了另一个答案外,还要注意,
reg.offset
将返回块相对地址,这听起来像是您想要的

当给出
:address
选项时,所有Origen驱动程序都应该覆盖寄存器的地址,因此在您的型号中,您可以实现读/写寄存器方法来添加
:address
选项:

def write_寄存器(reg,options={})
如果您的\u标准\u使用\u本地\u地址
选项[:地址]=reg.offset
终止
dut.write_寄存器(寄存器、选项)#原始写入的移交
终止
还可以通过实现以下方法强制/覆盖模型中的基址:

def reg_base_地址(选项={})
0
终止
最后,请注意,当根据@architect of info的答案使用域时,您可以在实例化父子块时定义两个域,然后在实例化该子块的子块时,您可以选择将其分配给哪些可用域

参见其他答案中链接到的文档中的此示例:

$dut.subx2.suby1.reg1.address#=>0x2000_0300
$dut.subx2.suby2.reg1.address#=>0x3000_0300

很酷,谢谢。有没有一种方法可以指示sub_块的默认域?理想情况下,我希望较高级别的sub_块使用一个域,而较低级别的sub_块使用另一个域——默认情况下。@d.Hadad我目前不这么认为。
sub_block :subx2, class_name: "SubX", base_address: { ips: 0x2000_0000, ahb: 0x3000_0000 }
dut.subx1.reg1.address(domain: :ips)  # => 0x2000_0200
dut.subx1.reg1.address(domain: :ahb)  # => 0x3000_0200