0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数字硬件建模SystemVerilog之Interface和modport介绍

OpenFPGA 来源:OpenFPGA 2023-04-28 14:12 次阅读

概述

SystemVerilog Interface是modport的一种,但比简单的输入、输出或输入输出端口的功能更多。在其最简单的形式中,Interface端口将相关的信号捆绑在一起作为一个单一的复合端口。例如,构成AMBA AXI总线的所有单个信号都可以被归纳为一个Interface端口。

一个Interface可以做的不仅仅是封装总线信号。SystemVerilog Interface为设计者提供了一种集中总线功能的方法,而不是将功能分散在设计中的几个模块中。这就模拟了设计工程师在RTL层面的工作,并让综合工作在整个设计中适当地分配门级总线硬件

当遵循特定的建模准则和限制时,Interface是可以综合的。Interface也可以用在不可综合级别的建模,并作为验证测试平台的一部分。先进的验证方法,如UVM 、OVM和VMM,都使用Interface。

使用Interface作为modport

interface:定义interface模块以关键字interface和endinterface结尾,内部通过定义输入输出信号和对应的logic信号,注意,双态信号不可以定义为logic。定义好了interface后,需要在top层将interface进行例化。

modport:使用modport来对上述信号接口进行一个分组和方向指定,这样会使得接口更加条理清晰。在顶层top中例化test时参数还是接口(模块内部是modport)

一个模块的端口可以被声明为一个Interface类型,而不是传统的输入、输出或inout端口。一个模块可以有任意数量的interface,interface可以与其他端口以任意顺序连接。本书中的例子将Interface端口列在前面,只是为了强调Interface端口的作用。

有两种风格的Interface端口声明--通用和特定类型。这两种风格都是可以综合的。

通用Interface端口

一个通用的Interface端口通过使用关键字interface来定义端口的类型。而不是使用一个特定的Interface类型的名称。语法是:

