当前位置: 首页 > news >正文

绿皮书第三章ref

任务、函数以及void函数

任务和函数之间有很明显的区别,其中最重要的一点是,任务可以消耗时间而函数不能。verilog中的函数必须有返回值。

子程序参数

高级参数类型

verilog中对参数处理方式很简单,子程序开头把input和inout的值复制给本地变量,在子程序退出时则复制output和inout的值。

在SV中,参数传递方式可以指定为引用而不是复制。ref

1.inputoutput

本质:当你把一个变量传给input参数时,仿真器会在内存中复制(Copy)一份一模一样的数据给子程序。子程序在里面怎么折腾这个“副本”,外部的那个原变量都毫发无损。只有当子程序执行完返回时,如果是output,才会把最终结果再Copy回去。

痛点:如果你传递的是一个超大的数组(比如 1024 位的包数据),每次调用函数都要在内存里 Copy 一遍,仿真器性能会瞬间暴跌

2.ref(引用传递(指针))

本质: ref不会复制任何数据。它传递的是变量在内存中的地址。

效果:子程序直接对外部的那个原始变量进行操作。没有任何内存复制开销,速度极快。而且子程序内部对该变量的任何修改,外部会实时看到,不需要等到子程序结束。

小问题

1 保护数据不被篡改

const ref

ref传递的是地址,子程序内部如果一不小心把这个传入的数据改了,外部的数据也就被污染了。这在验证中非常危险。 所以如果不仅想提高仿真性能,又不想子程序修改这个数组,必须加上const修饰符。

2taskfunction都可以用ref吗?它们有什么区别?

task: 可以消耗时间(#10 , @(posedge clk)等时序控制),可以使用ref

function:不能消耗时间(在0仿真时刻内返回) 也可以使用ref

注意:如果在function中使用了ref ,那么这个被引用的变量不能在其他地方被并发的进程(fork join)修改,否则就违反了function不能消耗时间的原则。

3 automatic 动态生命周期

为什么在 SV中使用ref传递参数时,子程序通常必须声明为automatic?

默认情况下,verilog的子程序是静态的,即内存空间是固定的。在SV验证环境中,为了支持递归调用或并发调用(多个transaction同时发送),子程序必须是动态的。 ref参数要求其指向的变量生命周期也是动态分配的,否则多处并发调用会指向同一个静态内存地址,导致数据混乱。

练习:test_sub3.sv

上面的代码会报错, 因为 const ref 只读不能修改。

注释掉 const ref 的函数和initial test3.编译。

顺便说一下

形参和实参的概念

函数print_by_value(input big_data_t data);这里data只是一个临时的占位符。它负责在函数内部规定好逻辑。 实参(真正的数据),当在initial块里声明了my_packet = xxxx;,并调用print_by_value(my_packet);

此时实参的值会被复制到data中。

运行结果:

test4.sv

练习 1 打印出的是 0xaaaa_aaaa,练习 2打印出的是 0x5555_5555

易错点

用名称绑定

// 推荐写法:清晰显式,绝不会因为逗号数量数错而出错 do_config(.new_cfg(my_config_reg), .status(result));

如果把output挪到最前面

task automatic do_config(output status_e status, seed = 10, ref bit [31:0] new_cfg);

此时seed没有显示指定方向,它会继承前一个参数status的output方向。可能因为无法把默认值赋给输出端口而触发编译警告。

不要依赖隐式方向继承

http://www.jsqmd.com/news/1257063/

相关文章:

  • AI大模型实战指南:低成本高效应用方案
  • 喷码机数据采集联网监控系统方案
  • cppm证书无锡 - 众智商学院职业教育
  • 2026年广东3D打印塑料外壳生产厂家实力解析 - 卓企推荐
  • 深圳服饰品牌服务行业GEO优化公司选型指南丨生成式引擎优化服务商2026深度测评 - 科技快讯
  • 文件系统中的 FALLOC_FL_PUNCH_HOLE 与文件打洞技术详解
  • Tcp客户端报错原因分析
  • 5分钟终极指南:使用Firefox脚本高效下载Sketchfab 3D模型用于学习研究
  • HarmonyOS7 展开折叠动画:asymmetric transition 的妙用
  • GEO企业排名优化指南
  • 打造你的专属桌面伙伴:DyberPet让二次元角色在电脑桌面“活“起来
  • 上海招聘信息发布平台怎么选?持证 HR 实测吉鹿力招聘网,低成本高效招聘方案
  • 2026 年更新:石景山正规的纸盘成型机加工厂格局重塑与选型新思路,别再手动塑形!揭秘这个小机器如何颠覆你的生产线-建升机械 - 企业官方推荐【认证】
  • 2026 年朝阳正规的景观钢坝实力厂家有哪些,打破认知:这看似“丑陋”的钢结构,如何成为顶级景观?-湟禹水利机械 - 行业推荐官[官方】--
  • 通用文字识别-通用文字OCR-文字识别接口介绍
  • 宇宙膨胀率吵炸锅!或掀翻物理学,是危机吗?
  • Java学习进程5
  • 临床预测+医学RAG=结构化EHR建模能力+医学大模型应用能力(二)
  • 终极指南:5个简单步骤彻底解决魔兽争霸III闪退问题
  • 冒烟测试介绍(Smoke Test、BVT构建验证测试、构建验收测试)与回归测试对比、与单元测试对比、与集成测试对比、Cypress
  • Logger++:日志管理插件性能优化
  • 如何快速解锁Wallpaper Engine壁纸素材:RePKG完整使用指南
  • Docker镜像瘦身实战:从1.2GB到98MB的优化策略
  • 临沂企业数字化服务商选择要点
  • YOLO26知识蒸馏:一行代码,0.4-1.0个点,零推理开销
  • 突破性3D模型体素化技术:ObjToSchematic实现高效Minecraft建筑转换
  • 别再用准确率选模型了!资深AI架构师披露:真正决定ROI的是这3个隐藏成本指标
  • QKeyMapper终极指南:5分钟掌握Windows游戏手柄键盘鼠标全能映射技巧
  • 函数补充与常见例题分析(杂例补充)
  • 郑州本地能上门给公司市场部做豆包商用流量GEO专项内训的机构,要求课后配套落地辅导 - 哈喽33