Quartus - 综合接口导致悬挂网

Quartus - synthesizing interfaces resulting in dangling nets

我在 Quartus 20.1 中有如下 modports 的基本接口:

interface if_memory (
);

logic valid;
logic strobe;
logic wren;
logic [31:0] address;


modport client (
input valid,
output strobe, wren, address
);

modport host (
output valid,
input strobe, wren, address
);

endinterface

当我合成这些模块之间连接的接口时,我收到以下警告:

Warning (12158): Entity "if_memory" contains only dangling pins

我使用以下基本分配连接这些接口

if_memory if_memory();
assign some_strobe = if_memory.strobe;
assign some_wren = if_memory.wren;
assign some_address = if_memory.address;

与some_block使用接口:

some_block some_block (
...
.if_memory(if_memory.client),
...
);

和some_block一样

module some_block (

..
.
// memory interface
if_memory if_memory,
...
);

我也试过 if_memory.client 作为端口声明,并传入 if_memory.

这是怎么回事?唯一没有这个悬空问题的接口是时钟接口。

请注意,我上面的内容与 Intel 接口示例相匹配 - 是否缺少某些设置?

当我将接口更改为端口时 - 设计在芯片上按预期工作。

这是细化行为的字面结果。当行

if_memory if_memory();

已详细说明,它没有考虑上下文 什么 逻辑网络在该层级或其他层级连接到什么。

如果声明中包含端口,例如:

if_memory if_memory(.clk(clk));

此警告将消失,因为将连接默认网络。显然,quartus 汇编程序会在稍后的运行时构建 modports。

虽然这是 'just how quartus works',但这不是一个有用的警告,并且实际上不包含在此上下文中的有用信息。警告之前是详细说明步骤。在 system verilog 中,通常有仅连接网络的接口,在这种情况下,即使所有网络都连接在较低级别的模块中,即使 modports 连接到所有网络,也没有办法不收到此警告。