SystemVerilog学习1——interface

这篇具有很好参考价值的文章主要介绍了SystemVerilog学习1——interface。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

verilog interface,systemverilog,学习

 利用verilog,有两种连接方式:按顺序连接和按名称连接。

verilog interface,systemverilog,学习

 verilog interface,systemverilog,学习

verilog的连接非常繁琐!!!如果将一个信号名儿修改了,那就需要修改其他与他有关的信号名儿,麻烦且容易出错!!!

verilog interface,systemverilog,学习

system采用接口解决这种繁琐。

接口可以用作设计,也可以用作验证,接口可以使得信号连接变得简洁并且不容易出错。 接口减少了模块之间错误连接的可能性;如果要添加新的信号,只需要在接口中声明,不需要在模块中声明。

interface集合了多个verilog类型的信号,是一个独立的端口类型,可以是一个独立的文件。

Interface和module相同点:

1.可以定义端口与双向信号

2.可以使用initial和always语句

3.可以定义function与task

Interface和module不同点:

模块可以例化接口,接口不可以例化模块

verilog interface,systemverilog,学习

 DUT和TB之间的驱动关系可以使用interface这个插排完成。

1.interface声明

verilog interface,systemverilog,学习

 利用interface简化模块连接,interface声明如下:

interface arb_if(
    input bit clk
);

logic [1:0] grant,request;
logic       reset_n;

endinterface 

顶层文件例化interface如下:

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

    arb_if arbif(clk);
    
    arbiter u_arbiter(arbif);
    test    u_test(arbif);

endmodule

可以看出,信号端口的连接就不针对内部具体的端口了,如果之后修改信号名或者信号位宽,直接去interface中修改即可。 

2.interface中信号的使用

//接口声明
interface arb_if(
    input bit clk
);

logic [1:0] request,grant;
logic       reset_n;

endinterface




module tb(
    arb_if arbif  //arbif相当于组长
);

