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 连接到所有网络,也没有办法不收到此警告。
我在 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 连接到所有网络,也没有办法不收到此警告。