SV子程序,接口,驱动和采样
📅 2026/7/17 5:09:14
👁️ 次浏览
SV子程序automatic生命周期一般要在function后面加automaticref传递意味着子程序直接操作外部变量的内存地址类似于 C 语言的指针。为了防止“指针”指向的非静态变量在中途被销毁导致悬空SV 规定带有ref参数的子程序其自身必须被声明为automatic动态生命周期。ref int f[5]和int fa[5] 表示一个包含五个int元素的数组调用init(fa,5),仿真器会在内存里开辟一块全新的临时空间f.如果不写ref的话(默认input),他就会把fa里面五个数字一个一个复制到f里,占内存,,且在这个项目里改的是f[i],改的是替身. 当写了ref:f变成了fa,它直接指向了fa在堆栈中的真实内存地址。此时仿真器根本没有为f分配独立的数组存储空间。在函数内部只要你对f[i]进行操作底层直接修改的就是外部fa[i]那块内存。input传递相当于你把这个 Excel 文件复制了一份发给函数。函数在副本上修改了数据原文件毫无影响。ref传递相当于你把这个 Excel 文件的“共享编辑链接”发给了函数。函数f和创建者fa面对的是同一个文件函数动了第几行原文件立刻同步改变。结果:问题1在芯片验证中如果我们希望用ref来提高仿真速度不想复制大数组但是我们又非常担心写函数的工程师不小心在函数里面把我们的原数据给改了比如只需要读数据不需要写数据。在 SystemVerilog 中有什么修饰词可以和ref配合使用做到“既用引用传递提高速度又防止函数内部修改原数组”吗使用const ref类型声明一个子程序为function automatic void my_func(const ref int f[5]);函数内部就不允许再对f[i]进行任何赋值操作了因为它是只读的。所以原来的“初始化写数据”函数在语义上必须转变为“打印、检查或比对读数据”函数。function automatic void display_packet(const ref int f[5]); $display([TB_INFO] --- display_packet started ---); foreach(f[i]) begin $display(fa[%0d] %0d, i, f[i]); end endfunction function automatic void init(ref int f[5], input int start); foreach(f[i])begin f[i] i start; end endfunction initial begin // 1. 先用普通的 ref 写入数据 init(fa, 5); // 2. 调用安全的 const ref 函数打印 display_packet(fa); $finish; end接口设计代码传统端口需要把test模块和arb_port设计文件 DUT的所有引脚一个一个用wire或者reg/logic连起来。如果 DUT 有 1000 个引脚你的tb_top里需要声明 1000 根线并且在例化test和DUT时各自连一遍重复工作两次。一旦芯片接口增减一个信号tb_top、test、DUT全部都要修改。接口连接引入interface后接口成了一个独立的“物理实体”。把所有信号打包定义在interface内部。在tb_top中只需要例化一个arb_if。然后例化test和DUT时直接把这一个arb_if塞给他们即时接口内部增加10个信号只用interface改变。$display(%0t: Drove req01 (via interface), $time); repeat(2) (posedge arbif.clk); (posedge arbif.clk) arbif.request 2b11; $display(%0t: Drove req11 (via interface), $time); repeat(2) (posedge arbif.clk); $display(%0t: Test Finished, $time); $finish; end endmodule接口连接很常用先写内部信号clkrst再写外部信号设计代码输入输出的信号modport定义一下测试端和设计端看到的信号方向。设计端的方向与设计代码input output一致测试端输入clk rst信号其他设计端的输入是测试端的输出设计端的输出是测试端的输入。定义完interfaceend interface后要写顶层的testbench代码和测试模块定义代码。VCS仿真结果clocking block可读可写clocking block中 input是可读的output是可写的。因为它的输出端 表示测试平台在指定时钟沿去激励所以是可写的。input 表示TB在指定时钟沿去采样。interface arb_if(input logic clk,input logic rst); logic [1:0] request; logic [1:0] grant; clocking cb (posedge clk); output request; input grant; endclocking modport TEST( clocking cb, input rst ); modport DUT( input clk,rst,request, output grant ); endinterface //测试程序 program test(arb_if.TEST arbif); initial begin $monitor(%0d ns cb.grant %0d,$time,arbif.cb.grant); #50; $display(%0d ns:finish,$time); end endprogram //硬件设计 module arb(arb_if.DUT arbif); initial begin arbif.grant 1; #12 arbif.grant 2; #18 arbif.grant 3; end endmodule //仿真顶层 module tb_top; logic clk; logic rst; initial begin clk0; forever #5 clk ~clk; end initial begin rst1; #2; rst0; end //实例化接口 arb_if my_if(.clk(clk), .rst(rst)); //实例化设计和测试代码 arb u_dut (.arbif (my_if.DUT)); test u_test(.arbif (my_if.TEST)); //波形 fadb函数 endmodule
流域生态系统服务在环境保护与资源管理中具有不可替代的重要性。随着全球气候变化和人类活动对自然环境的压力日益增大,流域生态系统的稳定性和健康状况面临严峻挑战。水资源短缺、洪水频发、水质污染、生物多样性减少等问题,正在威胁流域内及其下游区域…
📅 2026/7/17 5:09:14
1. 为什么需要大模型知识库的Code Review方案在传统软件开发流程中,Code Review往往面临三个典型痛点:人力成本高、标准不统一、知识传承难。以我参与过的金融系统升级项目为例,每次代码提交平均需要2-3天等待Review,高峰期甚至出…
📅 2026/7/17 5:08:14
5个简单步骤:用BilibiliDown轻松下载B站视频的完整指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/…
📅 2026/7/17 5:08:14
1. 项目概述:为什么C/C面试总让人“又爱又恨”?干了这么多年C/C开发,也面过不少人,我发现一个挺有意思的现象:很多朋友一提到C/C面试,第一反应就是“八股文”、“背题”。确实,这门语言历史悠久…
📅 2026/7/17 5:59:29
1. Ubuntu软件管理核心机制解析作为Linux发行版中的翘楚,Ubuntu提供了完善的软件包管理体系。其底层依赖DPKG(Debian Package)作为基础包管理工具,而APT(Advanced Packaging Tool)则是用户最常接触的高级管…
📅 2026/7/17 5:59:29
1. CentOS7 VNC Server安装背景与需求解析在Linux服务器运维和开发环境中,图形化界面的远程访问一直是个刚需场景。虽然大多数专业用户习惯使用SSH命令行操作,但在以下典型场景中,图形界面仍然不可或缺:运行需要GUI的应用程序&…
📅 2026/7/17 5:59:29
一、Linux man 手册使用教程man 是 Linux 自带官方帮助文档,分不同章节,区分命令、系统调用、库函数:man man:查看 man 手册本身的使用说明,看懂分章节规则man 1 xxx:查shell 命令 / 可执行程序(…
📅 2026/7/17 5:59:29
以下为方案部分截图:
📅 2026/7/17 5:59:29
说真的,我最近真的烦透了那些种草贴。满屏的滤镜,满屏的“绝绝子”。看得我直反胃。今天咱们不整那些虚的。就聊聊那个风很大的coach牛仔腋下包geo。我是真有点恨它。恨它为什么这么难买?恨它为什么溢价这么高?但也爱它那个味儿。那种又拽又随性的劲儿。你要是喜欢那种老气…
📅 2026/7/17 5:59:05
1. 为什么选择用DeepSeek V4替换Codex的底座模型去年我在开发一个智能代码补全工具时,发现Codex的默认底座模型在复杂业务逻辑场景下表现不尽如人意。经过多次测试对比,DeepSeek V4在以下几个关键指标上展现出明显优势:代码补全准确率&#x…
📅 2026/7/17 0:00:32
1. VS Code 高效配置基础作为一款轻量级但功能强大的代码编辑器,VS Code 的默认配置已经能满足基本需求,但通过合理调整设置可以大幅提升编码效率。我使用 VS Code 已经有五年多时间,期间尝试过各种配置方案,总结出这套适合大多数…
📅 2026/7/17 0:00:32
在异常检测领域,很多优秀算法最初都是以研究代码的形式发布的。它们能够在固定测试集上复现实验结果,却不一定能被普通用户直接拿来测试自己的图片。尤其是最近很多算法仅提供在固定测试集的测试环境,而gradio的demo演示也不会提供。
对工程应用和在自己的图片上进行测试来…
📅 2026/7/17 0:00:32
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/17 2:37:27
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/16 21:45:29
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/16 14:13:12
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/15 22:46:06
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/16 4:59:31
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/17 2:40:57