数字IC验证:System Verilog -接口Interfaces

文章目录

  • 1 引言Introduction
  • 2 接口中的端口Ports in Interface
  • 3 Modports
  • 4 例程:mem_if.sv

写在前面:
最近实习期间自学System Verilog,找到一个英文教程Asic-world/system verilog,写得挺好的,主要通过代码示例进行学习。因此翻译下来作为巩固与分享,其中也额外增加了补充内容。英文原文入口:Asic-World (Interfaces)。Copyright: Deepak Kumar Tala。文中的所有例程会上传到我的资源中。
若有任何翻译不当之处,请在评论区指正,感谢!

1 引言Introduction

接口interface是SV中最佳特性之一:

  • 接口能够进行端口的捆绑
  • 接口在设计中实例化,能够作为单个item、组件网络或变量,通过端口访问
  • 接口也可以包含任务和函数
  • 为了便于主从类型的支持,接口包含了modport

2 接口中的端口Ports in Interface

在接口内部,接口允许wire和变量直接进行通信(连接)。但对于接口之间的通信(连接),就需要用到接口内部的端口。接口中的端口和模块一样,可以是任意数据类型。

3 Modports

SV中的modport是用于限制接口内的访问,它有类似于模块的信号方向。
modport的信号方向有:

  • input:输入的端口
  • output:输出的端口
  • inout:输入+输出的端口
  • ref:端口引用

modport适用于memory,system side,testbench等使用场景。
接口中使用modport不代表该接口被使用时,modport一定要被使用。如果模块内modport没有被指定,那么接口中所有的net和变量都可以通过inout或ref访问。关于本部分,详见该网站的代码。

4 例程:mem_if.sv

接口中可以包含端口port,modport,clocking块,内部信号等。

补充:clocking块

  1. clocking块是SV新feature,主要是为了更好解决testbench和DUT之间的timing和同步建模的问题,可以使user基于clock cycle在更高的抽象层次上写testbench(如“## 3”,表示三个clock cycle)。clocking只能在module/interface/checker/program中声明,不能在function/task/package中。clocking块是声明和例化一体的(类似always块没有例化语句)。clocking块是对所在的module/interface/checker/program里的信号的采样或驱动的timing属性进行声明,也可以通过hierarchy引用的方式作用于其他模块的信号。
  2. 同一个module/interface/checker/program中声明多个clocking块,同一个信号也可以出现在不同的clocking块中。

————————————————
版权声明:本文为CSDN博主「wonder_coole」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wonder_coole/article/details/82597125

数字IC验证:System Verilog -接口Interfaces_第1张图片
数字IC验证:System Verilog -接口Interfaces_第2张图片
数字IC验证:System Verilog -接口Interfaces_第3张图片
数字IC验证:System Verilog -接口Interfaces_第4张图片

你可能感兴趣的:(数字IC验证)