【发布时间】:2018-04-12 01:30:45
【问题描述】:
我可以使用嵌套接口代替 modport 吗?
这样做的目的是实现许多不同模块的大规模互连,同时利用接口来简化连接。我不喜欢使用泛型接口——它们在源代码中很难遵循。
如果我有一个被许多模块使用的通用模块(例如,reset_synchronizer),那么我可以在每个接口中定义一个 modport 来定义该模块的信号,例如:
interface xyz(input clk, input arst);
logic srst;
modport reset_synchronizer_mp (input clk, input arst, output srst);
endinterface
我可以在需要同步重置的每个界面中定义它。但是当我需要更改 reset_synchronizer 模块时,也许是为了传递一个启用,我需要更新接口端口(添加启用信号),并更新所有为 reset_synchronizer 创建 modport 的接口中的每个 modport。
interface xyz(input clk, input enable, input arst);
logic srst;
modport reset_synchronizer_mp (input clk, input enable, input arst, output srst);
endinterface
如果我使用嵌套接口 (reset_synchronizer_intf) 而不是 modport,我不能只在主接口中执行此操作吗:
interface xyz(input clk, input arst);
logic srst;
reset_synchronizer_intf reset_synchronizer_mp (clk, arst, srst);
endinterface
为了简化这一点(假设信号名称匹配):
interface xyz(input clk, input arst);
logic srst
reset_synchronizer_intf reset_synchronizer_mp (.*);
endinterface
要添加启用,我只需更新主 reset_synchronizer.sv(定义模块和接口的地方)并更新所有接口,但仅在端口列表或信号声明中:
interface xyz(input clk, input enable, input arst);
reset_synchronizer_intf reset_synchronizer_mp (.*);
endinterface
当我正在寻找的信号存在于主界面中时,这变得更加有吸引力,但我现在想将它们带入一些通用模块中。例如,通常只有 srst 的电源门控模块,但现在我也想传入 rst。我可以在电源门控模块的接口级别而不是在每个接口内部进行更改。
【问题讨论】:
标签: system-verilog