Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用DPI-C嵌入Systemverilog解释器?_C_System Verilog_Verification_System Verilog Dpi - Fatal编程技术网

如何使用DPI-C嵌入Systemverilog解释器?

如何使用DPI-C嵌入Systemverilog解释器?,c,system-verilog,verification,system-verilog-dpi,C,System Verilog,Verification,System Verilog Dpi,问题描述: 我用SystemVerilog进行设计,并用同一种语言编写测试台。我希望能够编译我的设计,并在模拟过程中测试不同的功能,就像你在e。理想情况下,当模拟器碰到某条线路时,我会在模拟时弹出一个终端 潜在想法: 我看过DPI-C,似乎我必须“导出”项目中的所有任务,以便从解释器运行它们。然而,我不知道如何自动完成,或者是否有更好的方法。此外,我不知道如何让C打开第二个shell,让我在其中输入SystemVerilog任务(我想运行) 这是一个我的同事们都认同的问题,如果在编译一个测试台之

问题描述

我用SystemVerilog进行设计,并用同一种语言编写测试台。我希望能够编译我的设计,并在模拟过程中测试不同的功能,就像你在e。理想情况下,当模拟器碰到某条线路时,我会在模拟时弹出一个终端

潜在想法

我看过DPI-C,似乎我必须“导出”项目中的所有任务,以便从解释器运行它们。然而,我不知道如何自动完成,或者是否有更好的方法。此外,我不知道如何让C打开第二个shell,让我在其中输入SystemVerilog任务(我想运行)


这是一个我的同事们都认同的问题,如果在编译一个测试台之间不必等待10分钟,生活就会轻松得多。

去模拟器的交互式命令行终端怎么样。这不是典型的shell终端,例如来自unix的shell终端。这是一种绑定到模拟器中的供应商指定的交互模式。在大多数情况下,它是由Verilog的
$stop
触发的。它是特定于供应商的,因此您需要参考手册了解所有功能,有些功能确实允许调用Verilog/SystemVerilog中定义的任务和功能

听起来您不需要在一个模拟中运行所有条件。一次编译多次运行策略应该适合您的情况。SystemVerilog系统函数
$test$plusargs
$value$plusargs
可以检测用于启动模拟的参数。参见§21.6命令行输入

然后编译一次,并根据需要多次启动模拟

% [compile-cmd]
% [sim-cmd] +TESTID=0
% [sim-cmd] +TESTID=3
% [sim-cmd] +TESTID=1
% [sim-cmd] +TESTID=2

最好的选择可能是将DPI与某种脚本语言一起用于测试。 例如,我很好地看到了这项工作: Python >升压.python > C++ +> dPI-> verilog/System verilog < /P>
它确实限制了您在测试中可以做的事情(将其作为两种语言之间的TLM接口,即只在它们之间来回传递事务),但实际上这通常会迫使您使用良好的抽象实践。阅读Python中的“yield”,了解如何在Python和模拟器之间来回传递控制。

嗨,我用另一个例子来说明我的两分钱

范例 SV-CODE

////////////////////////////////////////////////////////////////////////
//从C导入函数DPI声明
////////////////////////////////////////////////////////////////////////            
导入“DPI-C”函数void python\u sign\u msg(字符串键文件名、字符串消息文件名、字符串签名文件名);
导入“DPI-C”函数字符串返回_字符串_in_C(字符串文本,输入输出字符串输出_txt);
typedef类钥匙控制手柄;
//-----------------------
类keycontrol_predictor#(int-PARAM_占位符=1)扩展了pve_predictor#(keycontrol_-seq_句柄)//扩展uvm_分量;
………..
//////////////////////
//新闻部的使用
//////////////////////
字符串输出_c,输出2_c;
output_c=返回_c中的_字符串_(“此文本”,output2_c); 
python_sign_msg(“file.txt”、“bla”、“blo”);

endclass
Hi Joniale,在为SV代码添加SV top模块后,我复制了您的代码并尝试在VCS中运行它。对于VCS,C编译命令可以正常工作,但在尝试运行VCS精化时,出现了一个错误,即找不到“sv_top”模块。带有命令和错误的代码位于:您必须在提供的VCS命令行中替换特定top的top。如您所见,提供的SV代码是一个snip代码,它不是top的顶层,而是top的子模块。因此,请将“keycontrol\u tb\u top”更改为SV top模块名称。顺便说一下,在C中嵌入phyton的一个不错的教程是:
% [compile-cmd]
% [sim-cmd] +TESTID=0
% [sim-cmd] +TESTID=3
% [sim-cmd] +TESTID=1
% [sim-cmd] +TESTID=2