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

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

3天内不再提示

从可综合的RTL代码的角度聊聊interface

FPGA技术驿站 来源:FPGA技术驿站 2023-10-12 09:06 次阅读

SystemVerilog引入了interface,这里我们从可综合的RTL代码的角度聊聊interface。

什么是interface?

Interface是将一系列信号封装为一个模块,这里的“一系列信号”通常是彼此相关的,比如AXI接口协议之一的AXI4-Stream的TLAST/TVALID/TREADY/TDATA,这个“模块”称为接口模块。接口模块可以被实例化作为其他module的端口,从而简化了module之间以及module与TB(testbench)之间的连线操作。

使用interface的好处

使用interface的好处也是显而易见的。我们来看个例子。如下图所示,待测模块和测试平台之间的连线包含5个信号,采用此方法就要在DUT module内定义5个端口,在TB内定义对应的5个信号。

c7524efc-6892-11ee-939d-92fbcf53809c.png

如果采用interface就会形成下图所示的连接方式。这样无论是DUT还是TB只需要在自身模块内实例化这个interface即可。

c764393c-6892-11ee-939d-92fbcf53809c.png

可见,使用interface会带来这样几个好处:

(1)module之间的连线由输入/输出列表替换为interface,不易出错

(2)如果需要更新module的输入/输出端口,只用在interface里进行一次更新,而不必在相关module的端口处进行多次更新

其他好处跟UVM相关,这里先不做阐述。

接口的定义

我们从可综合RTL代码的角度看个例子,如下图所示的两个模块,一个是控制模块,一个是存储模块,控制模块生成相应的控制信号给存储模块。

c7786538-6892-11ee-939d-92fbcf53809c.png

我们使用interface定义这组信号,如下图所示代码。从这段代码可以看到,接口模块以interface作为关键字开始,以endinterface结束(像不像module,endmodule)。Interface可以参数化,如代码的4行所示,可以有输入/输出或双向端口如代码第7行所示。代码第10行和第11行定义了写方向的控制信号,第13行和14行定义了读方向的控制信号。第16行modport(端口模块)用来定义信号方向。对存储模块而言,这些信号都是输入信号,对控制模块而言,除时钟外其他信号均为输出信号。

因为只是定义信号的方向,所以只用列出信号名称而无需指定信号的位宽。同时,同方向的信号可列在同一行,如代码第17行所示。如果信号方向声明的结尾也是modport的结尾,那么该结尾没有任何额外标点符号,如代码第22行的结尾,如果信号方向声明的结尾不是modeport的结尾,那么结尾就用逗号,如代码第21行。注意代码第10行至第14行定义的信号类型为logic,相比于Verilog里的reg,logic更灵活,不仅可以用在always进程中,也能用于assign赋值语句中(Verilog需要用wire)。

c7843e58-6892-11ee-939d-92fbcf53809c.png

在存储模块中,可直接在端口列表内实例化该接口模块,如下图所示代码片段第9行,实例化方式和模块的实例化方式一样,需要注意的是这里不能指定interface内的parameter,其余输入/输出端口不在接口模块内的可单独声明,如代码第10行和第11行所示。

c79d407e-6892-11ee-939d-92fbcf53809c.png

在模块内部使用interface内声明的接口,需要采用如下图所示代码片段的方式,如代码第23行,通过i0_mem_ports.wen使用写使能信号。因为代码内部可能会反复使用interface内的信号,所以interface的名字尽量短一些。

c7b28e70-6892-11ee-939d-92fbcf53809c.png

同样地,在控制模块内可直接实例化上述定义的interface,如下图所示代码片段。

c7c1386c-6892-11ee-939d-92fbcf53809c.png

在设计的顶层,需要依次实例化接口、存储模块和控制模块。此时,就需要对接口的parameter进行设定,如下图所示代码片段的第15行所示。

传统的输入/输出列表方式存在这样几个不足之处:

(1)需要在相关模块中反复声明输入/输出信号

(2)存在不同模块端口不匹配的风险

(3)设计规格的更改会导致需要在相关多个模块中进行输入/输出信号的更新

这种重复性的更新不仅涉及到很多行代码,还会存在信号名称写错或者信号位宽写错的风险。

注意:module端口声明若采用input/output/inout这种形式,实例化时这些端口是可以悬空的,但如果采用interface,实例化的interface是不允许处于未连接的状态。

c7ddf65a-6892-11ee-939d-92fbcf53809c.png

Vivado对interface是支持的。将上述4个文件直接添加到Vivado中,如下图所示。在Hierarchy窗口中,可以看到top下面只有控制模块和存储模块,而没有接口模块,因为接口并不是一个module。在Libraries下则可以看到接口模块。在Compile Order窗口下,可以看到工具会先编译接口模块,再编译其他模块。

c7fbc388-6892-11ee-939d-92fbcf53809c.png

