首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Verilog/System Verilog中读取环境变量?

如何在Verilog/System Verilog中读取环境变量?
EN

Stack Overflow用户
提问于 2013-02-23 06:08:07
回答 4查看 21.2K关注 0票数 8

如何在Verilog中读取环境变量?(在VCS模拟器上运行)

我正在努力完成

代码语言:javascript
运行
复制
File=$fopen("$PATH/FileName","r");

$PATH是一个环境变量。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-27 11:15:27

您可以简单地使用SystemVerilog DPI来获取环境。而且因为getenv是每个POSIX平台的标准C库,所以您不需要为函数定义再次实现您自己的getenv()等价函数。

示例代码在SV中。

代码语言:javascript
运行
复制
import "DPI-C" function string getenv(input string env_name);

module top;

  initial begin
    $write("env = %s\n", {getenv("HOME"), "/FileName"});
  end
endmodule

正在运行

代码语言:javascript
运行
复制
ncverilog -sv dpi.v

代码语言:javascript
运行
复制
vcs -sverilog dpi.v

它会显示出来的

代码语言:javascript
运行
复制
env = /home/user/FileName

在你的原始问题中还有一个问题,PATH是一个用于搜索可执行文件的环境,path和连接字符是":“。我认为这应该是一个例子,而不是真正的“路径”环境。否则,您的fopen文件名可能是"/bin:/usr/bin:/usr/local/bin/FileName",这是错误的。

票数 13
EN

Stack Overflow用户

发布于 2013-02-23 08:30:59

您可以使用简单的PLI应用程序来读取环境变量。下面是一个没有任何错误检查的示例:

代码语言:javascript
运行
复制
#include <stdlib.h>
#include <string.h>

#include "vpi_user.h"

PLI_INT32 pli_getenv (PLI_BYTE8 * arg) {

    vpiHandle tf_obj = vpi_handle (vpiSysTfCall, NULL);
    vpiHandle arg_iter = vpi_iterate (vpiArgument, tf_obj);

    vpiHandle arg1, arg2;
    arg1 = vpi_scan (arg_iter);
    arg2 = vpi_scan (arg_iter);

    s_vpi_value vi, vo;
    vi.format = vpiStringVal;
    vpi_get_value (arg2, &vi);

    vo.format = vpiStringVal;
    vo.value.str = strdup (getenv (vi.value.str));
    vpi_put_value (arg1, &vo, NULL, vpiNoDelay);

    return 0;
}

VCS文档应该解释如何将其链接到模拟器中。

票数 2
EN

Stack Overflow用户

发布于 2013-07-17 01:00:38

使用Verilog预处理器通常更简单

代码语言:javascript
运行
复制
File = $fopen(`PATH_FILENAME, "r");

然后从您的Makefile/shell脚本调用模拟器,指定要替换的值

$(SIM) -DPATH_FILENAME=\"$PATH/FileName\" blah.v ...

我经常在伊卡洛斯的iverilog上使用它,vsim和朋友们可能也支持类似的功能。

由于预处理器不会在文字值中进行替换,因此会对引号进行转义,以便将它们包含在被替换的值中。例如,这种组合不起作用

代码语言:javascript
运行
复制
File = $fopen("`PATH_FILENAME", "r");

..。

代码语言:javascript
运行
复制
`$(SIM) -DPATH_FILENAME=$PATH/FileName blah.v ...`
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15034019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档