news 2026/2/14 13:40:07

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/2/7 12:01:51

【Open-AutoGLM电子书限时获取】:揭秘大模型自动化新范式(仅剩200份)

第一章:Open-AutoGLM电子书下载 获取电子书资源 Open-AutoGLM 是一款面向自动化代码生成与自然语言理解的开源项目,其配套电子书详细阐述了架构设计、模型训练流程及实际应用场景。该电子书以 PDF 和 ePub 两种格式提供,便于在不同设备上阅读…

作者头像 李华
网站建设 2026/2/10 3:35:22

错过将后悔一年:Open-AutoGLM语音指令支持全面上线,你准备好了吗?

第一章:Open-AutoGLM语音指令支持全面上线,你准备好了吗?Open-AutoGLM 正式宣布语音指令功能全面上线,标志着开发者与终端用户可通过自然语言直接与模型交互。该功能基于深度语音识别与语义理解融合架构,支持多语种、低…

作者头像 李华
网站建设 2026/2/13 3:06:52

Excalidraw AI绘制前端微前端架构图

Excalidraw AI 绘制前端微前端架构图 在大型前端项目日益复杂的今天,一个常见的场景是:架构师在会议中描述“我们将主应用通过 Module Federation 加载三个子应用,分别是订单、用户和商品中心”,话音刚落,产品经理皱眉…

作者头像 李华
网站建设 2026/2/10 12:52:07

Excalidraw手绘风格图表让技术文档更生动

Excalidraw:让技术图表“活”起来的开源白板利器 在一次远程架构评审会上,团队成员正对着屏幕皱眉——PPT里的系统图线条笔直、配色规整,却总让人觉得“像在看年报”。有人提议:“要不我们直接画?”于是大家打开一个链…

作者头像 李华
网站建设 2026/2/6 6:08:25

FactoryIO 自动化仿真:PLC 学习的绝佳入门模型

FactoryIO自动视觉分拣+加工中心+物料装配+立体库入库仿真,统一结构化编程程序做成标准模板框架,PLC学习最佳模型 使用简单的梯形图与SCL语言编写,通俗易懂,写有详细注释,起到抛砖引…

作者头像 李华
网站建设 2026/2/13 12:12:12

9 个降AI率工具,专科生也能轻松应对

9 个降AI率工具,专科生也能轻松应对 AI降重工具:专科生也能轻松应对论文难题 在当前高校教育中,越来越多的学生开始接触到AI写作工具,这虽然提高了写作效率,但也带来了AIGC率过高的问题。尤其对于专科生而言&#xff0…

作者头像 李华