在verilog或者systemverilog中通过systemverilog获得环境变量setenv,getenv

在芯片验证的仿真中,有时候需要从文件中加载一些数据,比如激励、初始化数据、code等等,这些文件路径可以用绝对路径,当然为了其他人也可以用,最好用相对路径,这就需要用到环境变量来做路径的前半段。

在module中得到或设置系统环境变量需要用到systemverilog的DPI-C,import C函数,然后在module中的块语句中调用C函数。

步骤如下:

1. 在要获得环境变量的文件中 import setenv和getenv

如下所示,把这两个函数import进去,不需要定义对应的C函数

import "DPI-C" function int setenv(input string env_name, input string env_value, input int overwrite);
import "DPI-C" function string getenv (input string env_name);

2. 直接使用getenv, setenv来获得和设置环境变量

module mem read(
    input [8*200-1: O] mem_file
);
initial begin
    $display("mem_file is %Os", mem_file);
end 
endmodule

module dut (
    input clk,
    input wire [31:0]addr,
    output [31:0] rdata,
    input [31:0] wdata,
    input wire wr
);

string path;

initial begin

    setenv("PRJDIR", "/project/uart", 1);
    path = getenv( "PRJDIR");
    $display("PRJDIR is %Os", path);

    setenv( "PRJDIR", "/project/sp", 1);
    path = getenv( "PRJDIR");
    $display("PRJDIR is %0s", path);
end

mem_read u_mem_rd(.mem_file(path));

endmodule

 

扫描二维码关注公众号,回复: 16339207 查看本文章

猜你喜欢

转载自blog.csdn.net/m0_38037810/article/details/126136552