温州网站wordpress h1 样式

张小明 2026/1/9 9:45:47
温州网站,wordpress h1 样式,定远建设局网站,佛山新网站建设价格现在#xff0c;你已经准备好学习UVM的“总指挥”了—— uvm_test。它是整个验证工厂的最高指挥官#xff0c;负责设定任务、调配资源并下令开工。 简单来说#xff0c;uvm_test 不是一个具体的测试动作#xff0c;而是一个可配置、可重用的“测试方案”或“作战计划”。它…现在你已经准备好学习UVM的“总指挥”了——uvm_test。它是整个验证工厂的最高指挥官负责设定任务、调配资源并下令开工。简单来说uvm_test不是一个具体的测试动作而是一个可配置、可重用的“测试方案”或“作战计划”。它不直接驱动信号而是通过配置环境、启动不同的“作战指令”序列来验证DUT的不同功能。 Test的本质一个可执行的“验证方案”你可以把验证计划Verification Plan里的一条条功能点Feature想象成需要攻克的“战略目标”。一个uvm_test就是一个针对其中一个战略目标的完整作战计划。它包含作战环境需要哪些“部队”Agent参与。部队配置各部队用什么“装备”、以什么“模式”主动/被动作战。作战指令具体的进攻顺序和策略Sequence。战果评估如何判断目标是否达成通过Scoreboard等检查。️ 编写一个UVM Test的四步核心流程下图展示了创建一个“作战计划”Test从搭建指挥部到下达作战指令的完整流程第一步建立指挥部你的 Test 类需要从uvm_test继承并进行工厂注册。注意它虽然不叫uvm_component但本质上是一个顶级组件。class my_base_test extends uvm_test;uvm_component_utils(my_base_test)// 使用组件宏注册functionnew(string name“my_base_test”,uvm_component parentnull);super.new(name,parent);endfunction// ... 后续步骤写在这里endclass第二步组建与配置部队 (核心)在build_phase中你需要创建环境(env)和配置对象(cfg)。为配置对象赋值如设置工作模式、获取虚拟接口等。通过uvm_config_db将配置对象“下发”到环境中的具体Agent。virtual functionvoidbuild_phase(uvm_phase phase);super.build_phase(phase);// 1. 创建m_envmy_env::type_id::create(“m_env”,this);m_cfgmy_cfg::type_id::create(“m_cfg”);// 2. 配置if(!uvm_config_db #(virtual dut_if)::get(this,“”,“dut_vif”,m_cfg.vif))uvm_error(“CFG”,“Interface not found!”)m_cfg.is_activeUVM_ACTIVE;// 3. 下发uvm_config_db #(my_cfg)::set(this,“m_env.m_agent”,“cfg”,m_cfg);endfunction第三步战前检阅调试在end_of_elaboration_phase中所有组件已创建并连接好。此时打印拓扑结构可以清晰地看到你搭建的整个“部队编制”是否正确。virtual functionvoidend_of_elaboration_phase(uvm_phase phase);uvm_top.print_topology();// 打印出完整的UVM组件树endfunction第四步下达作战指令核心在run_phase这是一个task会消耗仿真时间中你需要申请作战时间通过raise_objection(this)防止仿真立刻结束。创建并启动主序列这是测试的灵魂决定了要发送什么数据。结束作战序列执行完毕后drop_objection(this)。virtual taskrun_phase(uvm_phase phase);my_main_sequence main_seq;super.run_phase(phase);// 好习惯phase.raise_objection(this);main_seqmy_main_sequence::type_id::create(“main_seq”);main_seq.start(m_env.v_sqr);// 通常启动在虚拟序列器上phase.drop_objection(this);endtask 如何“启动”一个Test两种方式Test 的启动不是在你代码里调用一个函数而是在顶层模块tb_top的initial块中通过run_test()这个全局任务来“召唤”。方式一代码内指定不灵活initial beginrun_test(“my_base_test”);// 固定运行 my_base_testend方式二推荐命令行指定initial beginrun_test();// 参数为空从命令行获取end然后在仿真时通过命令行指定# 使用不同的 UVM_TESTNAME 来运行不同的测试无需重新编译simulator_commandUVM_TESTNAMEmy_base_testsimulator_commandUVM_TESTNAMEtest_feature_asimulator_commandUVM_TESTNAMEtest_stress这是UVM框架灵活性的重要体现一定要掌握。 衍生测试实现极致的重用这是UVM测试策略最强大的地方。你不需要为每个功能点从头写一个Test而是通过继承来复用和调整。假设你有一个验证寄存器读写功能的测试reg_test// 1. 基础测试搭建通用环境启动基础序列class reg_test extends uvm_test;uvm_component_utils(reg_test)reg_env m_env;reg_cfg m_cfg;virtual functionvoidbuild_phase(uvm_phase phase);super.build_phase(phase);m_envreg_env::type_id::create(“m_env”,this);m_cfgreg_cfg::type_id::create(“m_cfg”);m_cfg.reg_model“RAL”;// 使用寄存器模型uvm_config_db #(reg_cfg)::set(this,“*”,“cfg”,m_cfg);endfunction virtual taskrun_phase(uvm_phase phase);base_reg_seq seqbase_reg_seq::type_id::create(“seq”);phase.raise_objection(this);seq.start(m_env.v_sqr);phase.drop_objection(this);endtask endclass// 2. 衍生测试A复用环境但更换更复杂的“作战指令”class test_reg_stress extends reg_test;// 关键继承uvm_component_utils(test_reg_stress)virtual taskrun_phase(uvm_phase phase);stress_reg_seq seqstress_reg_seq::type_id::create(“seq”);// 更换序列phase.raise_objection(this);seq.start(m_env.v_sqr);// 环境 m_env 是从父类继承来的phase.drop_objection(this);endtask endclass// 3. 衍生测试B复用环境和序列但调整“部队配置”class test_reg_passive extends reg_test;uvm_component_utils(test_reg_passive)virtual functionvoidbuild_phase(uvm_phase phase);super.build_phase(phase);// 先调用父类完成通用搭建m_cfg.is_activeUVM_PASSIVE;// 然后覆盖配置将Agent设为被动模式endfunction endclass⚠️ 核心要点与总结概念说明关键点uvm_test角色验证环境的总指挥和配置中心。不直接干活只负责“排兵布阵”。配置下发通过uvm_config_db::set在build_phase将配置对象cfg下发。实现环境行为的动态控制。启动序列在run_phase中create并start序列。必须使用raise/drop_objection包裹。运行方式通过run_test()UVM_TESTNAME命令行参数。实现不修改代码、不重新编译即可切换测试。测试重用通过类继承创建衍生测试。可重写build_phase以修改配置或重写run_phase以更换主序列。给你的最终建议现在请将你之前搭建的env、agent、sequence组合起来。创建一个my_base_test在build_phase中创建你的env。在run_phase中启动你的序列并确保有raise/drop_objection。在tb_top中使用run_test(“my_base_test”)启动仿真。成功后尝试用run_test() 命令行参数UVM_TESTNAMEmy_base_test的方式再次运行。最后创建一个衍生测试仅仅更换另一个不同的序列并通过命令行运行它。当你成功运行起第一个由Test指挥的完整UVM环境时你就真正打通了UVM从底层到顶层的任督二脉。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

