Home Articles

如何缓冲System Verilog接口

Asked
Viewed 1096 times
1

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

  • 3

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

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

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

Related