Modelsim搭建具有各组件的UVM验证平台

本篇博客详细介绍了如何在《UVM实战(卷I)》中,通过加入transaction、env、monitor、agent、referencemodel和scoreboard,以及field_automation机制,实现DUT驱动和验证的模块化设计。重点讲解了组件的组织结构和交互流程,以及如何利用UVM的工厂机制和TLM通信。

记录一下《UVM实战(卷I)》学习笔记。

这节的 dut 与第一节是一样的,直接对输入打拍输出:

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

1 加入 transaction

一般物理协议传输都是以帧或包为单位,很少以bit或byte为单位进行数据交换。

transaction 用于模拟这种实际情况,一笔 transaction 就是一个包。

注意:

  • my_transaction的基类是uvm_sequence_item。只有从uvm_sequence_item派生的transaction才可以使用UVM中强大的sequence机制。
  • 没有使用uvm_component_utils宏来实现factory机制,而是使用了uvm_object_utils。

书本例程 my_transaction.sv 定义了一个简单的以太网的 transaction 。

在my_driver中实现基于transaction的驱动。

my_driver中定义的 main_phase 实现 transaction 的例化,然后 drive_one_pkt 任务的作用是将这个包按 byte 传输出去。

添加相关源文件,然后定义 modelsim do文件:

cd D:/prj/uvm_prj/demo2.3.1   
vlib work  
set UVM_PATH C:/software/FPGA/modeltech64_10.5/verilog_src/uvm-1.1d/src
set SRC_PATH . 
vlog +incdir+$UVM_PATH $UVM_PATH/uvm_pkg.sv $SRC_PATH/top_tb.sv $SRC_PATH/dut.sv 
vsim -novopt -sv_lib C:/software/FPGA/modeltech64_10.5/uvm-1.1d/win64/uvm_dpi work.top_tb 
add wave -position insertpoint sim:/top_tb/*
run 2us

定义批处理文件 :

vsim -do demo.do

文件列表:
在这里插入图片描述

仿真结果:
在这里插入图片描述

在 my_driver 的 main_phase 可以看到,产生了两个随机包,然后发送出去,这与仿真结果相符合。

2 加入 env

定义好了组件,验证平台的什么位置对它们进行实例化?

引入一个容器类,在这个容器类中实例化 driver、monitor、reference

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChipWeaver

觉得有用的话点个赞吧 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值