VCS编译传递环境变量,VCS编译仿真实例,SV读取环境变量

目录

 

一.systemVerilog和Verilog读取环境变量$ENV

1.使用VCS编译的预定义MACRO传入环境变量

Highlight为打印结果

2.$value$plusargs获取环境变量

3.DPI-C使用getenv


一.systemVerilog和Verilog读取环境变量$ENV

systemVerilog和verilog不能直接读取$ENV,有两种方法:

1.使用VCS编译的预定义MACRO传入环境变量

传入格式如下:

假设$SIM=/home/user

加上\"是因为如果直接+define+SIM=$SIM+那么宏 `SIM=/home/user,这并不是一个string,SV无法处理,而加上\"

宏 `SIM = "/home/user",传进去的就是一个string。

(a). 代码如下:

VCS编译传递环境变量,VCS编译仿真实例,SV读取环境变量_第1张图片

(b).编译并运行:

(c).运行结果

(d).注意

代码Line9 的display不能直接打印宏 `TMP,只能转为tmp_t的string格式才能打印,预定义宏`SIM 传进来的就是string是可以的

VCS编译传递环境变量,VCS编译仿真实例,SV读取环境变量_第2张图片

以下代码也是ok的,和上面代码区别在于将WAVE_FIRMWARE定义为macro而不是string类型变量

Highlight为打印结果

(e).不足之处

+define只能在compile阶段传入,./simv阶段无法传入,而$value$plusargs只在./simv阶段传入

2.$value$plusargs获取环境变量

$value$plusargs只在./simv阶段传入

运行命令:

或通过两步

VCS编译传递环境变量,VCS编译仿真实例,SV读取环境变量_第3张图片

3.DPI-C使用getenv

import "DPI-C" function string getenv(input string env_name);

module top;

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

其中getenv("HOME")返回$HOEM定义的字符串"/home/user",{,}是SV中将两个string串联。

运行

ncverilog -sv dpi.v

要么

vcs -sverilog dpi.v -R

打印结果为

env = /home/user/FileName

 

你可能感兴趣的:(soc,Tools)