在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5298|回复: 18

[求助] 请问有人在ModelSim下写过UVM的测试平台吗?

[复制链接]
发表于 2013-12-4 16:17:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近在学UVM,用的ModelSim运行,按照书上的例子写了一个简单的验证平台,在TOP中实例化接口跟DUT: bit clk;
  clkgen ck(clk);
  my_if my_my_if(clk);
dut my_dut(clk,my_my_if.on,my_my_if.txd
  );


DUT:  module dut(clk,on,txd);

设置接口语句:  uvm_config_db#(virtual my_if.test)::set(uvm_root::get(), "uvm_test_top.env.drv", "my_if", my_my_if);
   uvm_config_db#(virtual my_if.test)::set(uvm_root::get(), "uvm_test_top.env.mon", "my_if", my_my_if);

driver跟monitor中: if(!uvm_config_db#(virtual my_if.test)::get(this, "", "my_if", vif))
uvm_report_fatal("my_monitor","Error in Getting interface");

编译能通过,也可以run,但是就是driver中激励不能输入到DUT,monitor中DUT输出也检测不到,输出数据都是XXX不知道是咋回事,弄了两天了都弄不好,自己都被自己蠢哭了。。。哪位大虾能帮一下啊,感激不尽
发表于 2013-12-4 17:27:15 | 显示全部楼层
改成这样试试
uvm_config_db #(virtual my_if)::set/get

在monitor 和 driver 中使用 my_if.test modport
 楼主| 发表于 2013-12-5 21:10:59 | 显示全部楼层
回复 2# hbhbts


   改成modport貌似可以跟DUT连接上了,但是monitor监视输出的时候还是输出XXX,但是在波形图里面可以看懂输出有输出的

接口波形

接口波形

输出结果

输出结果

报告

报告
我觉得可能输没有延迟捕捉不到信号,但是我在代码中加#20 或者@vif.clk 等延迟语句就会不对。。。编译可以通过,也可以运行,但是一运行到延迟语句就不往下走了不知道咋回事啊
发表于 2013-12-6 08:26:53 | 显示全部楼层
你是不是没有赋予初值啊?没有赋予初值会造成这种现象:以a为例,如果没有赋予初值,1.a = a + 1;那么显示始终是xxxx。2.a = 3. 那么只有开始的时候是xx,3赋给之后就是正确数值了。第一个例子是因为未知 + 1还是未知。
 楼主| 发表于 2013-12-6 09:53:20 | 显示全部楼层
回复 4# zyzfgpzgh


   恩,开始是没有赋初值,赋了初值后,在上面的波形图里显示的就想你说的那样,开始没有值是XXX,后来就有值了,但是我平台跑的时候读不出,我觉得可能是没有延时,但是我一加延时,运行到那句i就跑不下去了,晕死了,不会是我的ModelSim有bug吧。。。

                               
登录/注册后可看大图
我的代码,不知道为啥不能加#20;延迟语句啊。。。

eee.zip

4.74 MB, 下载次数: 30 , 下载积分: 资产 -3 信元, 下载支出 3 信元

我的代码

发表于 2013-12-6 10:58:11 | 显示全部楼层
我建议你把你的interface不要使用这么多modport和cb,直接都写在一起,再试试
发表于 2013-12-6 11:05:19 | 显示全部楼层
或者你直接在monitor里面直接uvm_config #(virtual my_if)::get(..... vif)
display("data=%d", vif.txd)
这样试试
还有为了看你的代码,我花了4个信元,希望归还..
 楼主| 发表于 2013-12-6 11:19:39 | 显示全部楼层
回复 7# hbhbts


   好的,我要怎么把信元还给你呢?全给你都行~帮我把这个问题解决一下吧,我觉得我现在就是不能在monitor的main_phase里面写任何延时语句,我的代码你那可以run么?是不是也是没结果?
 楼主| 发表于 2013-12-6 11:37:02 | 显示全部楼层
回复 7# hbhbts


   觉得现在的问题是接口可以跟DUT连上了,但是一开始输出是XXX所以读到的就是XXX,我想写个延迟#20再读,可是每次运行到延迟就会自动停下来,不知道为啥? QQ截图20131206113544.png
发表于 2013-12-6 11:52:56 | 显示全部楼层
你写延迟20的monitor的main_phase代码给贴下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 07:52 , Processed in 0.032172 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表