首页 > 其他分享 >interface--IEEE sv std. 25 interfaces

interface--IEEE sv std. 25 interfaces

时间:2022-12-15 15:11:07浏览次数:38  
标签:std 25 modport gnt -- module logic interface input

1.interface作用

(1) 简化port connections,简化RTL coding;

(2) 功能覆盖率的收集;

(3) 协议检查与断言;

2.interface语法

(1) interface就是一组nets或者variables;

(2) interface与类比较相像,interface可以有参数,常量,变量,function以及task;除此之外,interface还可以包含进程,比如initial块或always块;

(3) interface可以在module内部声明与例化,但module既不能在interface内声明,也不能在interface内例化;

(4) interface内的nets或variable默认为ref或inout类型;

2.1 简单的interface (没有端口)

interface identifier;
    ...
    interface items
    ...
endinterface : identifier
interface simple_bus;
            
    logic req, gnt;
    logic [7:0] addr,data;
    logic [1:0] mode;
    logic start,rdy;

endinterface: simple_bus

module memMode(simple_bus a, input logic clk);
    
    logic avail;
    always @(posedge clk) a.gnt<=a.req & avail;

endmodule

module cpuMod(simple_bus b, input logic clk);
    ...
endmodule

module top;
    
    logic clk=0;
    simple_bus sb_intf();
    memMod mem(sb_intf,clk);
    cpuMode cpu(.b(sb_intf),.clk(clk));

endmodule

2.2 有端口的interface

(1) 简单interface的缺点在于interface内声明的nets以及variables只能连接向具有相同名字nets以及variables的端口;

interface i1(input a, output b, inout c);
    wire d;
endinterface

3.interface modports

(1) modports可以限制interface access;

(2) 声明modports用到的名字都需要在相同的interface里面声明过;

interface i2;
    wire a, b, c, d;
    modport master (input a, b, output c, d);
    modport slave (output a, b, input c, d);
endinterface

module m (i2.master i);
    ...
endmodule

module s (i2.slave i);
    ...
endmodule

module top;
    i2 i();
    m u1(.i(i));
    s u2(.i(i));
endmodule
另外一种用法:
module m (i2 i);
    ...
endmodule

module s(i2 i);
    ...
endmodule

module top;
    i2 i();
    m u1(.i(i.master));
    s  u2(.i(i.slave));
endmodule
modport示例:
interface simple_bus(input logic clk);
    logic req, gnt;
    logic [7:0] addr,data;
    logic [1:0] mode;
    logic start, rdy;
    
    modport slave(input req, addr, mode, start, clk,
                            output gnt, rdy,
                            ref data);

    modport master(input gnt, rdy, clk,
                            output req, addr, mode, start,
                            ref data);
endinterface: simple_bus

module memMod(simple_bus.slave a);
    logic avail;
    
    always @(posedge a.clk) 
        a.gnt<=a.req & avail;
endmodule

module cpuMod(simple_bus.master b);
    ...
endmodule

module top;
    logic clk=0;
    simple_bus sb_intf(clk);
    initial repeat(10) #10 clk++;
    
    memMod mem(.a(sb_intf));
    cpuMod   cpu(.b(sb_intf));
endmodule

3.1 clocking blocks & modports

interface A_Bus(input logic clk);
    wire req, gnt;
    wire [7:0] addr,data;
    
    clocking sb @(posedge clk);
        input gnt;
        output req, addr;
        inout data;

        property p1;
            req ##[1:3] gnt;
        endproperty
    endclocking

    //Device under test modport
    modport DUT (input clk, req, addr, output gnt, inout data);
    //synchronous testbench modport
    modport STB (clocking sb);
    //asynchronous testbench modport
    modport TB (input gnt, output req, addr, inout data);

endinterface
module dev1(A_Bus.DUT b);
    ...
endmodule

module dev2(A_Bus.DUT b);
    ...
endmodule

program T(A_Bus.STB b1, A_Bus.STB b2);

    assert property(b1.sb.p1);
    
    initial begin
        b1.sb.req<=1;
        wait(b1.sb.gnt==1);
        ...
        b1.sb.req<=0;
        b2.sb.req<=1;
        wait(b2.sb.gnt==1);
        ...
        b2.sb.req<=0;
    end        
endprogram

module top;

    logic clk;
    A_Bus b1(clk);
    A_Bus b2(clk);
    
    dev1 d1(b1);
    dev2 d2(b2);

    T tb(b1,b2);
endmodule            

4.interface methods

 

5.参数化interface

6.virtual interface

7.访问interface objects

标签:std,25,modport,gnt,--,module,logic,interface,input
From: https://www.cnblogs.com/csjt/p/16982312.html

相关文章

  • SVN的配置和使用 整合VS10
    1.配置SVN服务器 1.1安装subversion(跨平台版本管理服务器) 1.2建立仓库reposity   命令:svnadmincreated:/reposity   利用Tortoise图形工具,创建仓......
  • html:自定义网页右键菜单
    <divid="menu"><divclass="menu-item"data-id="1">功能1</div><divclass="menu-item"data-i......
  • OpenMLDB 贡献者任务第六期 | 暖冬时节,活力继续
    十二月,冬天已经来临,风里裹挟着寒意。时光流转,十二月或许是一年中数着遗憾的结尾;四季轮回,现在也可能是收获美好与崭新开始的节点。在2022年的最后一个月,开源机器学习数据库......
  • https代理服务器(三)实践
         pythonspringbootproxy noncaopenssl,keytool  无需,proxy动态签发证书,必须有CA根证书顶在前面 camkcert通过通过 mac显示c......
  • VMware虚拟机NAT模式端口转发
    作用虚拟机网络选择NAT方式,启用端口转发,可以实现宿主机器和虚拟机的端口映射 如果我们把映射虚拟机的端口设为22,就可以通过宿主机器ip加端口直接远程虚拟机了 操......
  • Shell 标准输入和输出
    无论是要交给程序处理的数据,还是控制脚本的简单命令,都少不了输入和输出。程序要做的第一件事就是处理如同一阴一阳的“输入与输出”。1、从文件获取输入当我们希望向文件......
  • Intelli idea 常用快捷键汇总
    Tonavigatetotheimplementation(s)ofanabstractmethod,positionthecaretatitsusageoritsnameinthedeclarationandpressCtrl+Alt+B. UseCtrl+Jto......
  • HOWTO: 为GitHub for Windows指定代理服务器(转)
     Ifthecommandlinewayofconfiguringyourproxyserverdoesn'twork,youcanprobablyjustedit​​.gitconfig​​(intherootofyourprofile,whichmayh......
  • m基于matlab的TDSCDMA系统性能仿真
    1.算法概述        TD-SCDMA的中文含义为时分复用同步码分多址接入,是由中国第一次提出、在无线传输技术(RTT)的基础上完成并已正式成为被ITU接纳的国际移动通信标......
  • 框架第六课---ORM执行SQL语句,神奇的双下划线查询,ORM外键字段的创建,外键字段数据的增删
    昨日内容回顾模板语法之标签1.if判断2.for循环3.with语法ps:针对容器类型的数据获取内部数据值统一采用句点符自定义相关功能'''1.在应用下创建一个templatet......