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