news 2026/4/26 23:03:43

9-2 tlm1:fifo UVM TLM FIFO:验证环境的“数据同步中枢”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
9-2 tlm1:fifo UVM TLM FIFO:验证环境的“数据同步中枢”

文章目录

  • 原始代码及log
  • 📌 UVM TLM FIFO:验证环境的“数据同步中枢”
  • 🧩 核心代码结构与拓扑解读
  • 🔍 关键机制:阻塞/非阻塞接口的“组合拳”
    • 1. 生产者逻辑:“尝试发送→阻塞兜底”
    • 2. 消费者逻辑:“同步获取→批量清空”
    • 3. 核心接口对比表
  • ⏳ 执行流程:从“填充”到“清空”的完整周期
    • 📊 背压机制流程图(Mermaid)
  • ⚠️ 潜在问题与改进建议
    • 1. 死锁风险:阻塞操作无超时
    • 2. 资源泄漏:packet未回收
    • 3. 硬编码延迟:依赖时序假设
  • 🧠 课后思考与答案
  • 🌟 IC验证场景:从“最小系统”到“可复用环境”
    • 1. 定义事务类(AXI Stream)
    • 2. 构建可复用的Env
    • 3. 驱动与记分板的FIFO通信
  • ✅ 总结:UVM TLM FIFO的“核心价值”

原始代码及log

module test;import uvm_pkg::*;`include"uvm_macros.svh"classpacket;inti;functionnew(intv);i=v;endfunction endclassclassproducerextends uvm_component;uvm_put_port #(packet)data_out;functionnew(string name,uvm_component parent);super.new(name,parent);data_out=new("data_out",this);endfunction taskrun_phase(uvm_phase phase);packet p,pp;#1p=new(0);while(data_out.try_put(p))begin $display("%0t: put data %0d",$time,p.i);#10p=new(p.i+1);end $display("try_put status return: %0d",p.i);$display("%0t: do a blocking put",$time);data_out.put(p);$display("%0t: blocking put succeeded",$time);endtask endclassclassconsumerextends uvm_component;uvm_get_port #(packet)data_in;functionnew(string name,uvm_component parent);super.new(name,parent);data_in=new("data_in",this);endfunction taskrun_phase(uvm_phase phase);packet p;#100;// fifo will fill up$display("%0t: getting one",$time);data_in.get(p);$display("%0t: received data %0d",$time,p.i);#100;// let the blocking put succeedwhile(data_in.try_get(p))begin $display("%0t: received data %0d",$time,p.i);#10;end endtask endclassclasstestextends uvm_test;`uvm_component_utils(test)functionnew(string name="",uvm_component parent=null);super.new(name,parent);endfunction taskrun_phase(uvm_phase phase);phase.raise_objection(null);#5us;phase.drop_objection(null);endtask endclass producer prod=new("prod",null);consumer cons=new("cons",null);uvm_tlm_fifo #(packet)fifo=new("fifo",null,10);initial begin prod.data_out.connect(fifo.put_export);cons.data_in.connect(fifo.get_export);forkrun_test("test");repeat(30)begin $display("%0t: FIFO level %0d of %0d",$time,fifo.used(),fifo.size());#10;end join end endmodule----------------------------------------------------------------***********IMPORTANT RELEASE NOTES************You areusinga version of the UVM library that has been compiled with `UVM_NO_DEPRECATED undefined.See http://www.eda.org/svdb/view.php?id=3313 for more details.(Specify+UVM_NO_RELNOTES to turn offthisnotice)UVM_INFO @0:reporter[RNTST]Running test test...0:FIFO level0of101:put data010:FIFO level1of1011:put data120:FIFO level2of1021:put data230:FIFO level3of1031:put data340:FIFO level4of1041:put data450:FI
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 16:16:30

【独家】Open-AutoGLM内部架构解析:6大模块拆解其知识提取能力

第一章:Open-AutoGLM 书籍阅读记录在深入探索 Open-AutoGLM 项目的过程中,系统性地阅读相关技术文献与开源文档成为理解其架构设计与实现逻辑的关键路径。通过整理核心资料,不仅能够厘清模型自动化推理的底层机制,也能为后续的定制…

作者头像 李华
网站建设 2026/4/20 22:51:04

错过再等十年?Open-AutoGLM开源生态发展关键节点全梳理

第一章:错过再等十年?Open-AutoGLM开源生态发展关键节点全梳理Open-AutoGLM作为近年来最具潜力的开源大模型自动化框架,其生态演进呈现出爆发式增长态势。从初始版本发布到社区驱动的模块化扩展,每一个关键节点都深刻影响着开发者…

作者头像 李华
网站建设 2026/4/24 19:06:50

从入门到精通:Open-AutoGLM远程控制配置完全手册,错过等于损失一个亿

第一章:Open-AutoGLM远程控制配置概述Open-AutoGLM 是一个基于 AutoGLM 架构的开源远程控制框架,专为自动化任务调度与跨设备指令执行设计。其核心优势在于支持多协议接入、动态权限管理以及低延迟命令响应,适用于物联网设备管理、边缘计算节…

作者头像 李华
网站建设 2026/4/26 9:14:42

Excalidraw AI简化SCM供应链架构表达

Excalidraw AI简化SCM供应链架构表达 在一次跨国制造企业的线上战略会议上,产品经理打开共享白板,输入一句:“画一个从东南亚原材料商到北美零售门店的四级供应链模型。” 几秒钟后,一张结构清晰、布局合理的流程图自动生成——供…

作者头像 李华
网站建设 2026/4/26 0:19:54

Excalidraw AI生成后端服务依赖关系图

Excalidraw AI生成后端服务依赖关系图 在一次深夜的线上故障复盘会上,团队争论不休:订单服务到底有没有直接调用库存服务?没人记得清最初的架构设计了。这时有人打开浏览器,输入一句自然语言:“画一个包含订单、支付、…

作者头像 李华