微网站开发流程西安网站
2026/1/29 3:59:50 网站建设 项目流程
微网站开发流程,西安网站,衡水做网站,最好的科技资讯网站UVM 寄存器模型#xff1a;从“认识零件”到“理解整个工厂” #x1f3af; 课程目标#xff1a;一小时彻底掌握UVM寄存器模型 带你从零开始理解UVM寄存器模型。用工厂控制室这个比喻贯穿始终#xff0c;保证听的懂#xff01;#x1f3ed; 核心比喻#xff1a;工厂控制…UVM 寄存器模型从“认识零件”到“理解整个工厂” 课程目标一小时彻底掌握UVM寄存器模型带你从零开始理解UVM寄存器模型。用工厂控制室这个比喻贯穿始终保证听的懂 核心比喻工厂控制室与数字孪生想象你要管理一个现代化的芯片工厂。这个工厂里有工厂实物对应UVM概念作用车间里的仪表盘硬件寄存器显示和控制工厂运行状态控制室的监控屏寄存器模型虚拟显示所有仪表状态仪表上的指针寄存器字段显示特定参数温度、压力等控制台总面板寄存器块集中管理所有监控屏车间地图地址映射标明每个仪表在车间的位置 第一部分UVM寄存器类家族认识所有零件1.uvm_reg_field仪表上的单个指针// 就像温度计上的红色指针uvm_reg_field temperature_pointer;// 配置这个指针// - 连接到哪个仪表父寄存器// - 指针宽度1位只有开关8位0-255度// - 在仪表上的位置第几位// - 能否调节读写权限// - 初始位置复位值temperature_pointer.configure(this,8,0,RW,0,8h20,1,1,1);生活中的例子汽车仪表盘车速指针、油量指针、转速指针都是不同的字段每个指针有位置、范围、你能不能调它2.uvm_reg一个完整的仪表盘class car_dashboard extends uvm_reg;// 一个仪表盘上有多个指针uvm_reg_field speed_needle;// 车速指针uvm_reg_field fuel_needle;// 油量指针uvm_reg_field rpm_needle;// 转速指针functionvoidbuild();// 安装所有指针speed_needleuvm_reg_field::type_id::create(speed_needle);speed_needle.configure(this,16,0,RW,0,16h0,1,1,1);// ... 配置其他指针endfunction endclass关键理解一个寄存器 一个完整的仪表盘32位的寄存器 有32个小格子的仪表盘每个字段占用其中几个格子3.uvm_reg_block控制室的总控制台class factory_control_room extends uvm_reg_block;// 控制台上有多个监控屏car_dashboard car_screen;// 汽车仪表监控屏engine_dashboard engine_screen;// 发动机监控屏safety_dashboard safety_screen;// 安全系统监控屏// 还有一张工厂地图标明每个仪表在哪里uvm_reg_map factory_map;functionvoidbuild();// 1. 创建工厂地图factory_mapcreate_map(factory_map,0,4,UVM_LITTLE_ENDIAN,0);// 2. 安装监控屏car_screencar_dashboard::type_id::create(car_screen);car_screen.configure(this,null,);car_screen.build();// 让监控屏安装自己的指针// 3. 在地图上标位置// 汽车仪表屏放在工厂的0x1000位置factory_map.add_reg(car_screen,32h1000,RW);endfunction endclass 第二部分期望值 vs 镜像值最容易混淆的概念用一个简单例子说明场景你想把车间的温度调到25度// 情况1只在控制室设定但没执行温度仪表.set(25);// 期望值 25// 控制室显示应该调到25度但车间实际温度还是20度// 镜像值 20上次读到的值// 情况2执行调整温度仪表.update();// 发送命令到车间// 现在期望值 25镜像值 25车间实际温度 25// 情况3有人手动调了车间温度// 车间工人直接拧仪表到30度// 控制室不知道期望值 25镜像值 25但实际是30// 情况4刷新控制室显示温度仪表.mirror();// 派人去车间看一眼// 现在期望值 25镜像值 30车间实际温度 30核心区别表格概念在哪里谁控制何时变化类比期望值控制室的计划表你测试人员调用set()时你想让温度达到的值镜像值控制室的记录本系统自动读写操作后你上次看到的温度实际值车间的真实仪表硬件本身随时可能变车间现在的实际温度️ 第三部分实际创建寄存器模型动手搭积木步骤1创建温度计字段指针class temperature_field extends uvm_reg_field;// 可以添加特殊功能function bitis_overheating();returnget_mirrored_value()80;// 超过80度报警endfunction endclass步骤2创建温度计仪表寄存器class temp_gauge extends uvm_reg;// 一个温度计有rand temperature_field current_temp;// 当前温度rand temperature_field max_temp;// 最高温度记录rand temperature_field min_temp;// 最低温度记录functionnew(string nametemp_gauge);super.new(name,24,UVM_NO_COVERAGE);// 24位的温度计endfunction functionvoidbuild();// 安装当前温度指针第0-7位current_temptemperature_field::type_id::create(current_temp);current_temp.configure(this,8,0,RO,0,8h20,1,0,1);// 只读复位值20度// 安装最高温度指针第8-15位max_temptemperature_field::type_id::create(max_temp);max_temp.configure(this,8,8,RW,0,8h20,1,1,1);// 安装最低温度指针第16-23位min_temptemperature_field::type_id::create(min_temp);min_temp.configure(this,8,16,RW,0,8h20,1,1,1);endfunction endclass步骤3创建工厂控制台寄存器块class factory_control_panel extends uvm_reg_block;// 工厂有多个车间每个车间有温度计temp_gauge workshop1_temp;temp_gauge workshop2_temp;temp_gauge workshop3_temp;// 工厂地图uvm_reg_map factory_layout;functionnew(string namefactory_control_panel);super.new(name,UVM_NO_COVERAGE);endfunction functionvoidbuild();// 绘制工厂地图factory_layoutcreate_map(layout,0,4,UVM_LITTLE_ENDIAN,0);// 安装一号车间温度计workshop1_temptemp_gauge::type_id::create(workshop1_temp);workshop1_temp.configure(this,null,);workshop1_temp.build();// 在地图上标注一号车间温度计在地址0x1000factory_layout.add_reg(workshop1_temp,32h1000,RW);// ... 安装其他温度计// 锁死地图不能再修改lock_model();endfunction// 便捷方法检查所有车间是否过热function bitany_workshop_overheating();returnworkshop1_temp.current_temp.is_overheating()||workshop2_temp.current_temp.is_overheating()||workshop3_temp.current_temp.is_overheating();endfunction endclass 第四部分如何使用寄存器模型开始控制工厂基本操作四部曲class factory_manager extends uvm_test;factory_control_panel control_room;taskrun_phase(uvm_phase phase);phase.raise_objection(this);// 第1步查看当前状态不改变任何东西uvm_info(MANAGER,查看一号车间温度,UVM_MEDIUM)uvm_reg_data_ttemp;control_room.workshop1_temp.current_temp.read(status,temp);// 读取后镜像值更新为实际值// 第2步设定目标温度uvm_info(MANAGER,设定最高温度报警阈值为75度,UVM_MEDIUM)control_room.workshop1_temp.max_temp.set(75);// 只改了期望值车间还没变// 第3步执行设定control_room.workshop1_temp.max_temp.update(status);// 现在期望值75镜像值75车间实际75// 第4步定期检查control_room.workshop1_temp.mirror(status,UVM_CHECK);// 派人去车间看一眼如果实际值不是75就报警phase.drop_objection(this);endtask endclass 第五部分前门 vs 后门访问两种管理方式方式1前门访问正规流程// 就像打电话给车间主任让他去调温度control_room.workshop1_temp.max_temp.write(status,75,UVM_FRONTDOOR);// 过程你→电话→主任→走到仪表前→调温度→走回来→告诉你完成// 优点完全模拟真实操作测试总线协议// 缺点慢要等主任来回走方式2后门访问快速通道// 就像你直接用控制室的遥控器调温度control_room.workshop1_temp.max_temp.write(status,75,UVM_BACKDOOR);// 过程你→按遥控器→仪表直接变化// 优点极快适合初始化或调试// 缺点不测试真实通信流程什么时候用哪种测试阶段主要用前门验证总线是否正确初始化用后门快速设置初始状态调试用后门快速检查问题回归测试混合使用提高效率 第六部分实际工作流程完整示例场景监控并调整工厂温度taskmanage_factory_temperature();uvm_status_e status;// 1. 初始化所有温度计uvm_info(MANAGER,初始化所有温度计,UVM_MEDIUM)control_room.workshop1_temp.max_temp.write(status,80,UVM_BACKDOOR);control_room.workshop1_temp.min_temp.write(status,10,UVM_BACKDOOR);// 2. 开始监控forever begin// 刷新所有温度显示control_room.workshop1_temp.mirror(status,UVM_NO_CHECK);control_room.workshop2_temp.mirror(status,UVM_NO_CHECK);// 检查是否过热if(control_room.any_workshop_overheating())begin uvm_warning(MANAGER,有车间过热)// 自动调低温度control_room.workshop1_temp.max_temp.set(70);control_room.workshop1_temp.max_temp.update(status);end// 等待10分钟模拟时间#1000;end endtask 第七部分常见问题解答Q1为什么要用寄存器模型直接操作信号不行吗答案就像管理工厂直接操作信号 你亲自跑到每个车间调仪表使用寄存器模型 坐在控制室远程管理直接操作的缺点效率低几百个寄存器要写几百行代码容易错地址算错一位就调错仪表难维护改个地址要改很多地方没抽象每个测试都要关心底层细节Q2期望值和镜像值为什么分开答案为了支持批量操作和事务一致性。例子你要同时调10个仪表// 第一步全部设定好仪表1.set(100);仪表2.set(200);// ...仪表10.set(1000);// 第二步一次性全部更新仪表1.update();仪表2.update();// ...仪表10.update();如果期望值和镜像值不分你就必须调一个等一个效率极低。Q3什么时候用read()什么时候用mirror()区别表格操作目的是否改变硬件更新哪个值read()获取当前值发起读操作更新镜像值get_mirrored_value()查看上次记录不操作硬件不更新任何值mirror(UVM_CHECK)验证一致性发起读操作更新镜像值并检查mirror(UVM_NO_CHECK)刷新显示发起读操作只更新镜像值简单记忆想知道实际值用read()或mirror()想知道上次记录用get_mirrored_value()想验证硬件和记录一致用mirror(UVM_CHECK) 学习路径建议第一阶段理解概念1-2天记住三个核心类field、reg、block理解期望值 vs 镜像值知道前门和后门的区别第二阶段动手实践3-5天创建简单的寄存器模型2-3个寄存器练习基本操作read/write/set/get/update/mirror观察仿真波形理解通信过程第三阶段高级应用1-2周集成到真实测试环境使用随机化测试收集功能覆盖率 最后的核心口诀寄存器模型三件宝字段、寄存器、块 期望镜像要分清期望是计划镜像是记录 前门后门两种路前门测试后门加速 操作牢记四步曲读状态、设目标、执行改、定期查最终理解UVM寄存器模型就是为芯片验证打造的数字孪生控制系统。它让你能像管理现代化工厂一样优雅、高效、可靠地验证复杂的芯片寄存器系统。现在你已经掌握了寄存器模型的核心概念试着在脑海中构建一个你熟悉的设备的寄存器模型吧比如空调遥控器、汽车中控台、手机设置菜单。你会发现这些概念无处不在

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询