systemverilog interface雜記

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

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則明確了站在不一樣的角度對應信號的輸入輸出方向。經過虛擬接口的定義將以上內容封裝起來。url

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

clocking block,用來對同步信號進行採樣和驅動,能夠避免設計和驗證的競爭。clocking block須要指定一個時間,一般是posedgenegedge,同時還能夠爲塊中信號設置創建保持時間,在默認創建保持時間均爲1ns設計

以下面的例子所示:htm

...blog

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

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

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

相關文章
相關標籤/搜索