systemverilog interface雜記


隨着IC設計復雜度的提高,模塊間互聯變得復雜,SV引入接口,代表一捆連線的結構。

Systemverilog語法標准,新引入一個重要的數據類型:interface。

interface主要作用有兩個:一是簡化模塊之間的連接;二是實現類和模塊之間的通信;

 

接口(interface)為硬件模塊的端口提供了一個標准化的封裝方式。
用interface來封裝接口的信號和功能。
interface的定義是獨立於模塊的,通過關鍵字interface和endinterface關鍵詞來定義。
 
注意:
interface里面可以帶時鍾、斷言、任務(task)、函數(function)等定義。
一個interface 也可以有input,output或是inout端口。
當interface例化時,只有當變量或是線網聲明在一個interface的端口列表中才能通過名字或是位置來互連。
interface是可綜合的。
 
 
一種新加的和interface有關系的構造體是Modport 。
它提供了module的interface端口和在特定的module中控制task和function使用的方向性信息。這些端口的方向可以在module中可以看到。
接口使用無信號的連接方式。
Modport將接口中信號分組並指定方向。就像下圖中的黑色矩形塊里面一樣,黑盒,我們從外面看並不關心Modport的定義,只需要考慮clk。
Systemverilog <wbr>interface

 
interface membus(input logic clk, output wor status);
 logic mrdy;
 logic wen;
 logic ren;
 logic [7:0] addr;
 logic [7:0] c2m_data;
 logic [7:0] m2c_data;
 
 task reply_read(input logic [7:0] data, integer delay);
   #delay;
   @(negedge clk)
   mrdy=1'b0;
   m2c_data=data;
   @(negedge clk)
   mrdy=1'b1;
endtask
 
 //Task和function可以定義在interface中,從而允許構造更抽象級的模型
 
 task read_memory(input logic [7:0] raddr, output logic [7:0] data);
   @(posedge clk);
   ren=1'b0;
   addr=raddr;
   @(negedge mrdy);
   @(posedge clk);
   data=m2c_data;
   ren=1'b1;
 endtask
 
modport master(output wen, ren, addr, c2m_data, input mrdy, m2c_data, status, read_memory);
modport slave(input wen, ren, addr, c2m_data, output mrdy, m2c_data, status, reply_read);
//控制task和function使用的方向性信息,以便在下面的module中使用
 
endinterface
 

總的來說,interface指明了TBDUT之間的連接信號,clocking規定了信號之間的時序關系,而modport則明確了站在不同的角度對應信號的輸入輸出方向。通過虛擬接口的定義將以上內容封裝起來。

接口interfacemodule,program一樣,都是層次化結構,主要用來完成設計module和驗證program之間的連接。interface中有兩個重要的功能塊clocking blockmodport

clocking block,用來對同步信號進行采樣和驅動,可以避免設計和驗證的競爭。clocking block需要指定一個時間,通常是posedgenegedge,同時還可以為塊中信號設置建立保持時間,在默認建立保持時間均為1ns

如下面的例子所示:

...

clocking msclk_cb @(posedge clk); //clocking block塊定義

default intput #setup output #holdtime; //輸入建立時間,輸出保持時間設定

intput xxxxx;

output xxxx;

...

endclocking

...

modport block,對於同一個接口,不同的事物處理器可能會有不同的視角,比如對driver而言是輸出的信號,在driver_monitor看來則是輸入信號,所以可以引入modport來聲明端口模塊。

 

默認情況下interface的所有信號都是異步的

可以通過clocking block定義一組信號與時鍾同步

modport定義與test的連接。

 

 

關於interface的實例化:

1,在moule中,可以直接實例化,

即my_if input_if;

2,在class中,需要使用virtual interface來實例化。

即 class my_driver extends uvm_driver

      virtual my_if vif;

      XXXXX;

  endclass

 

 

 


免責聲明!

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



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