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

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

被折叠的 条评论
为什么被折叠?



