MCDF_uvm实验4

回顾实验3:

我们在完成了实验3之后,大家可以看到,monitor、reference model 与 checker 之间的通信是通过TLM端口或者TLM FIFO 来完成的,相较于之前的 mailbox 句柄连接,更加容易定制,也使得组件的独立性提高。

实验4的总体内容:

  • 将产生 transaction 并且发送至 driver 的 generator 组件, 拆分为 sequence 与 sequencer 。
  • 在拆分的基础上,实现底层的sequence。
  • 完成 sequencer 与 driver 的连接和通信工作。
  • 构建顶层的 virtual sequencer。
  • 将原有的 mcdf_base_test 拆分为 mcdf_base_virtual_sequence 与 mcdf_base_test,  前者发挥产生序列的工作,后者只完成挂载序列的工作。
  • 将原有的 mcdf_data_consistence_basic_test 和 mcdf_full_random_test 继续拆分为对应的 virtual sequence 和 轻量化的顶层 test。

以 chnl_agent 中的改造为例

实验1.1  driver 与 sequencer 的改建

 

 

实验1.2  底层 sequence 的提取

把原来 generator 的内容移植到 sequence 中,并进行相应的改造

 

实验 1.3  移除uvm_base_test 的 transaction 发送方法

包括: generator 的创建,在build phase 中的实例化,在connect phase 中的连接。

 

 

 发现 test 调用了 virtual sequence 那么也就需要一个顶层的 virtual sequencer 与之对应, 

virtual sequencer 写在 environment 中

 

 实验 1.4  mcdf_base_virtual_sequence 内容

需要将mcdf_base_test::run_phase()发送序列的功能移植到新定义的mcdf_base_virtual_sequence中,而在移植后,mcdf_base_test::run_phase() 只需要挂载对应的顶层 virtual sequence 即可。

 

sequence 的挂载也就是启动:通过 my_seq.start(sequencer), 挂载到对应的 sequencer 上, 也就相当于连接到了组件树上,那么uvm_root会自动调用各个组件的run_phase(), 也就把 sequencer 运行,也就间接把 sequence 的 body 任务 运行起来了。

故一句话就是 , my_seq.start(sequencer) 会自动执行 sequence 里的 body 任务。

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值