Analysis Components & Techniques(從Using MATLAB as Scoreboard checker開始)

上一篇 / 下一篇  2018-12-28 13:57:27

   Using MATLAB as Scoreboard checker

  matlab_dpi.c

      為了利用MATLAB函數作為記分板檢查器,我們采用略微不同的方法,因為我們現在想直接從SV預測器代碼調用我們的MATLAB函數,而不是通過HDL包裝器進行通信。MATLAB提供了一個基于C的API,它允許您啟動MATLAB以及將MATLAB命令發送到MATLAB引擎并從輸出緩沖區讀回結果。為了簡化這些調用,我們創建了一個DPI包裝器庫來使用這些函數。該DPI模塊提供4種基本功能:
       int start_matlab(string cmd) - 使用給定的命令字符串啟動MATLAB。如果傳遞空字符串,則使用默認的“matlab”命令。如果成功,返回值不為零。
       int send_matlab_cmd(string cmd) - 將基于文本的命令發送到MATLAB以進行評估。您可以使用它來設置MATLAB變量,配置MATLAB或評估MATLAB函數。如果成功則返回0。
       string get_matlab_buffer() - 從最后發送的MATLAB命令獲取MATLAB輸出緩沖區。您可以使用它來評估先前發送的MATLAB命令。
       void stop_matlab() - 導致MATLAB引擎退出。
       matlab_dpi.c與任何其他DPI函數一樣編譯,并作為共享庫連接。它連接到兩個MATLAB庫(-leng和-lmx),它們提供MATLAB引擎功能和MX數據通信功能。另外,確保在$ LD_LIBRARY_PATH中有MATLAB庫目錄$ MATLAB / bin / <architecture>,以便找到所需的MATLAB庫。

        /*
         * matlab_dpi.c
         *
         * DPI Functions to enable SV communication to MATLAB
         */
         #include <stdlib.h>
         #include <stdio.h>
         #include <string.h>
         #include "engine.h"
         #define BUFSIZE 256

         Engine *ep;
         mxArray *T = NULL, *result = NULL;
         char buffer[BUFSIZE+1];

         int start_matlab(char *cmd)
         {
              if (!ep && !(ep = engOpen(cmd))) {
                    fprintf(stderr, "\nCan't start MATLAB engine\n");
                    return 0;
                }
               engOutputBuffer(ep, buffer, BUFSIZE);
               return 1;
           }

           int send_matlab_cmd(char *cmd)
           {
                return engEvalString(ep, cmd);
           }

           char *get_matlab_buffer()
           {
                  return buffer;
           }

           void stop_matlab()
           {
                   engClose(ep);
            }

  matlab_dpi_pkg.svh

         要在我們的UVM預測器中使用DPI,可以在需要時創建SystemVerilog包以進行import。

         // Package to define MATLAB DPI functions

         package matlab_dpi_pkg;

         import "DPI-C" function int start_matlab(string cmd);
         import "DPI-C" function int send_matlab_cmd(string cmd);
         import "DPI-C" function string get_matlab_buffer(); 
         import "DPI-C" function void stop_matlab();

         endpackage

            
      


TAG:

 

評分:0

我來說兩句

顯示全部

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

日歷

« 2019-02-10  
     12
3456789
10111213141516
17181920212223
2425262728  

數據統計

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

RSS訂閱

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