UVM入门系列(一)----通过uvm_gen脚本快速搭建一般验证平台(上)

本篇博客介绍了如何使用uvm_gen脚本快速搭建一个针对8bit加法器的UVM验证平台。首先,概述了uvm_gen脚本生成的基础框架,接着详细展示了如何补全接口、序列项、测试环境和驱动等代码,包括DUT的实例化和时钟接口的处理。最后,创建了基本的激励序列和测试用例,并给出了测试流程。博客还提供了代码下载链接和后续更新的内容预告。

UVM入门系列(一)----通过uvm_gen脚本快速搭建一般验证平台(上)


前言

文中所有代码已上传,可通过以下链接下载:
代码链接

待测设计:简单的8bit加法器;
仿真工具:vcs+verdi
DUT代码如下:

`timescale 1ns/1ps
module add(
    input clk,
    input rst,
    input [7:0] a,
    input [7:0] b,
    input cin,
    output reg cout,
    output reg [7:0] sum
);
always@(posedge clk or negedge rst) begin
    if(!rst) begin
        cout<=1'b0;
        sum<=8'b0;
    end
    else begin 
        {
   
   cout,sum}<=cin+a+b;
    end
end
endmodule

一、uvm_gen脚本

代码生成

首先介绍一下本文使用的uvm_gen脚本,通过使用该脚本会自动生成一个标准的UVM结构框架,针对本文DUT使用该脚本工具会生成如下图所示的基本框架代码。
在这里插入图片描述

图中可以看出脚本已经完成了验证平台的部分基础代码,接下来的工作是针对验证方案进行代码的补全。

cr_agent

脚本会自动生成一个cr_agent,用于生成时钟和复位信号(后续文章会对该部分进行进一步描述),本文工程简单起见直接使用该代码,不做改动。

二、代码的补全

*括号内为文件路径

1.interface

interface

1.1.i_agent_if.sv(verf/tb/agent/i)

脚本生成代码如下:

`ifndef I_AGENT_IF_SV
`define I_AGENT_IF_SV

interface i_agent_if();
//
endinterface : i_agent_if 

`endif // I_AGENT_IF_SV

加入DUT输入端口,代码完成如下:

`ifndef I_AGENT_IF_SV
`define I_AGENT_IF_SV

interface i_agent_if();
	logic [7:0] a;
	logic [7:0] b;
	logic cin;
endinterface : i_agent_if 

`endif // I_AGENT_IF_SV

1.2.o_agent_if.sv(verf/tb/agent/o)

同上操作,加入DUT输出端口:

`ifndef O_AGENT_IF_SV
`define O_AGENT_IF_SV

interface o_agent_if();
    logic cout;
    logic [7:0] sum;
endinterface : o_agent_if 

`endif // O_AGENT_IF_SV

2.i_seq_item.sv(/verf/tb/agent/i)

i_seq_item即为驱动入DUT的数据包。
脚本生成的代码如下

`ifndef I_SEQ_ITEM_SV
`define I_SEQ_ITEM_SV

class i_seq_item extends uvm_sequence_item;

	`uvm_object_utils
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值