zoukankan      html  css  js  c++  java
  • Systemverilog for design 笔记(七)

    转载请标明出处

    第一章 接口(interface)

    1.1.    接口的概念

    接口允许许多信号合成一组由一个端口表示。

    1.2.    接口声明

    //接口定义

    Interface main_bus (input logicsig_a, sig_b);         //sig_a , sig_b是接口的输入

             Wire sig_c ;

             Logic sig_d;

             …

    Endinterface

    //顶层网表

    module top (input logic clock, resetN, test_mode);
    logic [15:0] program_address, jump_address;
    logic [ 7:0] instruction, next_instruction;
    main_bus bus (                                         //接口实例化
    .sig_a (sig_a),                                           //分立信号连接到接口实例
    . sig_b (sig_b)
    );

    processor proc1 (                                                   //模块实例化
    .bus(bus),                                                  //接口连接,

                  .jump_address(jump_address));          //其他接口

    也可以用.name 和.* 连接

    当接口定义在$unit中时,全局定义;当接口声明在模块内部时,局部定义

    1.3.    将接口用作模块端口(可综合)

    l  显示命名的接口端口     module <module_name> (<interface_name> <port_name>);

    l  通用接口端口                   module <module_name> (interface <port_name>);

    显示命名的接口端口只可以连接到同一名称的接口上;而任何接口可以连在通用接口端口上

    1.4.    接口的实例化和连接

    接口实例化的语法与模块实例化相同;接口类型的端口如果没有连接是非法的

    接口端口可连接到另一个接口

    1.5.    接口内部信号的引用

    接口内部信号可以通过端口名引用:<port_name>.<internal_interface_signal_name>

    1.6.    接口的modport

    Module port——modport可以定义接口信号的不同接入方式(方向)

    Modport定义中不包含向量位数和类型,这些信息是在接口的信号类型声明中定义的。

    Modport声明位置:interface定义内

    Modport声明只定义 连接模块将信号是看成input/output/inout还是ref

    1.6.1.      指定使用哪种modport方式(可综合)

    l  在模块实例的接口连接中说明     <接口实例名>.<modport_name>

    //module中已实例化接口,模块定义时端口声明用接口名称

    l  在模块定义的端口声明时说明     <接口名称>.<modport_name>

    // module中已实例化接口,模块实例化时端口连接用接口实例名

     

    l  没有指定modport时接口的连接:

    因为本身interface的声明是没有内部信号的方向的,又没有modport指明信号方向,因此此时内部信号中——线网信号默认为inout;变量默认为ref

    1.6.2.      使用modport定义不同的连接

    在接口中定义不同的modport,模块访问某个特定modport时其他接口中的信号不可见

    1.7.    在接口中使用任务和函数(method)

    接口可以包含功能描述,比如通信协议等。

    SV可以在接口中声明任务和函数,

    这些任务和函数可以作为接口方法(Interface methods)来引用

    • 接口方法的导入:(当从另一模块到导入任务或函数时使用方法B)(可综合)

    u  使用函数和任务的名称导入modport in ( import <任务或函数的名称> );

    u  使用函数和任务的完整原型导入(形参包含方向)

    modport modport_name(import task <任务名>(<任务的形式参数) );

    modport modport_name(import function <函数名> (<函数的形式参数>) );

    u  导入的接口方法的调用:<接口的端口名>.<方法名>

    • 导出任务和函数(不可综合)

    Modport modport_name(export <任务或函数的名称>);

    或通过在接口中声明函数或任务时使用关键词extern可以将他们导出到整个接口

                       Extern forkjoin允许导出任务的多重实例

    1.8.    接口中的过程块

    接口可以包含always, always_comb, always_ff, always_latch, initial/final过程块, assign 语句.

    接口中的过程块一般用于验证

    1.9.    可重构接口

    接口可以使用参数重定义和generate语句,在接口实例化时进行重构

  • 相关阅读:
    mysql "The user specified as a definer ('root'@'%') does not exist" 问题
    mysql添加Federated引擎问题
    D7经典脚本[multi/handler]
    redhat7.4安装vertica-9.1.0教程
    批量在当前目录下所有的文件中添加指定字段
    mysql 水平分表技术
    linux普通用户提权
    两步完成利用procdump64+mimikatz获取win用户密码
    hibernate中对象的三种状态分析
    Hibernate 入门案例
  • 原文地址:https://www.cnblogs.com/daisyuer/p/9296082.html
Copyright © 2011-2022 走看看