首页 > 解决方案 > 使用 SNPS VCS 工具在 System verilog 中使用 MATLAB 脚本

问题描述

我已经使用 MATLAB R2019 脚本编写了一个算法,我希望在系统 verilog 文件中调用它,即 matlab 脚本生成的输出实际上是要输入到使用 SV 编写的测试台中。我不想使用 HDL 编码器工具,因为该算法非常复杂,并且在 SV/C 中重新编码非常困难。我使用 synopsys VCS 工具进行编译和阐述。我的问题是: 1. 是否可以在用 SV 编写的测试平台中调用 MATLAB 脚本?我听说过 DPI,但对它没有太多想法,也没有研究过它。2. MATLAB 脚本的输出是否可以存储在单独的文件中,例如一个文本文件,我可以在我的 SV 测试台中调用该文件。?

标签: matlabverilogsystem-veriloghdl-coder

解决方案


按顺序回答你的问题,确实是可以的。

您需要执行以下操作:

  1. 在 SV 中,导入您将根据需要调用的 C 函数 (extern DPI-C)。假设我们称之为 callMatlabFn

  2. 在 C 中,定义一个名为 callMatlabFn 的外部函数。这实际上将调用您的 matlab fn。看看这里在 C 中调用 matlab:https ://www.mathworks.com/help/matlab/matlab_external/call-matlab-functions-from-c-1.html

  3. 请注意,您可以通过 DPI 返回数据,但这可能具有不同的含义。最好通过输出 arg 中的引用将 SV 中的任何数据返回到导入的 fn。

最后,SV 中的文本文件 I/O 是通过以下系统任务实现的:

$fopen (file_name) ;   
$fclose (file_name) ;   
$fdisplay (arguments) ;
$fwrite (arguments) ;    
$fstrobe (arguments) ;    
$fmonitor (arguments) ;    
$readmemb ("file", memory_identifier [,begin_address[,end_address]]) ;    
$readmemh ("file", memory_identifier [,begin_address[,end_address]]) ;

推荐阅读