接口(interface)是SV引入的很重要的特性,目前在绝大多数验证环境或者设计中都会出现。接口最直接的作用就是将一组相关的信号封装到一起,特别是一些标准协议的接口信号,比如常见的AMBA AXI/AHB/APB等等。接口的定义不仅可以方便信号在验证环境组件中的连接,还可以将其复用至其他芯片设计中,降低连接出错的概率。
接口并不只是提供一组信号这么简单,它还是可综合的,它还可以包含modport、clocking block、parameter、过程语句块、断言、覆盖组(covergroup)、函数和任务等。其中modport、clocking block以及集成方式的讨论在下面会展开介绍。
这里先来一个简单的接口实例,后面根据介绍到的特性将在此基础上逐步扩展。这个例子只是用来展示接口的语法和使用方法。
Modport
Modport可以用来在接口中定义信号的方向,这种方向的定义相当于是对信号施加了连接约束,避免在模块或者环境组件集成的过程中连接出错。
这里的连接出错指的是,一般在接口中声明的信号是没有方向限制的,也就是说在模块集成的时候,语法上是允许两个模块同时对同一接口信号进行驱动,这种情况的出现一方面不符合设计规范,另一方面则可能会产生X态,最终导致仿真失败。