initial begin
    @(posedge arbif.clk) //arbif.clk相当于组员
        arbif.request <= 2'b01;
        ...

    if(arbif.grant != 2'b01)
    ...
    
    $finish
end

3.接口与端口的连接

//接口声明
interface arb_if(
    input bit clk
);

logic [1:0] request,grant;
logic       reset_n;

endinterface


module top;
    
bit clk;
always #5 clk = ~clk;
arb_if arbif(clk);

//两种方式
arbiter u_arbiter(
    .grant(arbif.grant),
    .request(arbif.request),
    .reset_n(arbif.reset_n),
    .clk(arbif.clk)
);//比较麻烦


test u_test(arbif);//推荐

endmodule



4.接口信号分组:modport

为接口内部信号提供不同的视图,只是声明连接模块的信号的端口方向

也就是将大组分为多个小组

//接口声明
interface arb_if(
    input bit clk
);

logic [1:0] request,grant;
logic       reset_n;

//在interface中声明modport
modport DUV(
    input request,clk,reset_n,
    output grant
);


modport TEST(
    input grant,clk,
    output request,reset_n
);

endinterface

//设计模块中使用interface中的modport
module arbiter(
    arbif.DUV arbif_duv
);
...
endmodule

//测试案例中使用interface的modport
module tb(
    arbif.TEST arbif_test
);
...
endmodule

interface总结:

1. 功能:

一组信号/线网;

独立的文件;

在interface中定义通信协议;

在interface中定义协议检查和验证函数:task function assertion

2.modport可以定义interface的不同视图(DUV,test program)

3.interface不能有rtl

4.interface可综合

5.interface中可以包含多个modport

实例说明:接口使用四步骤

1.定义接口:

interface arb_if(
    input bit clk
);

logic [1:0] request,grant;
logic reset_n;

endinterface

2.DUT调用inetrface

module arb(arb_if arbif);//接口传入模块中
...     


always@(posedge arbif.clk or negedge arbif.reset_n)
    if(arbif.reset_n)
        arbif.grant <= 2'b00;
    else 
        arbif.grant <= next_grant;

endmodule

3.TEST调用interface

module test(arb_if arbif);

initial begin
    initial begin
    @(posedge arbif.clk) //arbif.clk相当于组员
        arbif.request <= 2'b01;
        ...
    @(posedge arbif.clk)
        if(arbif.grant != 2'b01)
        ...
    
    $finish

end

4.top层例化接口 DUT TEST文章来源地址https://www.toymoban.com/news/detail-649775.html

module top;

    bit clk;

    always #5 clk=~clk;


    arb_if arbif(clk);

    arb_al(arbif);

    test_al(arbif);

endmodule

到了这里,关于SystemVerilog学习1——interface的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IC学习笔记:SystemVerilog队列及数组方法

    队列和数组是SystemVerilog中常用的数据结构,它们可以用来存储和操作一组数据。本文将介绍SystemVerilog中队列和数组的常用方法。 1. 队列方法          队列是一种先进先出(FIFO)的数据结构,它可以用来存储一组有序的数据。 SystemVerilog中的队列有以下常用方法: 1.1 p

    2024年02月16日
    浏览(39)
  • (156)SystemVerilog[二维数组]

    1.1 本节目录 1.2 SystemVerilog介绍 1.3 SystemVerilog[二维数组] 1.4 结束语 第一,SystemVerilog简称为SV语言,是一种相当新的语言,它建立在Verilog语言的基础上,是 IEEE 1364 Verilog-2001 标准的扩展增强,兼容Verilog 2001,将硬件描述语言(HDL)与现代的高层级验证语言(HVL)结合了起来,并

    2024年02月07日
    浏览(36)
  • systemverilog/verilog文件操作

            Verilog具有系统任务和功能,可以打开文件、将值输出到文件、从文件中读取值并加载到其他变量和关闭文件。 1.1.1、打开和关闭文件 文件操作选项: 1.1.2、写文件         每个系统函数都以基数十进制打印值。它们还有其他三个版本,可以以二进制、八进制和十

    2024年01月21日
    浏览(37)
  • SystemVerilog之接口详解

    测试平台连接到 arbiter的例子:包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重, 是轮询还是自定义 grant表示仲裁出来的是哪一个,也即只有0,1,因此图中grant的取值只有00 01 10 不可能出现11。 grant_valid表示g

    2024年02月12日
    浏览(39)
  • systemverilog中的bind

    最早接触 bind 是在assertion 当中,将assertion 与 dut 进行绑定连接,如下例子: 来看下面一个将 interface bind 到 module 的例子: 可以看到,包含断言的 interface , 其端口信号的方向均为 input ,也就是说 property 中包含的信号都是从 interface 的外部给进来的; 实际上, bind 不

    2024年02月10日
    浏览(35)
  • SystemVerilog中的切片操作

    在硬件描述语言中,信号切片操作是指对信号中的某个或某几个位进行访问或操作 其中, signal_name 是要进行切片操作的信号名, start_index 是切片的起始位置, length 是切片的长度。 例如,如果有一个32位的信号 my_signal ,需要获取该信号的第16到第23个位(包括第16和第23个位

    2024年02月02日
    浏览(42)
  • SystemVerilog 教程第一章:简介

    像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为,以便将其转换为由组合门电路和时序元件组成的数字块。为了验证 HDL 中的硬件描述正确无误,就需要具有更多功能特性的面向对象的编程语言 (OOP) 来支持复杂的测试过程,这种语言通常被称为硬件验证语言

    2024年02月16日
    浏览(42)
  • SystemVerilog 第2章:数据类型

            在 Verilog中,初学者经常分不清reg和wire两者的区别。应该使用它们中哪一个来驱动端口?连接不同模块时又该如何做? Systemverilog对经典的reg数据类型进行了改进,使得它除了作为一个变量以外,还可以被连续赋值、门单元和模块所驱动。为了与寄存器类型相区别,这种改

    2024年02月15日
    浏览(38)
  • Systemverilog中processes的记录

    Processes general: Structured procedures (initial procedures, always procedures, final procedures, task, function) Block statements (begin-end sequential blocks, fork-join parallel blocks) Timing control (delays, events, waits, intra-assignment) Process threads and process control 1. always_comb 和 always @* 的区别 always_comb在time zero时会自动执行

    2023年04月09日
    浏览(35)
  • C和SystemVerilog联合仿真

    想要联合仿真一个c程序和verilog表示的硬件,可以用如下方法(DPI): 先写一个.c文件 funcs.c 再写一个SystemVerilog文件 运行 即可 参考: https://stackoverflow.com/questions/26861400/systemverilog-how-to-connect-c-function-using-dpi-call-in-vcs-simulator

    2024年02月10日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包