从零开始搭建UVM平台(九)-加入reference model

书接上回:

从零开始搭建UVM平台(一)-只有uvm_driver的验证平台

从零开始搭建UVM平台(二)-加入factory机制

从零开始搭建UVM平台(三)-加入objection机制

从零开始搭建UVM平台(四)-加入interface

从零开始搭建UVM平台(五)-加入transaction机制

从零开始搭建UVM平台(六)-加入env

从零开始搭建UVM平台(七)-加入monitor

从零开始搭建UVM平台(八)-加入agent

加入reference model

Reference model的作用类似于dut,输入到dut的数据也会给到reference model进行处理后方便和dut输出的数据一起做比较来查看dut的功能是否正常。

由于reference model的作用仅仅是copy一下数据,因此可以在my_transaction里实现这个copy方法:

在搭建reference model之前要想清楚现在的环境结构。在uvm里,实现不同component之间transaction级别通信的工具是TLM机制。为了从i_agent里面拿到transaction,需要在i_agent里创建一种port,在reference model里也创建一种port,实现transaction从i_agent的port传输到reference model里的port。同时,考虑到两个port在发/收transaction时可能存在阻塞情况,需要在两个port之间建立一个fifo来缓存数据。

在uvm中,常用的主动发数据的port是uvm_analysis_port,常用的用于缓存数据的fifo是uvm_tlm_analysis_fifo,常用的主动接收数据的port是uvm_blocking_get_port。考虑好了这些,可以执行以下步骤:

第一步:新建一个my_model文件

其中port主要用于接收从i_agent传输过来的transaction,经过copy后通过ap写入传输给scoreboard。

第二步:在my_monitor文件里创建一个uvm_analysis_port来实现每收集到一个transaction就传输给reference model。

第三步:i_agent作为my_monitor的parent,作为中间桥梁将i_agent的port指向my_monitor的port,方便reference model能够直接从i_agent的port拿到数据。

第四步:在my_env里例化reference model,并连接各个port和fifo,实现最后的连接。

相关推荐
START_GAME13 小时前
MSSQL$SQL2016
java·服务器·前端
Captaincc13 小时前
Show me your works & token -稀土掘金上线内测作品广场和用量统计
前端·掘金社区·vibecoding
进击的明明14 小时前
闭包:JavaScript里的“随身背包” 🎒
前端·javascript·面试
紫幽15 小时前
从 0 用 Vue 做屏并生成 LVGL 单片机代码(完整源码备忘)
前端·单片机
郭邯15 小时前
用 AI 辅助开发一个文件大小转换工具:从需求到上线的完整过程
前端
勾勾圈圈蛋蛋15 小时前
前中台项目
前端
触底反弹15 小时前
🔐 前端鉴权不再难!手把手带你搞懂 JWT + Zustand + Axios 的完整登录方案
前端·axios
打呵欠的猫15 小时前
我用 AI 写了一个"需求翻译器",产品的 PRD 直接变成开发任务清单
前端·ai编程
fatcoder15 小时前
玩转Nginx 09 — 运维排障:三场"火灾"实战演练
前端·后端·nginx
前端玩坑坑15 小时前
View Transitions API 入门教程,优雅过度
前端