如何缓冲System Verilog接口

时间:2017-03-23 21:29:44

标签: verilog system-verilog

刚刚遇到这个问题,经过一些阅读后,系统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)].

所以,如果我想注册我的整个界面,我需要打破各个部分?告诉我,我在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:3)

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

接口不是数据类型,接口实例不是变量,因此您无法执行与变量相同的操作。

但您可以将struct定义为数据类型,然后使用该数据类型创建连线或变量。然后,您可以在线路或变量上执行所有相同的操作。