system Verilog---interface

System Verilog接口:简化FPGA设计与验证
本文介绍了System Verilog(SV)中的interface特性,如何通过接口简化大型复杂设计的建模和验证。相比Verilog,SV接口允许整合多个信号为单一抽象端口,减少端口重复声明和连接不匹配的问题。接口还可封装通信协议,包含断言检查和功能覆盖率收集。接口与模块的主要区别在于接口不能例化模块,但可以例化接口,并通过modport定义不同模块的信号方向,降低连接错误。在验证中,接口用于连接测试平台和待测设计,提高建模级别和设计复用性。
AI助手已提取文章相关产品:

接口
接口(interface)的特点: 

接口提供了一种新型的面向抽象级建模的方式。
接口的使用可以简化建模和验证大型复杂的设计。
使用Verilog的模块端口与SV的接口之间的比较
要集成一个子系统,包括处理器单元、存储单元、测试单元的连接等

Verilog的方式
按照以下步骤进行:

逐一对每一个子模块进行端口声明。
在上层环境,需要声明非常多的线网用来在各个模块之间进行连接。
Verilog方式的缺点:

对于标准的总线端口也不得不在多个模块重复声明。
相应的通信协议也不得不在多个模块中重复定义。
在不同模块之间的连接可能会出现不匹配的信号声明和连接。
一个设计发生了变化,可能会影响多个模块的端口声明和连接。
Verilog代码:

 

        可以看到需要声明许多对应的线网,利用这些线网与目标模块进行连接。而且还需要连接其余四个模块。

        将这种场景扩展到数十甚至上百个模块,在系统层集成,可以看到顶层集成的工作量相当可观。 

SV方式 
        SV添加了新的抽象端口类型interface。
        interface允许多个信号被整合到一起用来表示一个单一的抽象端口。

 

 使用SV接口更新的代码:

        可以看到多个模块可以使用同一个interface,继而避免分散的多个端口信号连接。继而简化了连接,降低了端口连接不匹配的风险。

 

和之前Verilog代码做对比:

        可以看到SV代码 ,集成部分得到了极大的简化。这是因为,把处理单元的数据总线、信号,在接口类型main_bus中,而处理器端口的声明也得到了简化。以至于在顶层连接时,可以通过接口的例化与处理器接口类型端口进行连接,简化了集成的过程。同时也让后期接口信号的维护变得更加方便。

接口特点:

接口不仅可以包含变量或者线网,还可以封装模块之间通信的协议。(不管变量还是函数都可以置于其中)
此外接口中还可以嵌入与协议有关的断言检查、功能覆盖率收集等模块。
接口与模块的定义有许多相似之处 :

接口的定义同模块定义类似。
接口也可以有端口,例如外部接入的时钟或者复位信号。
接口内部可以声明所有的变量或者线网类型。
 
 接口和模块的区别:

接口不同于模块的地方在于,接口不允许包含设计层次,即接口无法例化模块,但是接口可以例化接口。
可以在接口声明modport来约束不同模块连接时的信号方向。
问题:为什么接口中的变量或者线网类型没有声明方向?

        在与多个模块连接时,可以会被用作驱动或者负载,即用作不同的连接方向

 接口的例化


 接口的例化
 接口的例化方式同模块例化一致。
模块的端口如果声明为input、output或者inout,那么在例化时可以不连接。
模块的端口如果声明为interface,那么在例化时则必须连接到一个接口实例,或者另外一个接口端口。
 索引接口中的信号
        如果一个模块拥有一个接口类型端口,那么要索引该接口中的信号,需要通过以下方式进行:

 

<接口名>.<接口内部信号名>
always @(posedge bus.clock, negedge bus.resetN)
...
·slave模块的多个端口,都被整合到main_bus中,在slave模块内部定义时,可以通过接口类型的端口bus去访问内部信号。这使得以往Verilog的端口声明代码得到了极大的简化,同时加强关联端口的内聚性。

modport
         接口中的变量或者线网信号,对于连接到该接口的不同模块则可能具备着不同的连接方向。

        接口引入了modport来作为moduleport的缩写,表示不同的模块看到同一组信号时的视角(连接方向)。

        在接口中声明modport,需要指明modport中各个信号的方向。

示例: 

chip_bus中的各个信号如ready、data没有方向 
两个单元模块slave和master中的连接又不相同
可以进一步声明modport master和modport slave。
保证接口内的信号,在连接不同模块时,通过与modport 对接,来避免方向接错的意外。


 当一个模块在例化时,可以选择连接到interface端口中具体的某一个modport。 

        这种方式可以降低方向连接错误的可能,进而避免信号多驱动的情况。

 验证中的应用
 利用接口,也可以将测试平台同DUT连接在一起。

测试模块:testbench
待测设计模块: arbiter
测试模块通过接口像待测设计发送激励信号,通过接口监测待测设计的输出信号

 

接口的总结 
 接口提高了建模级别,接口对于设计复用非常有利。
接口减少了模块之间错误连接的可能性。
如果要添加新的信号,只需要在接口中声明,而不必在模块中声明。
由于接口将有关信号都集合在一起,因此在使用这些信号时需要添加接口实例名。
一种接口往往会将有关的信号集合在一起,对于拥有多组不相关信号的设计而言,它需要有多个接口才能完成与其它模块的连接。
 

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值