sv interface高級用法


1、interface:

interface 中的信號必須聲明為logic,因為reg只允許在always塊中賦值,wire至允許assign賦值,bit是兩態,logic是四態的,且可以阻塞賦值也可以非阻塞賦值。

1、clocking block

clocking規定了信號之間的時序關系

// To wait for posedge of clock
@busIf.cb_clk;
 
// To use clocking block signals
busIf.cb_clk.enable = 1;

2、modport

modport明確了站在不同的角度對應信號的輸入輸出方向。

 

3. parametered interface

interface myBus #(parameter D_WIDTH=31) (input clk);
  logic [D_WIDTH-1:0] data;
  logic               enable;
endinterface

2、interface中定義task和function

  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

接口可以直接調用task,來完成信號的賦值。

3、interface中定義always塊

8bit10bit的轉換有專門的算法encode_8b10b完成。通常來說,可以在driver中完成這種轉換,並將串行的數據驅動到接口上:

==================================================================================================

 由於8b10b轉換的動作適用於任意要驅動的數據,換言之,這是一個“always”的動作,因此可以在interface中使用always語句: 

 

相應的,數據在driver中可以只驅動到interface的並行接口上即可: 

 ==================================================================================================

4、interface中定義initial 塊

interface  clk_rst_if();
    logic    clk;
    logic    rstn;
    initial begin
        clk <= 0;
        forever begin
            #5ns  clk <= !clk;
        end
    end

    initial begin
        #20ns ;
        rstn <= 1;
        #40ns ;
        rstn <= 0;
        #20ns ;
        rstn <= 1;
    end
endinterface

 

5、使用interface替代driver部分功能

上面的uvm實戰中的代碼用interface代替driver部分功能的舉例說明

第一個好處是可以讓driver從底層繁雜的數據處理中解脫出來,更加專注於處理高層數據。

第二個好處是有更多的數據出現在interface中,這會對調試起到很大的幫助。 interface可以查看信號的波形,但是uvm component中很難查看信號波形。

 


免責聲明!

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



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