目录
一.systemVerilog和Verilog读取环境变量$ENV
一.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). 代码如下:
(b).编译并运行:
(c).运行结果
(d).注意
代码Line9 的display不能直接打印宏 `TMP,只能转为tmp_t的string格式才能打印,预定义宏`SIM 传进来的就是string是可以的
以下代码也是ok的,和上面代码区别在于将WAVE_FIRMWARE定义为macro而不是string类型变量
Highlight为打印结果
(e).不足之处
+define只能在compile阶段传入,./simv阶段无法传入,而$value$plusargs只在./simv阶段传入
2.$value$plusargs获取环境变量
$value$plusargs只在./simv阶段传入
运行命令:
或通过两步
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