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