在modelsim搭建uvm验证环境时,出现以下错误:can't locate a C/C++ compiler for 'DPI Export Compilation '。
这是因为modelsim没有gcc编译环境导致的,解决方法如下:
(1)下载modelsim-gcc-4.5.0-mingw64.zip编译器,注意根据自己的情况选择32位还是64位的版本。
(2)解压后,将modelsim-gcc-4.5.0-mingw64文件夹中的所有子文件夹(bin、include、lib、lib64等)拷贝,放在modelsim安装路径下,如果有则覆盖。下图是将这些文件夹放在modelsim安装路径下的截图。
(4)配置环境变量。打开控制面板——>系统和安全——>系统——>高级系统设置——>环境变量——>用户变量。找到path,点击“新建”,将modelsim安装目录下bin文件夹路径添加进来。
(5)电脑重启。打开modelsim后,在命令行窗口输入:g++ --version。会显示g++的版本等信息。配置成功。
(6)下载并解压uvm-1.2的库文件,我将它放在F:/modelsim_workspace/uvm_learning
(7)准备好相应的tb和dut文件,开始运行uvm环境。相应的命令如下,将UVM_HOME、WORK_HOME替换为自己的路径即可,tb文件名、dut文件名替换成自己的即可。直接在modelsim的命令行窗口将下面的命令复制过去即可。
cd F:/modelsim_workspace/uvm_learning/chapter346
vlib work
set UVM_HOME F:/modelsim_workspace/uvm_learning/uvm-1.1d/uvm-1.1d
set WORK_HOME F:/modelsim_workspace/uvm_learning/chapter346
vlog +incdir+$UVM_HOME/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF $UVM_HOME/src/uvm_pkg.sv $WORK_HOME/dut.sv top_tb.sv
vsim -c -sv_lib F:/tools/Modelsim/setup/uvm-1.2/win64/uvm_dpi work.top_tb +UVM_TESTNAME=my_case0
最后一条指令:vsim -sv_lib F:/tools/Modelsim/setup/uvm-1.2/win64/uvm_dpi work.top_tb +UVM_TESTNAME=my_case0,如果在wave窗口未显示波形,则将
+UVM_TESTNAME=my_case0 ,在top_tb替换为中run("my_case0")。
`timescale 1ns/1ps
`include "uvm_macros.svh"
import uvm_pkg::*;
`include "my_if.sv"
`include "my_transaction.sv"
`include "my_sequencer.sv"
`include "my_driver.sv"
`include "my_monitor.sv"
`include "my_agent.sv"
`include "my_model.sv"
`include "my_scoreboard.sv"
`include "my_env.sv"
`include "base_test.sv"
`include "my_case0.sv"
module top_tb;
reg clk;
reg rst_n;
reg[7:0] rxd;
reg rx_dv;
wire[7:0] txd;
wire tx_en;
my_if input_if(clk, rst_n);
my_if output_if(clk, rst_n);
dut my_dut(.clk(clk),
.rst_n(rst_n),
.rxd(input_if.data),
.rx_dv(input_if.valid),
.txd(output_if.data),
.tx_en(output_if.valid));
initial begin
clk = 0;
forever begin
#100 clk = ~clk;
end
end
initial begin
rst_n = 1'b0;
#1000;
rst_n = 1'b1;
end
initial begin
run_test("my_case0");
end
initial begin
uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.drv", "vif", input_if);
uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.i_agt.mon", "vif", input_if);
uvm_config_db#(virtual my_if)::set(null, "uvm_test_top.env.o_agt.mon", "vif", output_if);
end
endmodule