Vivado下打开Elaborated Design,可以看到interface信息,如下图中的高亮部分,工具以“接口名.信号名”的方式显示net的名字。

c818fa2a-6892-11ee-939d-92fbcf53809c.png

综上所示,SystemVerilog提供的interface支持参数化,支持信号分组(modport),在可综合的RTL代码中,可使用interface简化输入/输出列表的描述。






审核编辑:刘清

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

    关注

    1

    文章

    377

    浏览量

    59069
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18965
  • Interface
    +关注

    关注

    0

    文章

    102

    浏览量

    38518
  • Module
    +关注

    关注

    0

    文章

    58

    浏览量

    12810
  • DUT
    DUT
    +关注

    关注

    0

    文章

    180

    浏览量

    11998

原文标题:说说SystemVerilog的Interface

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在不改变RTL代码的情况下,优化FPGA HLS设计

    用软件从 C 转化来的 RTL 代码其实并不好理解。今天我们就来谈谈,如何在不改变 RTL 代码的情况下,提升设计性能。 本项目所需应用与工具:赛灵思HLS、Plunify Cloud
    的头像 发表于 12-20 11:46 1484次阅读
    如何在不改变<b class='flag-5'>RTL</b><b class='flag-5'>代码</b>的情况下,优化FPGA HLS设计

    RTL级设计的基本要素和步骤是什么

      综合(Logic Synthesize)是指将HDL语言、原理图等设计输入翻译成由与、或、非门等基本逻辑单元组成的门级连接(网表),并根据设计目标与要求(约束条件)优化所生成的逻辑连接,输出门级网表文件。RTL综合指将
    的头像 发表于 01-17 16:57 9709次阅读
    <b class='flag-5'>RTL</b>级设计的基本要素和步骤是什么

    RTL代码和仿真代码的区别

    RTL代码和仿真代码的区别,哪些verilog语句是综合的??哪些不能??
    发表于 07-21 13:08

    verilog HDL 综合模型的结构

    综合模型的结构如果程序只用于仿真,那么几乎所有的语法和编程语句都可以使用。但如果程序是用于硬件实现,那么我们就必须保证程序的综合性,即所编写的程序能被
    发表于 10-20 08:10

    为什么quartus综合没有报错而modelsim rtl仿真就报错了

    为什么quartus综合没有报错而modelsim rtl仿真就报错了
    发表于 09-24 11:02

    如何理解Xilinx的RTL

    各位大神,我的通用移位寄存器HDL代码如上,我用的Xilinx ISE开发环境,我想问综合后的RTL图要如何理解,上述HDL代码RTL图如
    发表于 08-14 14:30

    聊聊Dubbo - Dubbo扩展机制实战

    摘要: 在Dubbo的官网上,Dubbo描述自己是一个高性能的RPC框架。今天我想聊聊Dubbo的另一个很棒的特性, 就是它的扩展性。1. Dubbo的扩展机制在Dubbo的官网上,Dubbo描述
    发表于 06-04 17:33

    来自vivado hls的RTL可以由Design Compiler进行综合吗?

    您好我有一个关于vivado hls的问题。RTL是否来自xivix FPGA的vivado hls onyl?我们可以在Design Compiler上使用它进行综合吗?谢谢
    发表于 04-13 09:12

    架构的角度看如何写好代码 + 我的思考

    架构漫谈(八):架构的角度看如何写好代码 + 我的思考
    发表于 06-18 06:16

    求一套手工逻辑综合的方法和综合步骤?

    手工综合RTL代码的理论依据和实用方法时序逻辑综合的实现方法
    发表于 04-08 06:06

    请问蜂鸟E203的代码可以做asic综合吗?

    请问蜂鸟E203的代码可以做asic综合吗? 如果需要的话需要把那些文件加进去呢?是要把rtl文件里的 core,debug,fab,general,mems,periphs,soc,subsys
    发表于 08-16 07:09

    如何保证RTL设计与综合后网表的一致性

    如何保证RTL设计与综合后网表的一致性文章简介:在超大规模数字集成电路的设计中,我们使用逻辑综合工具来完成从RTL设计到门级网表的转化。我们希望它
    发表于 01-23 23:10 19次下载

    RTL8201/RTL8201BL pdf datashee

    The RTL8201/RTL8201BL is a single-port Phyceiver with an MII (Media Independent Interface)/SNI
    发表于 03-04 16:42 120次下载

    设计复用的RTL指导原则

    设计可复用的基本要求是RTL 代码可移植。通常的软件工程指导原则在RTL 编码时也适用。类似软件开发,基本的编码指导原则要求RTL 代码简单
    发表于 12-24 00:46 32次下载

    逻辑综合与物理综合

    利用工具将RTL代码转化为门级网表的过程称为逻辑综合综合一个设计的过程,从读取RTL代码开始,
    的头像 发表于 11-28 16:02 1930次阅读