MCDF实验3

TB1 随机约束

1.1 将数据类chnl_trans中定义的随机成员变量进行随机约束;

1.2 将结束仿真的$finish()变迁到generator中;

1.3 尝试多次restart仿真,对比数据结果是否一样;在Questa仿真命令行中,使用命令vsim -novopt -solvefaildebug -sv_seed 0 work.tb1 查看仿真数据结果是否有变化;使用命令vsim -novopt -solvefaildebug -sv_seed random work.tb1对比此时,是否数据还是一样。

 

可知,对于使用random作为随机种子数时,即非确定的“0”,每次重新仿真得到的数据结果时不一样的,这是随机化的结果。 

1.4 整个仿真过程中,为什么会产生1200个对象?是否有更好的办法减少对象的数量?

因为chnl_id为静态变量,每产生一个chnl_trans便会产生一个对象,三个agent每个agent产生200个数据,所以就是600个,加上initiator产生克隆,所以乘以2,一共1200个。

TB2 更加灵活的测试控制

要求

2.1 将 generator 搬迁到 test 层次中,需要将 gen 和 agent中组件的 mailbox 连接起来,方便 gen 与 agent 中 init 的数据通信。

2.2 对 gen[1] 按照代码中的具体要求进行随机控制。

2.3 按照代码中的具体要求对 gen[2]进行随机控制。

2.4 按照代码中的具体要求,在 chnl burst test::do_ config()任务中对三个 generator进行随机控制。

2.5 按照代码中的具体要求,在 chnl fifo_ full test:do_ config()任务中对三个generator 进行随机控制。

2.6 使用仿真命令vism +TESTNAME=chnl_burst_test -novopt -solvefaildebug -sv_seed random work.tb2,根据命令体会不需要重新编译便可实现不同chnl的随机测试,理解这部分代码。

结果

1.从compile.log文件中可见,对于chnl_basic_test总共创建了460个对象。

2.查看各个通道的数据如下。 

3. 出现一个问题:Verdi编译时报错,但是感觉不影响正常显示波形,也暂时还没找到解决方案,就此记录一下。

TB3 测试平台结构

要求

3.1 在 chnl_monitor 类和 mcdt_monitor 类各自的 mon_trans()方法中需要采集正确的数据,将它们写入 mailbox 缓存,同时将捕捉的数据也打印出来,便于我们的调试。

3.2 在 chnl_agent 中,参考如何例化的 initiator 对象,也对 chnl_monitor 对象开始例化、传递虚接口和使其运行。

3.3 在 chnl_checker 的任务 do_compare()中, 从 checker 自己的数据缓存mailbox 中分别取得一个输出端的采集数据和一个输入端的采集数据,继而将它们的内容进行比较。需要注意的是,输出端的缓存只有一个,而输入端的缓存有三个,需要考虑好从哪个输入端获取数据与输出端缓存的数据进行比对。

3.4 在顶层环境 chnl_root_test 中,先对 mcdt_monitor 和 chnl_checker 进行例化。传递虚接口,并且将 chnl_monitor. mcdt_monitor 的邮箱句柄分别指向chnl_checker 中的邮箱实例。

结果

1. chnl_basic_test的仿真结果。

2. 添加ch_id的随机化,明确每个指示出哪个通道的数据。

参考:路科验证MCDF_svlab3笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值