扬州网站建设网站排名优化wordpress怎么修改模板文件

MinIO开源版本与商业版本深度对比分析:技术选型指南与部署最佳实践 【免费下载链接】minio minio/minio: 是 MinIO 的官方仓库,包括 MinIO 的源代码、文档和示例程序。MinIO 是一个分布式对象存储服务,提供高可用性、高性能和高扩展性。适合对…

张小明 2026/1/7 11:18:10 网站建设

四川网站建设公司 登录手机网站建设与制作

别再错过!AI应用架构师开启AI驱动元宇宙教育新纪元 引言:元宇宙教育的“美好陷阱”与破局者 1. 痛点:元宇宙教育的“看起来很美”与现实困境 你或许听说过元宇宙教育的美好愿景: 学生戴着VR头盔进入虚拟实验室,亲手操作…

张小明 2026/1/7 23:15:23 网站建设

医院网站建设申请西安注册公司流程

深入解析Samba与多协议网络集成 1. 共享导出与打印机共享权衡 共享导出性能问题 :若决定共享来自其他系统的导出内容,采用双重传输配置可能导致性能不佳,建议尽量采用更直接的连接方式。 打印机共享权衡 通过SMB/CIFS和lpd共享打印机通常不会有太大困难,但这两种协议会…

张小明 2026/1/7 22:40:31 网站建设

手机网站建站步骤论文丽水建设局网站

如何快速实现赛马娘游戏中文汉化:终极本地化配置指南 【免费下载链接】umamusume-localify Localify "ウマ娘: Pretty Derby" DMM client 项目地址: https://gitcode.com/gh_mirrors/um/umamusume-localify 想要体验赛马娘游戏的完整中文内容吗&am…

张小明 2026/1/8 8:29:37 网站建设

网站设置英文怎么说关于申请网站建设维护经费

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 文章目录概要SAM的定义SAM的网络架构任务设计模型设计数据引擎和数据集SAM的结构对任何 10 亿个掩模数据集进行分割SAM 如何支持现实生活…

张小明 2026/1/8 6:30:53 网站建设

wordpress外贸建站教程筑龙网登录

导语 【免费下载链接】smol-vision 项目地址: https://ai.gitcode.com/hf_mirrors/merve/smol-vision Smol Vision项目通过提供模型压缩、优化和定制化方案,让前沿视觉与多模态AI模型能够在资源受限设备上高效运行,推动边缘AI应用普及。 行业现…

张小明 2026/1/8 8:34:00 网站建设