ee_king的个人空间 https://blog.eetop.cn/1494617 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Analysis Components & Techniques(从Using MATLAB as Scoreboard checker开始)

已有 1018 次阅读| 2018-12-28 13:57 |系统分类:芯片设计

   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

            
      


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 6

    评论
  • 访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-25 16:24 , Processed in 0.021847 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部