news 2026/9/2 12:03:16

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/9/2 22:28:36

Excalidraw AI绘制API网关路由规则图

Excalidraw AI绘制API网关路由规则图 在一次微服务架构评审会上,团队争论不休:API网关的路径转发逻辑到底该怎么表达?有人甩出一长串YAML配置,有人贴出Swagger文档链接,但真正能让所有人“一眼看懂”的,是一…

作者头像 李华
网站建设 2026/9/2 3:15:40

别再错过!Open-AutoGLM仅限内测的功能曝光,手慢无

第一章:Open-AutoGLM内测功能全景解析Open-AutoGLM 是新一代开源自动化语言模型框架,旨在通过智能推理与任务编排能力,实现复杂业务场景下的零代码流程构建。其内测版本已向部分开发者开放,展现出强大的多模态理解、动态工作流生成…

作者头像 李华
网站建设 2026/9/2 22:27:19

Open-AutoGLM深度解析:为什么顶尖工程师都在用它管理知识?

第一章:Open-AutoGLM深度解析:为何成为顶尖工程师的知识管理首选在人工智能驱动的开发时代,知识密度决定了工程师的产出效率。Open-AutoGLM 作为一款基于开源大语言模型架构构建的智能知识管理系统,正迅速成为顶尖工程师组织思维、…

作者头像 李华
网站建设 2026/9/2 12:05:32

Excalidraw AI构建CI/CD流水线可视化

Excalidraw AI构建CI/CD流水线可视化 在今天的DevOps实践中,一个新成员加入项目后最常问的问题往往是:“我们的发布流程到底是怎么走的?” 答案通常藏在某个 .gitlab-ci.yml 文件里,或者分散在Jenkins的几十个Job配置中。即使是有…

作者头像 李华
网站建设 2026/9/2 12:01:41

Excalidraw AI提升市场营销活动策划效率

Excalidraw AI:如何重塑市场营销活动的协作效率 在一场跨时区的新品上市策划会上,市场总监刚说完“我们需要一个从用户触达到转化的全流程漏斗”,屏幕上的白板就已经自动生成了包含社交媒体、落地页、邮件跟进和CRM闭环的完整图表——这不是科…

作者头像 李华
网站建设 2026/9/2 21:53:19

【Open-AutoGLM安全配置黄金法则】:如何避免80%的远程接入风险?

第一章:Open-AutoGLM远程控制安全概述Open-AutoGLM 是一款基于大语言模型的自动化远程控制系统,支持跨平台指令执行、任务编排与智能响应。其核心设计目标是在保证操作灵活性的同时,强化远程通信过程中的安全性。系统采用端到端加密、身份令牌…

作者头像 李华