Analysis Components & Techniques(從Matlab/Integration開始)

上一篇 / 下一篇  2018-12-28 08:39:41

   Matlab/Integration

  Using MATLAB with UVM/OVM     

      MATLAB是一種建模工具,通常用于開發復雜數學函數的函數模型,然后將其轉換為RTL庫塊。雖然將MATLAB函數轉換為RTL是一個單獨的主題,但在驗證過程中使用MATLAB源代碼的能力可以顯著的縮短開發驗證測試平臺的時間。有關MATLAB及其各種功能的信息,請訪問Mathworks網站。 ()。
       本文希望用戶對使用MATLAB來開發算法是熟悉的,并了解如何在MATLAB環境中編寫,組織和運行MATLAB代碼。此外,使用MATLAB需要單獨的MATLAB licenses,包括本文中提到的任何MATLAB工程工具箱或功能(特別是EDA Simulator Link)的licenses。
       現有的MATLAB函數可用于在RTL可用之前作為DUT進行初始Testbench開發,以及用于驗證DUT功能的記分板的一部分。
       MATLAB提供了幾種使用MATLAB函數的不同機制。每種方法都有優點和缺點,應根據用戶的具體需要選擇使用哪種方法。
       MATLAB提供以下功能:
       - 與HDL仿真器并行運行MATLAB以執行MATLAB計算;
       - 使用MATLAB函數作為包含MATLAB函數的Verilog模塊;
       - 將MATLAB函數編譯為共享庫,允許使用SystemVerilog DPI調用函數;
       - SystemC TLM2與MATLAB通信;
       最后兩種方法有些復雜,下面僅簡要討論。本文附帶的示例僅演示了前兩個功能。

  MATLAB in parallel with the HDL simulator

      與創建共享庫類似,可以與HDL模擬器并行運行MATLAB引擎。這種方法比創建共享庫更容易,因為MATLAB函數直接在MATLAB引擎中運行,不需要單獨的編譯步驟。但是,用戶需要一組類似的DPI函數來啟動MATLAB引擎,加載MATLAB代碼并提供仿真器和MATLAB引擎之間的數據轉換。通常,用戶可以使用命令字符串將MATLAB命令發送到MATLAB引擎并讀取生成的輸出緩沖區。然后可以解析輸出緩沖區以讀取正確的刺激響應并在記分板內進行檢查。

  MATLAB functions as a DUT

       MATLAB提供了將HDL shell模塊連接到MATLAB函數的功能。這種稱為EDA Simulator Link的功能(www.mathworks.com/products/eda-simulator [2])將與HDL仿真器并行運行并提供DUT功能。MATLAB函數的輸入和輸出是DUT端口,通過調用相應的MATLAB子函數執行任何內部功能。

  MATLAB shared libraries

      MATLAB提供了一個編譯工具(mcc),它將MATLAB文件(.m)文件編譯成共享庫。作為此過程的一部分,它將創建共享庫文件(.so)和頭文件(.h)以啟用共享庫。要與共享庫進行通信,MATLAB需要使用現有的MATLAB矩陣函數。要啟用與MATLAB庫的簡單DPI通信,需要開發一個中間包裝函數,以提供從DPI數據類型到MATLAB矩陣值的轉換。
       這種編碼可能有些復雜,因為將DPI變量轉換為必需的MATLAB矩陣值可能需要一些工作量。并行使用MATLAB引擎更容易,它提供了通過MATLAB shell命令調用MATLAB函數的能力。該技術將在下一節中介紹。

  MATLAB communication with TLM2 transactions

       MATLAB提供了通過TLM2事務與SystemC環境進行通信的功能。在OVM / UVM中使用此方法需要從OVM / UVM < - > SystemC TLM2 < - > MATLAB進行轉換。由于額外的SystemC編碼要求,除非用戶已在使用TLM2 SystemC組件,否則不建議這樣做。

  MATLAB Integration Example

      下面提供了一個完整的示例,演示了將MATLAB與UVM環境結合使用的兩種方法。該示例包含三個單獨的使用模型。第一種是純UVM環境,它使用Verilog DUT和UVM Testbench以及標準的UVM行為記分板。第二部分用一個模塊替換Verilog DUT,該模塊使用MATLAB函數代替DUT行為。第三部分用MATLAB函數替換UVM Scoreboard predict_response()函數。

  Using MATLAB as a DUT with EDA Simulator Link

       對于我們示例的第一階段,我們將使用簡單的8位加法器MATLAB函數作為DUT。這將使用簡單的MATLAB函數和EDA Simulator Link功能來完成,以在Questa和MATLAB之間提供HDL通信。

        ml_adder.m

        我們創建了一個MATLAB函數ml_adder,它接受兩個整數,讓它們相加并存儲結果。它還將結果輸出到MATLAB顯示,以便我們可以在需要時將結果解析回Questa。
        MATLAB源代碼如下所示:

        function r = ml_adder(in0, in1)

        %MATLAB function to implement a simple adder
        %

        r = in0 + in1;

        % Print out the results to the MATLAB buffer
        str = sprintf('%d', r);
        disp(str);

        % [EOF] ml_adder.m

        hdl_adder.m

        為了將我們的ml_adder函數用作DUT,我們創建了一個MATLAB包裝器函數,我們可以將其連接到HDL模塊。EDA Simulator Link工具箱提供位向量和內部MATLAB數據類型之間的轉換功能。
        MATLAB源代碼如下所示:

        function [iport,tnext] = hdl_adder(oport, tnow, portinfo)
        % Demonstration for MATLAB Connectivity
        % This function uses the HDL Simulator Link methodology to get HDL port values
        % into and out of this function
        %
        tnext = [];
        iport = struct();

TAG:

 

評分:0

我來說兩句

顯示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日歷

« 2019-02-13  
     12
3456789
10111213141516
17181920212223
2425262728  

數據統計

  • 訪問量: 22497
  • 日志數: 75
  • 建立時間: 2018-09-03
  • 更新時間: 2018-12-29

RSS訂閱

热血江湖私服 天龙八部私服 魔域私服 幸运飞艇官网 幸运飞艇官网 热血江湖私服 热血江湖私服 热血江湖私服 魔域私服 魔域私服