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

电影网站 备案百度网页搜索

电影网站 备案,百度网页搜索,医院网站 功能,杜集网站建设基于UVM搭验证环境基本思路#xff1a; 首先#xff0c;我们搭建环境时一般都有一个目标的DUT。此时#xff0c;我们可以结合所要验证的的模块、是否需要VIP、验证侧重点等在典型的UVM验证环境的基础上做适当调整后形成一个大体的环境架构。比如#xff0c;需要一个ahb_vip…基于UVM搭验证环境基本思路 首先我们搭建环境时一般都有一个目标的DUT。此时我们可以结合所要验证的的模块、是否需要VIP、验证侧重点等在典型的UVM验证环境的基础上做适当调整后形成一个大体的环境架构。比如需要一个ahb_vip_agent、系统级还是模块级的DUT等等。这样整个验证环境中需要几个in_agent、是否需要out_agent、reference model是否需要自己写就比较清楚了。基于这些考虑我们的环境架构基本上就定下来了。 其次当整个环境的架构确定好了之后接下来就是具体的编写环境组件的过程了。这个是整个环境搭建最重要和工作量最大的部分。有的喜欢自上而下地先写顶层env再agentdrivertransaction来编写各个组件有的习惯自下而上地先写好每个drivermonitor再在agent或env中做组合连接。我的经验是在搭建环境的过程中认知就是一个从框架到编码的过程所以自上而下的方式更符合这样一个认知的过程。另外在真正工作中我还是觉得我们搭建环境的第一步不要想着一次性把环境中所有的组件都写完而是先写完除scoreboard和reference model之外的所有规划组件。至于testcase可以先写好冒烟case当然可能包括冒烟case需要的sequence。这样做的目的是我们可以在最短的时间里调试环境并能够正常冒烟。之后再根据项目进度逐步添加reference modelscoreboardsequence和case等并不断完善。 基于UVM搭建验证环境的过程 ①编写uvm_env。首先根据确定的环境架构编写env将整个环境的结构关系确定下来。 ②如果环境中要用到vip可以在env中把vip包进来。 ③环境中可能会包含多个agent。其实agent可以理解为一个单一的env。所以还是从agent自顶向下的去编写agent→interface→sequencer、sequence→driver→moitor。 ④在编写agent的driver过程中可能需要同步进行transaction的编写。这样可以不断地调整transaction中的配置变量。 ⑤编写top.sv。完成env和agent之后环境的interface基本也确定下来了。这个时候可以编写顶层信号连接。 ⑥编写base_test.sv。这个过程中可以同步编写顶层的transaction以及顶层的一些sequence和sequencer。 ⑦待上述编写完成后开始编写环境和代码的filelist以及仿真脚本。调试冒烟case。 以上7个小点是一个基本的环境搭建步骤。这个环境可以完成待测代码的冒烟测试。之后的工作就是在这个环境的基础上补充reference model和scoreboard的功能以及根据验证计划不断补充激励并完成验证工作。 《uvm实战》温习小记 set与get函数的参数 config_db机制用于uvm验证平台间传递参数如intvirtual interface),set与get通常是成对出现的set函数是寄信get函数是收信通常习惯在最顶层处tb_top)处set使用方式如下 uvm_config_db# (int) : : set (this, env.i_agt.drv , pre_num , 100); 其中第一个参数和第二个参数组合起来组成寄信的目标路径因此上面也可以改成 uvm_config_db# (int) : : set (this.env, i_agt.drv , pre_num , 100);一般不用 与此路径符合的才能收信其中第一个参数必须是uvm_component实例的指针第二个参数是相对于实例的路径。第三个参数表示一个记号用于说明这个值是传给目标中的哪个成员的第四个参数是要设置的值。 需要注意的是如果在顶层tb_top中set用法为 uvm_config_db# (int) : : set (null, uvm_test_top.env.i_agt.drv , pre_num , 100); set函数原型 static function void set(   uvm_component context,  // 上下文作用域   string inst_name,        // 目标实例的路径支持通配符   string field_name,       // 配置项的名称字符串   T value                  // 要设置的配置值任意类型 ); context 作用定义配置的作用域通常是一个组件的指针。 规则 如果 context 设置为 null配置将全局可见。 如果 context 设置为某个组件如 this配置的作用域将限定在该组件的层次结构下。 子组件可以通过向上查找父组件的作用域来访问配置。 inst_name 作用指定目标实例的路径支持通配符 * 或 .*。 示例 uvm_test_top.env.agent: 精确匹配路径。 uvm_test_top.env.*: 匹配 env 下所有组件。 *.agent: 匹配所有名为 agent 的实例。 field_name 作用配置项的唯一标识符字符串需与 get() 中的名称一致。 示例vif, cfg, num_packets。 value 作用要传递的值可以是任意类型如接口、对象、整数等。 示例传递虚拟接口、配置对象、字符串等。 收信一般在组件中的build_phase收信,以driver为例使用方式如下 uvm_config_db# (int) : : get (this, , pre_num , p_num); 其中第一个参数和第二个参数用来组成收信地址第一个也必须是uvm_component实例的指针第二个参数则是相对于此实例的路径。一般的如果第一个参数是this第二个参数可以是一个空的字符串第三个参数就是set中的参数必须严格对应第四个参数则是该实例中要设置的变量。 get函数原型 static function bit get(   uvm_component context,  // 上下文作用域   string inst_name,        // 当前实例的路径   string field_name,       // 配置项的名称   inout T value            // 接收配置值的变量 ); context 作用与 set() 中的 context 对应定义查找配置的作用域。 规则 通常设置为 this当前组件UVM 会从当前组件向上遍历父组件的作用域查找配置。 如果设置为 null则从全局作用域查找。 inst_name 作用当前组件的完整路径名通常通过 get_full_name() 获取。 自动获取在组件内部使用时可以直接用 uvm_root::get().get_full_name() 或 this.get_full_name()。 field_name 作用与 set() 中的 field_name 一致用于匹配配置项。 value 作用接收配置值的变量类型必须与 set() 中传递的类型一致。 注意如果未找到配置get() 返回 0且 value 保持不变。 关键使用场景 1. 传递虚拟接口Virtual Interface // 在顶层模块中设置接口 initial begin          uvm_config_db#(virtual apb_if)::set(null, uvm_test_top.env.agent, vif, apb_if); end // 在 Agent 中获取接口 class my_agent extends uvm_agent;           virtual apb_if vif;           function void build_phase(uvm_phase phase);                     if (!uvm_config_db#(virtual apb_if)::get(this, , vif, vif)) begin                               uvm_fatal(CFGERR, Failed to get vif!)                     end           endfunction endclass 2. 传递配置对象 // 在测试用例中设置配置对象 class my_test extends uvm_test;   my_config cfg;   function void build_phase(uvm_phase phase);     cfg my_config::type_id::create(cfg);     cfg.mode FAST_MODE;     uvm_config_db#(my_config)::set(this, env.agent, cfg, cfg);   endfunction endclass // 在 Agent 中获取配置对象 class my_agent extends uvm_agent;   my_config cfg;   function void build_phase(uvm_phase phase);     if (!uvm_config_db#(my_config)::get(this, , cfg, cfg)) begin       uvm_fatal(CFGERR, Failed to get cfg!)     end   endfunction endclass 注意事项 作用域匹配 set() 和 get() 的 context 和 inst_name 必须匹配否则无法获取配置。 例如set(this, env.agent, ...) 和 get(this, env.agent, ...)。 通配符的使用 使用 * 或 .* 可以简化路径匹配但要避免过度使用导致配置冲突。 类型一致性 set() 和 get() 的模板参数如 uvm_config_db#(int)必须完全一致。 时序问题 set() 应在 get() 之前执行通常在 build_phase 中设置。
http://www.w-s-a.com/news/169509/

