systemverilog学习(2)interface

本节主要内容:testbench与design的连接,verilog连接testbench与design的方法,SV的interface,stimulus timing,clocking blocks,timing region,program block。(感觉很抽象)

一:design与testbench的连接

  

1:连接符号

  .*

  .name(wire_name)  :verilog中使用方法

  interface

2:verilog连接方式

  

3:sv连接方式

  (1).*   通配符,对相同名字自动匹配

    要求:有相同的名字,位宽相同

    例如:

     

   (2).name

     相同名字与相同位宽,可以直接使用.name;括号内可省略

   (3)interface

    当名字不同时,上述方法不方便;而且若使用verilog方法,每个端口都要写,在复杂设计中很冗余;在sv里我们引入interface的概念

二:interface

  

 1:定义

  新的端口类型,将多种信号group一起,信息封装,重用。声明一次即可

2:使用

  

  在interface里面声明信号,clk是外部输入的信号,内部信号为logic信号,为异步信号;

  在top层内例化,如上图,现例化arbif这个interface,在使用该interface;

  arbif.clk可访问里面的clk的信号;

3:interface可用于设计

4:interface-modport

  提供了另外一种interface信号,是modport的简写;一个interface里面可有多种modport的定义

  例如:modport TEST (output request,reset,

             input grant,clk );

   

  设计中使用modport:module arb(arb_if.DUV arbif);

5:总结

 可以包含function;不仅仅是线的集合;在系统集成上较方便;可加上协议检查;

 不包含hierarchy结构(不能再interface里面声明一个module)

三:stimulus Timing & Clocking Blocks

  在design与testbench之间易产生竞争冒险的情况,例如不满足Tsetup的要求;可以通过提前驱动信号,滞后采样信号(同步)来避免。

1:在interface里面建模,在适当时间驱动,采样信号;驱动信号不能太晚,采样信号不能太早;

  testbench与design要分离开;

  一般驱动在时钟沿前,采样在时钟沿后;

2:Clocking Block模块

  为避免竞争冒险,interface里面使用clocking block模块;

  **cb(clocking block简称以下)模块里的任何信号的驱动与采样都使用了同步的思想;

  **cb模块只能用于验证,不能用于设计

  **一个interface里面可包含多个cb模块

3:实现机理

  使用cb,默认有 default input #1step output #0;(skew)

4:skew

  input skew在时钟沿前有延时,output skew在时钟沿后有延迟

 5:cb模块的使用(伪代码)

  interface arb_if(input bit clk)

   clocking cb @(posedge clk)

     output request;

     input grant;

   endclocking  //cb里面的信号都是同步信号

  modport TEST(clocking cb,output reset) //表示使用cb里面的同步信号

  endinterface

//使用cb信号

  arb_if arbif;//声明一个interface

  arbit.cb.request <= 2'b01; //驱动一个信号使用非阻塞赋值;采样一个信号用阻塞赋值

6:同步到信号

  @arbif.cb.grant; @(posedge arbif.cb.grant); ##2 arbif.cb.request <= 0(等待2个时钟周期);

 7:驱动信号非阻塞,采样信号阻塞

  

四:Timing Region

  

 1:包含

  active region:design区,design区可分为四个区(RTL的四个Time Region)

  observed region:assertion区

  reactive region:testbench区

  postpone:sample区,采样所有设计的信号

2:interface采样区是在postpone,在时钟沿后采样时钟前的数据

  

  波形如下图:

  

3:interface驱动,在时钟沿前驱动,时钟沿后得到信号的值

   

  输出波形,这也就是非阻塞赋值的原因

  

五:program block

  将OOP与DUT通过interface连接起来;在program里面可以跑设计。

 1:类似于module,可包含代码,变量等;

  没有hierarchy结构

 2:例子

  

 3:总结

  不能有module hierarchy,可以有class hierarchy;

  代码在initial块中执行,不能在always块;

  在reactive区执行

六:一个完整的testbench模板

  顶层设计:

    

  子模块:

    

 说明:

  top层在active区执行,program在reactive区执行,这样可以避免race。

    

  

   

 

原文地址:https://www.cnblogs.com/xh13dream/p/9016356.html