IC验证06--UVM Sequence 基础示例与解析(附源码)

概要

在 UVM 验证环境中,Sequence 是生成激励事务(Transaction)的核心组件。下面通过一个完整示例,详细说明 Sequence 的结构、关键组件及使用方法。

一、基本 Sequence 结构示例

// 1. 定义事务类
class my_transaction extends uvm_sequence_item;
    rand bit [7:0] addr;
    rand bit [15:0] data;
    rand bit        wr_rd;  // 1=写, 0=读
    
    // 约束条件
    constraint c_addr_range {
    addr inside {
   [8'h00:8'hFF]}; }
    constraint c_wr_data {
    wr_rd == 1 -> data > 16'h100; }
    
    // 注册到UVM工厂
    `uvm_object_utils_begin(my_transaction)
        `uvm_field_int(addr,  UVM_ALL_ON)
        `uvm_field_int(data,  UVM_ALL_ON)
        `uvm_field_int(wr_rd, UVM_ALL_ON)
    `uvm_object_utils_end
    
    function new(string name = "my_transaction");
        super.new(name);
    endfunction
    
    // 自定义方法:打印事务信息
    virtual function void print_info();
        `uvm_info("TRANS", $sformatf("Addr=0x%02h, Data=0x%04h, Wr/Rd=%b", 
                                      addr, data, wr_rd), UVM_MEDIUM)
    endfunction
endclass

// 2. 定义基础Sequence类
class base_sequence extends uvm_sequence #(my_transaction);
    `uvm_object_utils(base_sequence)
    
    // 存储配置参数的句柄
    my_config cfg;
    
    function new(string name = "base_sequence");
        super.new(name);
    endfunction
    
    // body()方法:Sequence的核心执行体
    virtual task body();
        my_transaction tx;
        
        // 1. 从config_db获取配置参数(如果有)
        if (!uvm_config_db#(my_config)::get(null, get_full_name(), "cfg", cfg))
            `uvm_warning("CFG", "No config provided, using default values")
        
        // 2. 创建并随机化事务
        `uvm_do(tx)  // 等价于:
                     // tx = my_transaction::type_id::create("tx");
                     // start_item(tx);
                     // if (!tx.randomize()) `uvm_fatal("RAND", "Transaction randomization failed");
                     // finish_item(tx);
        
        // 3. 可选:修改事务属性
        tx.print_info()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

逻辑森林

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值