连接设计与测试平台——SystemVerilog 接口知识点总结

1、为什么需要接口呢?

在SystemVerilog中,为了简化模块之间的连接、随着设计复杂化的大量端口、在不同设计层信号的反复声明和连接,利用接口作为块之间的通信模块来达到这个目的

优点:简洁不易错,加入新信号时只需要改变接口的模块。

2、什么是接口?

它是一种代表一捆连线的结构,具有智能同步和连接功能的代码。(按我自己的理解,就是相当于把两个模块之间的端口全部同一在一个结构里,避免了重复的声明)

例如:如果不使用接口,仲裁器和测试平台针对同一信号都需要各自声明。如下

//使用端口的仲裁器模型
module arb_port(input logic[1:0] grant,output logic[1:0] request...);

//而在使用端口的测试平台中,对同一信号也需要定义端口
module test(input logic[1:0] grant,output logic[1:0] request...)

3、具体如何使用接口来替代呢?--interface

//例如,仲裁器的简单接口
interface arb_if(input bit clk);
    logic [1:0] grant,request;
    logic rst;
endinterface

//使用了简单接口的仲裁器
module arb(arb_if arbif);
...
    always @(posedge arbif.clk or posedge arbif.rst) //可以直接调用
    begin 
...
endmodule

显而易见,定义了接口后就不需要再在仲裁器的module中声明了,信号的调用直接可以用.加上端口名称即可。(例如:.clk)(我觉得很像是调一个属性值)

 注:时钟可以使接口的一部分或者是一个独立的端口,并且接口的实例名越短越好,方便引用。值得注意的是,接口信号必须使用非阻塞赋值来驱动。

4、使用modport将接口中的信号分组并指定方向

例如:

interface arb_if(input bit clk);
    logic [1:0] grant,request;
    logic rst;
    modport TEST(output request,rst,input grant,clk);
    //这就声明了信号的方向
    ...

endinterface

//对应的,在测试平台的使用中,需要在模块首部指明,在实例化时不需要指明
module test (arb_if.TEST arbif);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值