加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

我的第三个UVM代码——把testcase与driver分开

2020/10/27
215
阅读需 3 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

《我的第二个 UVM 代码——连接 interface》中直接在 testcase 里驱动 interface,当代码越来越多,需要考虑把环境拆分成多个小的环境,便于修改和维护。

如下图,定义一个 driver,并例化在 testcase 里。把 interface 连接到 driver 里的 virtual interface,在 driver 里 toggle interface,实现协议功能。

第一步,在 build_phase 里连接 virtual interface。分两次,tb 到 testcase,再从 testcase 里取出 interface 转存到 driver。如下图。注意,get 和 set 的路径是由几个参数共同组成的。例如,null、uvm_test_top、u_intf 组成了 uvm_test_top.u_intf。又如,this(uvm_test_top)、my_driver、u_intf 组成了 uvm_test_top.my_driver.u_intf。

在编译时可以加入+UVM_CONFIG_DB_TRACE 来打印 config_db 的 set 和 get 的详细信息。

第二步,在 driver 的 main_phase 里驱动 virtual interface。这一步与

《我的第二个 UVM 代码——连接 interface》没什么区别,只是把代码从 testcase 里移到 driver 里而已。

第三步,编译仿真。仿真命令(以 irun 为例)、波形、环境层次关系(verdi)如下。

实验代码:

https://github.com/chenfengrugao/uvm_lab

总结:在本示例中没有 env、agent、sequencer、sequence 等组件,属于一个简化的验证环境,主要是由于分步演示的需要。侧面也说明 UVM 是一个灵活的验证架构,可以根据自己的需要进行裁剪。

相关推荐

电子产业图谱

公众号ExASIC号主,从事数字IC设计10余年,主要分享日常工作中的经验和技巧,分享让工作更轻松。