systemverilog學習(2)interface


本節主要內容:testbench與design的連接,verilog連接testbench與design的方法,SV的interface,stimulus timing,clocking blocks,timing region,program block。(感覺很抽象)

一:design與testbench的連接

  

1:連接符號

  .*

  .name(wire_name)  :verilog中使用方法

  interface

2:verilog連接方式

  

3:sv連接方式

  (1).*   通配符,對相同名字自動匹配

    要求:有相同的名字,位寬相同

    例如:

     

   (2).name

     相同名字與相同位寬,可以直接使用.name;括號內可省略

   (3)interface

    當名字不同時,上述方法不方便;而且若使用verilog方法,每個端口都要寫,在復雜設計中很冗余;在sv里我們引入interface的概念

二:interface

  

 1:定義

  新的端口類型,將多種信號group一起,信息封裝,重用。聲明一次即可

2:使用

  

  在interface里面聲明信號,clk是外部輸入的信號,內部信號為logic信號,為異步信號;

  在top層內例化,如上圖,現例化arbif這個interface,在使用該interface;

  arbif.clk可訪問里面的clk的信號;

3:interface可用於設計

4:interface-modport

  提供了另外一種interface信號,是modport的簡寫;一個interface里面可有多種modport的定義

  例如:modport TEST (output request,reset,

             input grant,clk );

   

  設計中使用modport:module arb(arb_if.DUV arbif);

5:總結

 可以包含function;不僅僅是線的集合;在系統集成上較方便;可加上協議檢查;

 不包含hierarchy結構(不能再interface里面聲明一個module)

三:stimulus Timing & Clocking Blocks

  在design與testbench之間易產生競爭冒險的情況,例如不滿足Tsetup的要求;可以通過提前驅動信號,滯后采樣信號(同步)來避免。

1:在interface里面建模,在適當時間驅動,采樣信號;驅動信號不能太晚,采樣信號不能太早;

  testbench與design要分離開;

  一般驅動在時鍾沿前,采樣在時鍾沿后;

2:Clocking Block模塊

  為避免競爭冒險,interface里面使用clocking block模塊;

  **cb(clocking block簡稱以下)模塊里的任何信號的驅動與采樣都使用了同步的思想;

  **cb模塊只能用於驗證,不能用於設計

  **一個interface里面可包含多個cb模塊

3:實現機理

  使用cb,默認有 default input #1step output #0;(skew)

4:skew

  input skew在時鍾沿前有延時,output skew在時鍾沿后有延遲

 5:cb模塊的使用(偽代碼)

  interface arb_if(input bit clk)

   clocking cb @(posedge clk)

     output request;

     input grant;

   endclocking  //cb里面的信號都是同步信號

  modport TEST(clocking cb,output reset) //表示使用cb里面的同步信號

  endinterface

//使用cb信號

  arb_if arbif;//聲明一個interface

  arbit.cb.request <= 2'b01; //驅動一個信號使用非阻塞賦值;采樣一個信號用阻塞賦值

6:同步到信號

  @arbif.cb.grant; @(posedge arbif.cb.grant); ##2 arbif.cb.request <= 0(等待2個時鍾周期);

 7:驅動信號非阻塞,采樣信號阻塞

  

四:Timing Region

  

 1:包含

  active region:design區,design區可分為四個區(RTL的四個Time Region)

  observed region:assertion區

  reactive region:testbench區

  postpone:sample區,采樣所有設計的信號

2:interface采樣區是在postpone,在時鍾沿后采樣時鍾前的數據

  

  波形如下圖:

  

3:interface驅動,在時鍾沿前驅動,時鍾沿后得到信號的值

   

  輸出波形,這也就是非阻塞賦值的原因

  

五:program block

  將OOP與DUT通過interface連接起來;在program里面可以跑設計。

 1:類似於module,可包含代碼,變量等;

  沒有hierarchy結構

 2:例子

  

 3:總結

  不能有module hierarchy,可以有class hierarchy;

  代碼在initial塊中執行,不能在always塊;

  在reactive區執行

六:一個完整的testbench模板

  頂層設計:

    

  子模塊:

    

 說明:

  top層在active區執行,program在reactive區執行,這樣可以避免race。

    

 

 

  

   

 

 

 


免責聲明!

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



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