刚刚遇到这个问题,经过一番阅读,似乎在System Verilog中不允许这样做,但它似乎有点迟钝,我想知道我是否缺少一些简单的解决方法。
我有一个定义为if_datapath的接口。 该接口确实有一些称为接收器、源和监视器的模组端口,我可以毫无问题地在模块上使用该接口。
但是,如果我将模块中的接口定义为接收器、源或监视器:
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
我收到一个错误,说:
An instance name is not a legal lvalue [7.1(IEEE)].
因此,如果我想注册整个界面,我需要分解各个部分吗? 告诉我我在这里错过了一些东西。
接口和模块只是为这些容器中的项创建分层命名空间的容器。它们还为您提供了在这些容器内建立信号连接的方法。接口为您提供了更多建立连接的方法,modport
是限制对接口内事物的访问的构造。
接口不是数据类型,接口实例也不是变量,因此您无法执行与对变量相同的操作。
但是,您可以将struct
定义为数据类型,然后使用该数据类型创建连线或变量。然后,您可以执行与对导线或变量相同的所有操作。