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-01-12  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 19253
  • 日志数: 75
  • 建立时间: 2018-09-03
  • 更新时间: 2018-12-29

RSS订阅

Open Toolbar
魔域私服 魔域私服 魔域私服 魔域私服 魔域私服

<small id='5o1mh'></small><noframes id='ptjmg'>

  • <tfoot id='0dulz'></tfoot>

      <legend id='0t3g3'><style id='4vild'><dir id='0nn84'><q id='4yyc2'></q></dir></style></legend>
      <i id='t038f'><tr id='m1lxe'><dt id='h9abj'><q id='tkxn1'><span id='nx06y'><b id='doe1d'><form id='g60x8'><ins id='q4dh5'></ins><ul id='0cubh'></ul><sub id='lqyps'></sub></form><legend id='x3zw4'></legend><bdo id='smnyf'><pre id='16ou0'><center id='itjdk'></center></pre></bdo></b><th id='ro6t6'></th></span></q></dt></tr></i><div id='1e1mr'><tfoot id='6ts86'></tfoot><dl id='vgs3r'><fieldset id='tr7jz'></fieldset></dl></div>

          <bdo id='o6aff'></bdo><ul id='n40i5'></ul>