uvm仿真

uvm仿真


本文目的在于win环境快速采用modelsim进行仿真,不研究具体语法。
代码来源:张强老师的书
写的非常细https://course.cmpreading.com/web/globalSearch/index?condition=uvm&check_type=index

仿真步骤

工程文件如下所示
在这里插入图片描述
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) begin
   if(!rst_n) begin
      txd <= 8'b0;
      tx_en <= 1'b0;
   end
   else begin
      txd <= rxd;
      tx_en <= rx_dv;
   end
end
endmodule

非常简单的模块,tx、rx直连。

`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);
  endfunction
  extern virtual task main_phase(uvm_phase phase);
endclass

task my_driver::main_phase(uvm_phase phase);
  top_tb.rxd <= 8'b0; 
  top_tb.rx_dv <= 1'b0;
  while(!top_tb.rst_n)
     @(posedge top_tb.clk);
  for(int i = 0; i < 256; i++)begin
     @(posedge top_tb.clk);
     top_tb.rxd <= $urandom_range(0, 255);
     top_tb.rx_dv <= 1'b1;
     `uvm_info("my_driver", "data is drived", UVM_LOW)
  end
  @(posedge top_tb.clk);
  top_tb.rx_dv <= 1'b0;
endtask
`endif

该示例实现功能本质上仍然是initial中调用task
top_tb.sv

`timescale 1ns/1ps
`include "uvm_macros.svh"

import uvm_pkg::*;
`include "my_driver.sv"

module 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
  my_driver drv;
  drv = new("drv", null);
  drv.main_phase(null);
  $finish();
end

initial begin
  clk = 0;
  forever begin
     #100 clk = ~clk;
  end
end

initial begin
  rst_n = 1'b0;
  #1000;
  rst_n = 1'b1;
end

endmodule

纯命令行仿真

只要把库编译出来就算成功
在这里插入图片描述

前三行更改为自己的路径即可
run.do

vlib work
set UVM_HOME E:/FPGASeries/modelsim2020/verilog_src/uvm-1.1d
set WORK_HOME E:/FPGASeries/FPGAPrj2024/modelsimPrj/uvmPrj01
set UVM_DPI_DIR E:/FPGASeries/modelsim2020/uvm-1.1d/win64
vlog +incdir+$UVM_HOME/src $UVM_HOME/src/uvm_pkg.sv  $WORK_HOME/dut.sv top_tb.sv
vsim -sv_lib $UVM_DPI_DIR/uvm_dpi -do $WORK_HOME/vsim.do -c top_tb

vsim.do

run -all
quit

在这里插入图片描述

GUI仿真

选择complie Properties
在这里插入图片描述
在空白处填入如下四个路径

在这里插入图片描述
直接开始编译
在这里插入图片描述
选择compile all
可以发现my_driver编译失败了。
在这里插入图片描述
不用管,因为命令行的时候work库中也没有my_driver.sv
在这里插入图片描述

my_driver.sv实际上被包在了top_tb_sv_unit中
可以直接双击work库中的top_tb即可运行

在这里插入图片描述

番外

非常好用的教程网站,暂时还没有被墙。中间有几个完整的uvm例程,可以试着跑跑看。https://www.chipverify.com/tutorials/uvm

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值