news 2026/8/15 9:20:46

UVM Driver 与 BFM:从 Transaction 到真实波形的最后一公里

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVM Driver 与 BFM:从 Transaction 到真实波形的最后一公里

引子:Transaction 不会自己变成波形

在 UVM 验证平台中,sequence 负责产生 transaction 对象,sequencer 负责调度这些 transaction,但真正驱动 DUT 引脚、产生时序波形的是谁?答案是 driver。

然而,driver 本身通常并不直接操作信号,它通过调用BFM (Bus Functional Model)提供的信号级任务来完成实际的总线时序。transaction 是抽象的“数据包”,BFM 是“物理层驱动”,driver 则是连接两者的“调度器”。理解这三者的分工,是构建高效、可复用验证环境的核心。

Driver 与 BFM 的分工

Driver —— 从 Sequencer 到 BFM 的搬运工

uvm_driver是一个 UVM 组件,它通过seq_item_port从 sequencer 获取 transaction,然后将其转换为对 BFM 的调用。Driver 的核心任务是:

  • 从 sequencer 获取下一个 transaction(get_next_item)。
  • 解析 transaction 中的抽象字段(如地址、数据、读写方向)。
  • 调用 BFM 提供的信号级 task,驱动 DUT 接口。
  • 完成传输后,调用item_done()通知 sequencer。

重点:Driver 不应该直接操作vif信号,除非没有 BFM 或波形非常简单。将信号级操作封装在 BFM 中,可以让 driver 保持协议无关性,提高复用度。

BFM —— 信号级的“黑盒”封装

BFM (Bus Functional Model) 是对某一种总线协议(如 AHB、AXI、APB)的信号级行为封装。它以 task/function 的形式提供类似drive_write(addr, data)drive_read(addr, data)这样的接口。

一个典型的 BFM 可能包含:

interface my_bfm ( input logic clk, input logic rst_n, output logic [31:0] addr, output logic [31:0] wdata, input logic [31:0] rdata, output logic write, output logic valid, input logic ready ); // BFM 信号级任务:发起一次写操作 task drive_write(input logic [31:0] a, input logic [31:0] d); @(posed
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/15 9:18:25

【HTB-CPTS】第22章 Command Injections(测验部分)

文章目录前言一、前情回顾二、注入点寻找三、黑名单发现三、构造注入命令四、复盘总结前言 本章节属于Tier 2 学院模块,但本文并没有直接给出答案(只有提示),符合HTB的内容分享及发布指南,如有侵权请联系博主删除。 …

作者头像 李华
网站建设 2026/8/15 9:17:58

HCIA认证实验指南:网络配置与排错实战

1. HCIA实验作业概述HCIA(Huawei Certified ICT Associate)是华为认证体系中面向初级工程师的认证项目,主要考察网络基础知识和基础配置能力。实验作业作为HCIA认证的重要组成部分,通常占考核总分的30%-40%,是检验学员…

作者头像 李华
网站建设 2026/8/15 9:16:33

大模型应用开发实战:LangChain输出解析器解决AI结果结构化难题

1. 项目概述:为什么模型调用结果解析是AI应用开发的“最后一公里” 如果你最近在折腾大模型应用开发,不管是基于LangChain、LangGraph还是自己手搓框架,大概率都遇到过这样的场景:你兴冲冲地调用了GPT-4或者Claude的API&#xff0…

作者头像 李华
网站建设 2026/8/15 9:15:27

大数据处理实战:Python分块清洗与PostgreSQL高速导入四百万行CSV

1. 项目概述:当四百万行数据摆在面前“导入一个CSV文件”,听起来像是数据工作中最基础、最简单的操作,任何一个会用Excel的人都能轻松完成。然而,当这个CSV文件的行数从几百、几千飙升到四百万这个量级时,整个任务的复…

作者头像 李华
网站建设 2026/8/15 9:11:13

pytracking 部署笔记

目录 参数: import syssys.path.insert(0, r"E:/project/track/pytracking-master")from pytracking.evaluation import Tracker from pytracking.evaluation.data import Sequence, BaseDataset, SequenceList from pytracking.evaluation.running impo…

作者头像 李华
网站建设 2026/8/15 9:09:45

CMake编译选项深度解析:从CMAKE_CXX_FLAGS到跨平台构建最佳实践

1. 项目概述:为什么CMAKE_CXX_FLAGS如此关键?如果你用CMake管理过C项目,大概率在某个深夜对着编译错误或者性能瓶颈抓耳挠腮过。这时候,你可能会去翻看CMakeLists.txt,目光最终落在那个看似简单却又充满魔力的变量上&a…

作者头像 李华