黄山网站建设哪家强,建设网站,前端开发人员,wordpress实现翻页效果1、添加源文件及tb文件
在目录下建立文件夹#xff0c;将DUT和Testbench添加进去#xff0c;文件夹内容如下所示#xff1a;
2、以《UVM实战》中的例子做简单的示例#xff1a;
2.1 设计文件 #xff1a;dut.sv 功能很简单#xff0c;即将接受到的数据原封不动发送出去…1、添加源文件及tb文件
在目录下建立文件夹将DUT和Testbench添加进去文件夹内容如下所示
2、以《UVM实战》中的例子做简单的示例
2.1 设计文件 dut.sv 功能很简单即将接受到的数据原封不动发送出去。 module dut(clk,rst_n, rxd,rx_dv,txd,tx_en);
input clk;
input rst_n;
input[7:0] rxd;
input rx_dv;
output [7:0] txd;
output tx_en;reg[7:0] txd;
reg tx_en;always (posedge clk) beginif(!rst_n) begintxd 8b0;tx_en 1b0;endelse begintxd rxd;tx_en rx_dv;end
end
endmodule2.2my_driver.sv 定义一个driver类它派生自uvm_driver。driver的主要功能在main_phase task中实现主要功能为向rxd管脚上发送随机数。uvm_info(“my_driver”, “data is drived”, UVM_LOW)为打印信息的宏。 ifndef MY_DRIVER__SV
define MY_DRIVER__SV
class my_driver extends uvm_driver;function new(string name my_driver, uvm_component parent null);super.new(name, parent);endfunctionextern virtual task main_phase(uvm_phase phase);
endclasstask my_driver::main_phase(uvm_phase phase);top_tb.rxd 8b0; top_tb.rx_dv 1b0;while(!top_tb.rst_n)(posedge top_tb.clk);for(int i 0; i 256; i) // 开始循环256次begin(posedge top_tb.clk);top_tb.rxd $urandom_range(0, 255); // 随机向rxd 上发送一个0~255的随机数top_tb.rx_dv 1b1; // 有效位,置1uvm_info(my_driver, data is drived, UVM_LOW)end(posedge top_tb.clk);top_tb.rx_dv 1b0; // 完成后有效位拉低
endtask
endif2.3top_tb.sv
timescale 1ns/1ns
include uvm_macros.svh // 包含宏定义import uvm_pkg::*; // 导入UVM库
include F:/modelsim_workspace/uvm_learning/test0/my_driver.svmodule top_tb;reg clk;
reg rst_n;
reg[7:0] rxd;
reg rx_dv;
wire[7:0] txd;
wire tx_en;dut my_dut(.clk(clk),.rst_n(rst_n),.rxd(rxd),.rx_dv(rx_dv),.txd(txd),.tx_en(tx_en));initial begin // 定义drv 并进行实例化my_driver drv;drv new(drv, null);drv.main_phase(null); // 调用drive的 main_phase$finish();
endinitial beginclk 0;forever begin#1 clk ~clk;end
endinitial beginrst_n 1b0;#10;rst_n 1b1;
endendmodule3、编写脚本 编写command.do脚本。
cd F:/modelsim_workspace/uvm_learning/test0vlib workset UVM_HOME F:/modelsim_workspace/uvm_learning/uvm-1.1d/uvm-1.1d set WORK_HOME F:/modelsim_workspace/uvm_learning/test0vlog 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 -sv_lib F:/tools/Modelsim/setup/uvm-1.2/win64/uvm_dpi work.top_tb
第一行通过cd切换到源文件所在目录第二行vlib命令用于建立一个新的工作库。在本例子中vlib work在当前目录建立work工作区文件夹运行后会在当前目录下找到work文件夹。设置UVM库的路径和工作文件夹。这里需要下载uvm-1.1d或者其他版本的库如下图所示。 4.vlog命令用于编译verilog代码编译systemverilog或者vhdl的命令参考modelsim user guide。
5.vsim表示运行仿真-sv_lib 对应uvm的一个路径。其中参数“-c”表示进入命令行模式如果没有该参数则表示进行GUI模式。vsim -sv_lib F:/tools/Modelsim/setup/uvm-1.2/win64/uvm_dpi work.top_tb uvm_dpi是modelsim安装目录下的动态链接库。
4、运行脚本开始仿真 在modelsim命令窗口键入 do F:/modelsim_workspace/uvm_learning/test0/command.do运行脚本。仿真界面和结果如下所示 5、手动编译uvm_dpi.dll 下载modelsim安装包解压安装后在modelsim安装目录下已经有编译好的uvm_dpi.dll有不同版本的可以根据需要调用为了避免麻烦和出错不需要手动编译uvm_dpi.dll也可以在uvm框架下实现仿真。
1.安装modelsim se 10.1a
2.下载uvm_1.1d 然后解压缩后拷贝到modelsim安装目录的../verilog_src/目录下我的目录是C:\software\modeltech_10.1a\verilog_src.这里注意拷贝过来之后打开uvm_1.1d文件夹应该能直接看到bin/docs/examples/src/等文件夹和几个txt文件。
3.配置系统环境变量。打开modelsim在vsim命令行下输入 vsim nset UVM_HOME c:/software/modeltech_10.1a/verilog_src/uvm-1.1d vsim nset MODEL_TECH c:/software/modeltech_10.1a/win32
(也可以设置为系统环境变量)
4.编译uvm_1.1d库文件。所谓编译库文件我的理解是将uvm_1.1d编译成windows中modelsim可以加载的dll文件因此这一个步骤是生成一个.dll文件的过程。这里需要GCC的编译命令最新的是modelsim-gcc-4.2.1-mingw32vc9 解压缩后复制到modelsim安装目录下我的复制目录是C:\software\modeltech_10.1a\gcc-4.2.1-mingw32vc9打开该文件后能够直接看到bin/doc/include/info/lib/libexec/man/share文件夹上面这些基本工作做完后就可以编译.dll文件了。
5.在vsim命令行下输入 vsim nc:/software/modeltech_10.1a/gcc-4.2.1-mingw32vc9/bin/g.exe -DQUESTA -W -shared -Bsymbolic -I $MODEL_TECH/../include $UVM_HOME/src/dpi/uvm_dpi.cc -o $UVM_HOME/lib/uvm_dpi.dll $MODEL_TECH/mtipli.dll -lregex 注意要先在$UVM_HOME目录下创建lib文件夹。
6.下载hello_world.sv 创建modelsim工程添加hello_world.sv文件。假设工程目录为 C:/modelsim_uvm/
7.编译Hello_world_example源文件 vsim nvlog incdir$UVM_HOME/src -L mtiAvm -L mtiOvm -L mtiUvm -L mtiUPF C:/modelsim_uvm/hello_world.sv
8.仿真Hello_world_example(需要调用刚刚编译的uvm_dpi.dll) vsim nvsim -c -sv_lib $UVM_HOME/lib/uvm_dpi work.hello_world_example
选run 100ns 参考UVM仿真环境搭建_fpga uvm_FPGA硅农的博客-CSDN博客 参考https://www.cnblogs.com/love29850706/p/6079367.html