相关文章:

  • 合肥模板网站建设软件赤峰公司网站建设
  • 毕业设计都是做网站吗深圳网站制作企业邮箱
  • 网站排名 优帮云小规模公司简介怎么写
  • 那个做头像的网站好选择手机网站建设
  • 设计一个网站花多少时间做视频网站适合用什么服务器
  • asp网站开发环境订单系统单页面网站怎么做
  • 山东网站建设都有那些企业推广策略
  • 网站开发文档是什么概念衣服销售网站建设规划书范文
  • 中国建筑装饰网官网企业网站设计优化公司
  • 南海建设工程交易中心网站c2c交易平台有哪些?
  • 有没有专业做网站架构图的软件番禺建设网站哪个好
  • 建立网站第一步整站seo优化公司
  • php网站开发文章管理系统wordpress 评论 顶踩 心 插件
  • 网站做百度收录的意义html网页设计代码作业代码
  • 网站推广怎么做 知乎衡水做网站开发的
  • 重庆忠县网站建设报价网页构建
  • 怎么自己做单页网站怎么在阿里做网站
  • 公司网站重新备案做电商没几个能赚钱的
  • 网站开发我们都能解决怎样做网站吸引客户
  • 网站首页图片切换代码wordpress minfy
  • 什么程序做网站收录好企业搭建网站的必要性
  • 建设网站主题建站必须要域名吗
  • 网站建设海报设计购物平台网站建设框架
  • 湖北在线网站建设建一个网站迈年
  • 上班自己花钱做的网站网站首页的动态怎么做
  • 台州网站建设哪家便宜沧州最新消息今天
  • 建设网站 请示 报告wordpress会员制
  • 青岛建网站人做网站怎么赚钱广告
  • 网站建设哪家好公司跨境电商展会2023
  • 设计大神云集的网站是南通市 网站设计