如何缓冲系统Verilog接口

如何缓冲系统Verilog接口,verilog,system-verilog,Verilog,System Verilog,刚刚遇到这个问题,在读了一点书之后,似乎在系统Verilog中不允许这样做,但它似乎有点迟钝,我想知道我是否错过了一些简单的解决方法 我有一个定义为if_datapath的接口。该接口确实有一些叫做sink、source和monitor的modport,我能够在模块上使用该接口而不会出现问题 但是,如果我将模块内的接口定义为nither sink、source或monitor: if_datapath #(.EW(5),.DW(256),.SW(64),.QW(32))

刚刚遇到这个问题,在读了一点书之后,似乎在系统Verilog中不允许这样做,但它似乎有点迟钝,我想知道我是否错过了一些简单的解决方法

我有一个定义为if_datapath的接口。该接口确实有一些叫做sink、source和monitor的modport,我能够在模块上使用该接口而不会出现问题

但是,如果我将模块内的接口定义为nither sink、source或monitor:

if_datapath             #(.EW(5),.DW(256),.SW(64),.QW(32))         dp_buf_0             (.clk(clk), .reset(reset));
我可以使用它在层次结构中路由接口。但如果不使用它进行路由,我会写以下内容:

always @ (posedge clk)
begin 

dp_buf_0 <= dp_in;  // Where dp_in is the same kind of 
                    //interface as dp_buf_0
end

所以如果我想注册我的整个界面,我需要把各个部分分开?告诉我这里缺少了什么。

接口和模块只是为容器中的项目创建层次化名称空间的容器。它们还提供了连接这些容器中信号的方法。接口为您提供了更多的连接方式,
modport
是一种限制访问接口内部内容的结构

接口不是数据类型,接口实例也不是变量,因此不能对变量执行相同类型的操作


但您可以将
结构定义为数据类型,然后使用该数据类型创建关联或变量。然后,您可以对导线或变量执行所有相同的操作

谢谢你的回复。这似乎是SV的疏忽。如果我们必须将out接口的每个网络逐个分配给输入接口中的相应网络,那么接口的意义何在?使用结构通常需要两个端口,而不是一个端口用于构成一个通信接口的信号束。这可以提高可读性并减少名称空间混乱。对于合成,我认为没有其他优势。
An instance name is not a legal lvalue [7.1(IEEE)].