2010-11-14 46 views
2

我需要从我写的E测试中调用Perl脚本。我需要创建一个ini文件调用C脚本,它将创建一个配置文件,我需要为我正在编写的测试进行配置。我希望测试调用将处理ini-> C-> config进程的Perl,然后继续测试。有任何想法吗?从specman执行perl

+1

什么是'E'?你真的需要E来调用Perl,而Perl要调用C(什么是C脚本)来创建一个配置文件? **简化**是我的建议。 – pmg 2010-11-14 16:29:52

+1

“e”是一种硬件验证语言。它最常见的实现(可能只有..)是Cadence的Specman。请参阅http://en.wikipedia.org/wiki/Specman – 2010-11-14 22:20:25

+0

仅供参考,Specman没有Perl API。只有C和C++ API才能用Specman编译代码。 – 2010-11-14 22:22:28

回答

4

您可以使用功能systemoutput_from执行系统调用或shell命令。这可以用来执行任意命令,包括Perl的调用。 system函数返回shell调用的返回值,而output_from返回标准(也许标准错误...检查您的文档..)。

实例:

var ret := system("echo hello world"); 

打印到的Specman屏幕/日志文件

hello world 

鉴于output_from使用等:

var std_out := output_from("echo hello world"); 
print std_out; 

和打印:

std_out = "hello world" 

函数带有一个字符串,因此您可以使用append()appendf()函数构建参数。

小问题:您可以使用simulator_command(cmd_str)直接与模拟器命令行界面对话。我之前曾经使用过这个软件与Synopsys的VCS进行对话

simulator_command("quit"); 
+0

有什么办法可以同时获得输出和返回值吗? – 2010-11-16 06:27:55

+0

'output_from_check()' - 它就像'output_from()'一样执行,除非命令返回非零值,否则会引发错误。如果您需要能够处理错误情况,那么您需要用'try {} else {}'异常处理程序对其进行封装。这不会让你得到确切的返回值,但它可以让你检测和处理失败的系统调用。 – 2010-11-17 17:50:53