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語句,在接口實例化時進行重構


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM