是否可以访问加密模块内未加密模块实例中的信号?
Is it possible to access signal in unencrypted module instance inside an encrypted module?
加密的 DUT RTL 实例化了几个未加密模块的实例。
我完全可以看到未加密的模块。
在测试台中,我想监控非加密模块中的特定信号并进行 运行-时间检查。它应该是这样的:
// in top level tb
assign wire_a = encrypted_DUT.<...>.non_encrypted_inst.wire_a; // but we don't know exact path
// ... and then do some check on wire_a
上面那行是不可能的,因为我从来不知道确切的路径。
还有别的办法吗?或者有可能吗?
这是不可能的。对未加密的较低级别模块具有可见性是一个安全漏洞。想象一下由未加密的库单元组成的简单加密网表。如果您可以看到所有单元的路径,则可以轻松推断出网表。
加密 DUT 的提供者必须向他们愿意允许访问的实例开放 RTL。
如果加密较弱,将$display("%m")
放在未加密的子模块中,将在模拟中显示路径。
如果这不起作用,有一个解决方法。您可以让子模块分配给顶层信号,而不是让顶层探针进入子模块。
// un-encrypted sub-module
assign $root.top_tb.wire_a = wire_a; //Note: $root is SysteVerilog only
//assign top_tb.wire_a = wire_a; //Universal but follows 'upwards name referencing'
IEEE1364-2001 (Verilog) § 12.5 向上名称引用
IEEE1800-2012 (SysteVerilog) § 23.8 向上引用名称
加密的 DUT RTL 实例化了几个未加密模块的实例。 我完全可以看到未加密的模块。
在测试台中,我想监控非加密模块中的特定信号并进行 运行-时间检查。它应该是这样的:
// in top level tb
assign wire_a = encrypted_DUT.<...>.non_encrypted_inst.wire_a; // but we don't know exact path
// ... and then do some check on wire_a
上面那行是不可能的,因为我从来不知道确切的路径。
还有别的办法吗?或者有可能吗?
这是不可能的。对未加密的较低级别模块具有可见性是一个安全漏洞。想象一下由未加密的库单元组成的简单加密网表。如果您可以看到所有单元的路径,则可以轻松推断出网表。
加密 DUT 的提供者必须向他们愿意允许访问的实例开放 RTL。
如果加密较弱,将$display("%m")
放在未加密的子模块中,将在模拟中显示路径。
如果这不起作用,有一个解决方法。您可以让子模块分配给顶层信号,而不是让顶层探针进入子模块。
// un-encrypted sub-module
assign $root.top_tb.wire_a = wire_a; //Note: $root is SysteVerilog only
//assign top_tb.wire_a = wire_a; //Universal but follows 'upwards name referencing'
IEEE1364-2001 (Verilog) § 12.5 向上名称引用
IEEE1800-2012 (SysteVerilog) § 23.8 向上引用名称