• systemverilog interface杂记


    随着IC设计复杂度的提高,模块间互联变得复杂,SV引入接口,代表一捆连线的结构。

    Systemverilog语法标准,新引入一个重要的数据类型:interface。

    interface主要作用有两个:一是简化模块之间的连接;二是实现类和模块之间的通信;

    接口(interface)为硬件模块的端口提供了一个标准化的封装方式。
    用interface来封装接口的信号和功能。
    interface的定义是独立于模块的,通过关键字interface和endinterface关键词来定义。
     
    注意:
    interface里面可以带时钟、断言、任务(task)、函数(function)等定义。
    一个interface 也可以有input,output或是inout端口。
    当interface例化时,只有当变量或是线网声明在一个interface的端口列表中才能通过名字或是位置来互连。
    interface是可综合的。
     
     
    一种新加的和interface有关系的构造体是Modport 。
    它提供了module的interface端口和在特定的module中控制task和function使用的方向性信息。这些端口的方向可以在module中可以看到。
    接口使用无信号的连接方式。
    Modport将接口中信号分组并指定方向。就像下图中的黑色矩形块里面一样,黑盒,我们从外面看并不关心Modport的定义,只需要考虑clk。
    Systemverilog <wbr>interface

     
    interface membus(input logic clk, output wor status);
     logic mrdy;
     logic wen;
     logic ren;
     logic [7:0] addr;
     logic [7:0] c2m_data;
     logic [7:0] m2c_data;
     
     task reply_read(input logic [7:0] data, integer delay);
       #delay;
       @(negedge clk)
       mrdy=1'b0;
       m2c_data=data;
       @(negedge clk)
       mrdy=1'b1;
    endtask
     
     //Task和function可以定义在interface中,从而允许构造更抽象级的模型
     
     task read_memory(input logic [7:0] raddr, output logic [7:0] data);
       @(posedge clk);
       ren=1'b0;
       addr=raddr;
       @(negedge mrdy);
       @(posedge clk);
       data=m2c_data;
       ren=1'b1;
     endtask
     
    modport master(output wen, ren, addr, c2m_data, input mrdy, m2c_data, status, read_memory);
    modport slave(input wen, ren, addr, c2m_data, output mrdy, m2c_data, status, reply_read);
    //控制task和function使用的方向性信息,以便在下面的module中使用
     
    endinterface
     

    总的来说,interface指明了TBDUT之间的连接信号,clocking规定了信号之间的时序关系,而modport则明确了站在不同的角度对应信号的输入输出方向。通过虚拟接口的定义将以上内容封装起来。

    接口interfacemodule,program一样,都是层次化结构,主要用来完成设计module和验证program之间的连接。interface中有两个重要的功能块clocking blockmodport

    clocking block,用来对同步信号进行采样和驱动,可以避免设计和验证的竞争。clocking block需要指定一个时间,通常是posedgenegedge,同时还可以为块中信号设置建立保持时间,在默认建立保持时间均为1ns

    如下面的例子所示:

    ...

    clocking msclk_cb @(posedge clk); //clocking block块定义

    default intput #setup output #holdtime; //输入建立时间,输出保持时间设定

    intput xxxxx;

    output xxxx;

    ...

    endclocking

    ...

    modport block,对于同一个接口,不同的事物处理器可能会有不同的视角,比如对driver而言是输出的信号,在driver_monitor看来则是输入信号,所以可以引入modport来声明端口模块。

     

    默认情况下interface的所有信号都是异步的

    可以通过clocking block定义一组信号与时钟同步

    modport定义与test的连接。

     

     

    关于interface的实例化:

    1,在moule中,可以直接实例化,

    即my_if input_if;

    2,在class中,需要使用virtual interface来实例化。

    即 class my_driver extends uvm_driver

          virtual my_if vif;

          XXXXX;

      endclass

     

     

     

  • 相关阅读:
    [每日一题]一道面试题是如何引发深层次的灵魂拷问?
    值得关注的内推:字节内推「社招,校招及提前批,实习生」,每日面试题
    《人在囧途》系列
    Jmeter(三十三)
    hive with as 语法
    红蓝紫实战攻防演习手册2020
    hfish 集群蜜罐搭建
    CTF之MISC练习
    Struts2 S2-061(CVE-2020-17530)漏洞复现
    解决Windows资源管理器呼出上下文菜单(右键菜单)导致卡死的问题
  • 原文地址:https://www.cnblogs.com/zeushuang/p/8124907.html
Copyright © 2020-2023  润新知