SystemVerilog中的接口使用


一、接口是什么?

接口可以看做一捆线,它们连接了设计块和测试平台,包含了连接、同步、两个或者更多块之间的通信功能。


二、接口如何使用?

(1)模块外定义:使用接口时需要确保在你的模块和程序块之外声明接口变量。如果你忘了这一点,就会带来很多的错误。有些编译器可能不支持在模块中定义接口。即使允许,那么接口就只是所在模块的局部变量,所以对设计的其他部分来说是不可见的。

interface arb_if(input bit clk);
    logic[1:0] grant,request;
    logic rst;
endinterface

(2)需要用到这些接口的模块

module arb (arb_if arbif);// 接口arb_if的实例名为arbif,应当定义越短越好,但不要产生歧义
    always @ (posedge arbif.clk or posedge arbif.rst)
        begin
            if (arbif.rst)// 使用接口arbif中的rst信号
                arbif.grant<=2'b00;// 接口信号必须使用非阻塞赋值来驱动
            else
                arbif.grant<=2'b01;
        end
endmodule  

(3)顶层模块实例化:所有的块都在top模块中例化和连接

module top ;
    bit clk;
    always # 5 clk=~clk;

    arb_if arbif(clk);// 接口arb_if例化为arbif,把clk传进去
    arb a1 (arbif);
    test t1(arbif);
endmodule:top

三、接口中的modport

1.modport有什么用?

在接口中使用modport结构能够将信号分组并指定方向

2.如何在接口中使用modport?

(1)在接口内定义

interface arb_if(input bit clk);
    logic [1:0] grant,request;
    logic rst;// 没有方向

    modport TEST (output request,rst,
                 inout grant,clk);
    modport DUT (input request,rst,clk,
                 output grant);
    // 分成了两组并各自指定了方向
endinterface 

(2)在模块首部声明

module arb (arb_if.DUT arbif);// 应当指出的是你需要将modport名即DUT放在接口名即arb_if的后面
    ...
endmodule

四、接口的优缺点有哪些?

优点:便于设计重用;减少犯错误的可能性;增加信号较容易;modport方便工具自动检查;
缺点:冗长;少用的协议会有较多的工作;连接多个不同的接口很困难。


五、接口中为什么使用时钟块?

在这里插入图片描述
接口块可以使用时钟块来指定同步信号相对于时钟的时序。时钟块中的任何信号都将同步地驱动或采样,这就保证了测试平台在正确的时间点与信号交互。


总结

要根据实际的工作需求进行使用接口。

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Francis7777777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值