【问题标题】:How to buffer a System Verilog interface如何缓冲系统 Verilog 接口
【发布时间】:2017-03-23 21:29:43
【问题描述】:

刚刚遇到这个问题,在阅读了一些内容之后,似乎 System Verilog 中不允许这样做,但它似乎有点迟钝,我想知道我是否错过了一些简单的解决方法。

我有一个定义为 if_datapath 的接口。该接口确实有一些名为 sink、source 和 monitor 的 modport,我可以毫无问题地在模块上使用该接口。

但是,如果我将模块内的接口定义为接收器、源或监视器:

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)].

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

【问题讨论】:

    标签: verilog system-verilog


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。这似乎是 SV 的疏忽。如果我们必须将输出接口的每个网络一一分配给输入接口中的相应网络,那么接口的意义何在?
    • 对于构成一个通信接口的信号束,使用结构通常需要两个端口而不是一个端口。可以说,这提高了可读性并减少了命名空间的混乱。对于综合,我相信没有其他优势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多