module(Interface

当module被实例化时,任何类型的Interface都可以被连接到通用Interface端口。这就提供了灵活性,同一个模块可以用多种方式使用,不同的Interface连接到模块上。在下面的例子中,模块bridge被定义为有两个通用Interface端口。每个通用Interface端口可以有一个ahb_bus Interface实例或一个Interface端口。

8df9d784-e583-11ed-ab56-dac502259ad0.png

特定类型的Interface端口

一个modport可以被明确地声明为一个特定类型的Interface。一个特定类型的接口端口是通过使用一个Interface的名称作为端口类型来声明的。语法是:

module()。

比如说:

8e05e8ee-e583-11ed-ab56-dac502259ad0.png

一个特定类型的Interface端口只能连接到同一类型的Interface实例上。在上面的例子中,高层网表可以实例化CACHE模块并连接一个ahb_bus Interface的实例,但不能连接一个usb_bus Interface的实例。如果错误的Interface实例类型被连接到特定类型的Interface端口,仿真器或综合工具将发出一个阐述错误。特定类型的Interface端口确保错误的Interface不会被无意中连接到端口上。明确命名可以连接到端口的Interface类型,也使端口类型对其他需要审查或维护模块的人更加明显。有了特定类型的Interface端口,就更容易看清端口的确切使用方式。

最佳实践指南10-2
为RTL模型使用特定类型的Interface端口。不要在设计模块中使用通用的interface。

一个模块的功能需要引用Interface内的信号。对于特定类型的Interface,Interface内的信号名称在编写模块的时候就已经知道了,可以毫无顾虑地引用。对于通用Interface端口,不能保证连接到模块Interface端口的每个Interface实例都有相同的信号名称。

Interface modports

Interface为简化模块间的连接提供了一种实用而直接的方法。然而,连接到一个Interface的每个模块可能需要看到Interface内信号的独特视图。例如,在AHB总线上,hwdata信号是主模块的输出,而同样的hwdata是同一总线上从属模块的输入。

SystemVerilog Interface提供了一种方法来定义Interface信号的不同视图,这样每个模块都能看到具有正确端口方向的Interface端口。这个定义是在Interface中使用modport关键字进行的。Modport描述了Interface所代表的modport。一个Interface可以有任意数量的modport定义,每个定义都描述了一个或多个其他模块如何看待Interface内的信号。

一个modport定义了模块在Interface中看到的信号的端口方向。modport的定义并不重复已经在Interface信号声明中定义的向量大小和类型信息。一个modport只定义连接模块是否将一个信号视为输入、输出、inout端口。

下面的界面中显示了两个modport声明的例子。

8e0ea24a-e583-11ed-ab56-dac502259ad0.png

指定使用哪种modport

SystemVerilog提供了两种方法来指定一个模块Interface端口应该使用哪种modport。

作为模块定义中Interface端口声明的一部分

作为与模块实例的接口连接的一部分

这两种方式都是可以综合的,但将modport作为modport定义的一部分来指定有一些优势,这将在下面几段中讨论。

在模块的interface声明中选择modport。要从一个Interface使用的特定调制端口可以直接指定为模块内Interface端口声明的一部分。要连接到Interface的modport被指定为:

.

比如说。

8e1877ac-e583-11ed-ab56-dac502259ad0.png

只有特定类型的Interface端口可以指定一个modport作为端口声明的一部分。通用Interface端口不能指定一个modport。

在实例化和连接这个主模块的上级模块,Interface的一个实例被连接到modport,而不指定modport的名称。例如:

8e1fbfda-e583-11ed-ab56-dac502259ad0.png

在module实例中选择modport。另一种编码方式是不在模块定义中选择modport,而是将modport的选择推迟到模块实例化时进行。下面的例子声明了第一个从属模块的端口作为simple_ahb Interface端口,但没有指定使用哪个modport定义。

8e2cad44-e583-11ed-ab56-dac502259ad0.png

然后可以在模块实例化时指定Interface的具体模口,将一个Interface的实例连接到一个模块实例。该连接被指定为:

.

比如说。

8e368c24-e583-11ed-ab56-dac502259ad0.png

当在模块实例中指定要使用的modport时,模块定义可以使用特定类型的Interface端口或通用Interface端口类型。

注意事项
一个modport可以在模块端口定义或模块实例中选择,但不能同时选择。
最佳实践指南10-3
选择模块使用的modport作为模块的Interface端口声明的一部分。不要在网表级别选择modport。

将modport作为端口声明的一部分来指定,还可以使模块独立于其他模块进行综合。它还有助于使模块更加自我记录。阅读或维护该模块的工程师可以立即看到哪一个modport将被用于该模块。

在不指定modport的情况下连接到Interface。模块Interface端口可以连接到一个Interface实例,而不需要指定具体的modport定义。当没有指定modport时,Interface中的所有wire都被假定为有一个双向的inout方向。在仿真中,Interface中的变量被假定为ref类型。(ref端口允许端口的两边都可以读取和修改变量。ref端口是不可综合的,在本书中没有讨论)。综合编译器将没有指定modport的Interface端口中的所有信号视为inout双向端口。

使用modports来定义不同的连接集

在一个由几个不同模块使用的比较复杂的Interface中,可能不是每个模块都需要看到Interface中的同一组信号。Modports使得为每个使用该Interface的模块创建一个自定义的Interface视图成为可能。

一个模块只能访问其modport定义中列出的信号。这使得Interface中的一些信号有可能被完全隐藏,不被某些模块看到。例如,Interface可能包含一些信号,只有通过master_portsmodport连接到Interface的模块才能使用,而通过s1ave_ports modport连接的模块不能使用。

完整的AMBA AHB总线有19个信号,其中有几个信号只由总线主机使用,而不是由总线从机使用。

下面的例子说明了一个自定义版本的simple_ahb Interface,增加了3个额外的AMBAAHB信号-hprot,hburst和htrans,只被主模块使用。master_ports和slave_ports的modport声明确保主模块和从模块看到各自模块的正确信号集。

例10-5: 用modports的Interface来定制Interface信号的视图

///////////////////////////////////////////////////////////
//SimpleAMBAAHBInterface
///////////////////////////////////////////////////////////
//`begin_keywords"1800-2012"
interfacesimple_ahb(
inputlogichclk,//bustransferclk
inputlogichresetN//busreset,activelow
);
logic[31:0]haddr;//transferstartaddress
logic[31:0]hwdata;//datasenttoslave
logic[31:0]hrdata;//returndatafromslave
logic[2:0]hsize;//transfersize
logichwrite;//1forwrite,0forread
logichready;//1fortransferfinished
//additionalAHBsignalsonlyusedbybusmaster
logic[3:0]hprot;//tranferprotectionmode
logic[2:0]hburst;//transferburstmode
logic[1:0]htrans;//transfertype

//mastermoduleportdirections
modportmaster_ports(
outputhaddr,hwdata,hsize,hwrite,//toAHBslave
inputhrdata,hready,//fromAHBslave
inputhclk,hresetN,//fromchiplevel
//additionalAHBsignalsonlyusedbybusmaster
outputhprot,hburst,htrans
);

//slavemoduleportdirections
modportslave_ports(
outputhrdata,hready,//toAHBmaster
inputhaddr,hwdata,hsize,hwrite,//fromAHBmaster
inputhclk,hresetN//fromchiplevel
);
endinterface:simple_ahb
//`end_keywords

使用 simple_ahb .master_ports modport 的模块可以使用 hprot, hburst和htrans信号。一个使用simple_ahb.slave_ports modport的模块不能访问这3个信号。因为这些信号没有在slave_ports modport中列出,就好像这些信号根本不存在一样。

也有可能在一个Interface内有内部信号,这些信号通过任何modport都不可见。这些内部信号可能被lint检查器或Interface中的其他功能所使用。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82998
  • AHB总线
    +关注

    关注

    0

    文章

    18

    浏览量

    9385
  • Verilog设计
    +关注

    关注

    0

    文章

    20

    浏览量

    6474
  • cache技术
    +关注

    关注

    0

    文章

    41

    浏览量

    986

原文标题:数字硬件建模SystemVerilog-通信总线建模 --Interface和modport

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [启芯公开课] SystemVerilog for Verification

    设计验证相关的公开课!SystemVerilog作为IEEE-1800,将VLSI设计、验证和断言属性集中在一起,是数字超大规模集成电路设计和验证领域最流行的语言。从2006年至今
    发表于 06-10 09:25

    如何在SystemVerilog中为状态机的命令序列的生成建模

     我们将展示如何在SystemVerilog中为状态机的命令序列的生成建模,并且我们将看到它是如何实现更高效的建模,以及实现更好的测试生成。​
    发表于 01-01 06:05

    使用SystemVerilog来简化FPGA中接口的连接方式

    电路结构,我将flatten_hierarchy选为了none)    下面我们把程序稍作改动,将a/b/c三个接口使用SystemVerilog中的interface来连接。    在工程中添加
    发表于 01-08 17:23

    数字硬件建模SystemVerilog-归约运算符

    介绍归约运算符对单个操作数的所有位执行运算,并返回标量(1位)结果。表5-9列出了归约运算符。表5-9:RTL建模的归约运算符归约运算符包括一个NAND和一个NOR运算符,这是按位运算符所没有
    发表于 10-20 15:03

    SystemVerilog语言介绍汇总

    作者:limanjihe  https://blog.csdn.net/limanjihe/article/details/83005713 SystemVerilog是一种硬件描述和验证语言
    的头像 发表于 10-11 10:35 2077次阅读

    SystemVerilog硬件功能如何进行建模

    本文定义了通常用于描述使用SystemVerilog硬件功能进行建模的详细级别的术语。
    的头像 发表于 03-30 11:42 1373次阅读

    数字硬件建模SystemVerilog-网络

    每个SystemVerilog网络类型都有特定的语义规则,这些规则会影响多个驱动程序的解析方式。虽然所有网络类型都表示硅行为,但并非所有网络类型都可以用标准ASIC和FPGA技术表示。表3-3列出了ASIC和FPGA综合编译器支持的网络类型。
    的头像 发表于 05-09 09:26 1772次阅读

    数字硬件建模SystemVerilog-结构体

    默认情况下,结构体会被非压缩的。这意味着结构体的成员被视为独立变量或常量,并以一个共同的名称分组在一起。SystemVerilog没有指定软件工具应该如何存储非压缩结构体的成员。不同的软件工具具对于结构体的存储分布也是不同的。
    的头像 发表于 06-30 09:54 753次阅读

    使用Verilog/SystemVerilog硬件描述语言练习数字硬件设计

    HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~
    的头像 发表于 08-31 09:06 1212次阅读

    FPGA学习-SystemVerilog语言简介

    SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了 C语言 数据类型、结构、压缩
    的头像 发表于 12-08 10:35 1377次阅读

    RTL和门级建模

    SystemVerilog能够在许多不同的细节级别(称为“抽象级别”)对数字逻辑进行建模。抽象意味着缺乏细节。数字模型越抽象,它所代表的硬件
    的头像 发表于 02-09 14:20 739次阅读
    RTL和门级<b class='flag-5'>建模</b>

    Interface端口的概念介绍

    SystemVerilog Interfacemodport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-19 14:48 1290次阅读

    数字硬件建模SystemVerilogInterface方法概述

    SystemVerilog Interfacemodport的一种,但比简单的输入、输出或输入输出端口的功能更多。
    的头像 发表于 04-28 14:10 1329次阅读
    <b class='flag-5'>数字</b><b class='flag-5'>硬件</b><b class='flag-5'>建模</b><b class='flag-5'>SystemVerilog</b>之<b class='flag-5'>Interface</b>方法概述

    SystemVerilog的覆盖率建模方式

    为了确保验证的完备性,我们需要量化验证目标。SystemVerilog提供了一套丰富的覆盖率建模方式。
    的头像 发表于 06-25 10:44 574次阅读

    SystemVerilog硬件设计部分有哪些优势

    Language,硬件描述语言),而SystemVerilog则是HDVL(Hardware Design and Verification Language,硬件设计与验证语言)。由此可见,
    的头像 发表于 10-19 11:19 458次阅读
    <b class='flag-5'>SystemVerilog</b>在<b class='flag-5'>硬件</b>设计部分有哪些优势