UVM自学笔记3——项目之三——从零开始搭建ahb_sramc验证平台

  1. 创建如下所示的目录结构:

2.在tb的文件下:顶层的testbench如下:在tb中,第24行的代码将uvm宏相关的内容include进来,第26行的代码把uvm_pkg包导入进来,然后将agent相关的包(ahb_pkg/sram_pkg),testcase相关的包(uvm_ahb_sram_test_pkg)以及env相关的包(uvm_ahb_sram_env_pkg)都导入进来,在第38行和39行将接口以virtual interface的形式配置给ahb_agent和sramc_agent下的所有组件,之后在第41行通过run_test()启动testbench。

  1. 在tests文件夹下的目录结构:

这个uvm_ahb_sram_test_pkg包的作用是将所有的testcase都include到当前的package下,其他所有的包功能都是类似的,此时我们只有一个名为uvm_ahb_sram_2的testcase基类,因此在第33行将该文件include进来。

Testcase_base的代码如下:

在build phase实例化env,在build_phase结束后的end_of_elabration_phase里面将拓扑结构打印出来。

  1. env的文件目录如下:

将该env相关的类都包如pkg中:

Env的代码如下:在build_phase里实例化组件,包括reference model 、scoreboard和agent,在env的connect phase中,因为目前我们没有trans要传递,所以我们先不建立组件之间的连接。

Reference model的代码如下,包含有一个main phase,之后我们会在main phase中执行具体的操作。

同样,scoreboard的代码如下:包含有一个main phase

  1. agent的目录结构如下:

Ahb_if是其接口:

Driver代码如下:后续我们会具体进行完善,driver中connect_phase get到vif的配置信息,main_phase中有将激励灌入到DUT内部的主要方法do_drive(),我们注意到目前driver的main phase中是通过第58行代码接收到seqr传来的trans后,执行do_drive,但实际我们可能并非如此操作,比如ahb的二级流水当总线上hready为低时,我们按照这种方式可能会丢掉数据。这一点我们后面进行具体的更改。

Monitor的代码如下:monitor与driver具有一定的相似度,但又有所不同,monitor负责监视总线上的信号,并将pin级的信号打包成trans通过analysis port传递给reference model等组件。

Agent的代码如下:agent中实例化了driver monitor和sequencer,并且在connect phase中建立起组件之间的连接,将driver和sequencer以及monitor和agent中的port连接起来。

Sequence_item的代码如下:我们要在sequence_item中将interface中的信号包装成trans类型,并利用automatic_field将诸多自动函数调用。

Sequence的代码如下:

  1. Sim文件夹的目录结构如下:

Makefile的代码如下:

  1. 将所有组件的框架搭建起来以后,我们尝试跑一下testcase,发现没有fatal和error

接下来,我们看下拓扑结构:

  • 11
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值