SystemVerilog使用接口(interface)为块之间的通信建模,接口可以看作一捆智能的集束线(collector)。接口包含了连接、同步、甚至两个或者更多块之间的通信功能,它们连接了设计块和测试平台。如果将interface作为一个路由器(router),那么意味着只要同interface的接口类型一致,多个模块都可以使用这个interface,将其与interface进行连接也不需要担心信号的驱动方向、连接性问题。
在接口中不能例化模块,但是可以例化其他接口。且模块可以例化接口。带有modport 的接口跟传统的连接到信号的端口相比各有千秋:
使用接口的优势如下:
(1)接口便于设计重用,当两个块之间有两个以上的信号连接,并且使用特定的协议通信的时候,应当考忠使用接口。如果信号组一次又一次地重复出现,例如在网络交換机中,那就应该使用虚拟接口。
(2)接口可以用来替代原来需要在模块或者程序中反复声明并且位于代码内部的一系列信号,减少了连接错误的可能性。
(3)要增加一个新的信号时,只需要在接口中声明一次,不需要在更高层的模块层声明,这进一步减少了错误。
(4)modport 允许一个模块很方便地将接口中的一系列信号捆绑到一起,也可以为信号指定方向以方便工具自动检查。
使用接口的劣势如下:
(1)对于点对点的连接,使用modport的接口描述跟使用信号列表的端口一样的冗长。接口带来的好处是所有的声明集中在一个地方,减少了出错的几率。
(2)必须同时使用信号名和接口名,可能会使模块变得更加冗长。
(3)如果要连接的两个模块使用的是一个不会被重用的专用协议,使用接口需要做比端口连线更多的工作。
(4)连接两个不同的接口很困难。一个新的接口可能包含了现有接口的所有信号并新增了信号(地址、数据等等)。你需要拆分出独立的信号并正确地驱动它们。