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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1705|回复: 6

[求助] 在程序中修改对象语法问题

[复制链接]
发表于 2021-4-13 20:59:53 | 显示全部楼层 |阅读模式

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

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

x
task generator (int n)
      transaction t;
      t=new();
      repeat(n) begin
      t.addr=$random(); //变量初始化
     $display("sending addr=%h",t.addr);
      transmit(t);
      end
      请问为什么t=new();语句如果不放在repeat函数中,transmit发送的t.addr就一直是一个固定的值,而不会随机的改变?
发表于 2021-4-13 21:12:17 | 显示全部楼层
因为这句代码只执行了一次,t就只赋值了一次,放到repeat里面才会重新赋值,不知道这样你明不明白
 楼主| 发表于 2021-4-14 10:25:17 | 显示全部楼层


uu_chasel 发表于 2021-4-13 21:12
因为这句代码只执行了一次,t就只赋值了一次,放到repeat里面才会重新赋值,不知道这样你明不明白 ...


   你的意思是t虽然是一直指向这个对象,但是transmit(t),如果没有重新赋值,就算对象内部的addr一直都在改变,但是t一直都是指向最初的那个未改变对象的内容。
发表于 2021-4-14 11:01:43 | 显示全部楼层


Freaco 发表于 2021-4-14 10:25
你的意思是t虽然是一直指向这个对象,但是transmit(t),如果没有重新赋值,就算对象内部的addr一直都在 ...


这个不涉及到对象,就是简单的函数调用问题,你想对t重新赋值就要重新调用一下那个函数
发表于 2021-4-14 12:33:38 | 显示全部楼层
这跟对象没关系,影响的就是线程的延迟,只要generator repeat循环里或者transmit()里有延迟(#语句或者@(posedge clk)等),送到DUT的就是变的,如果没有延迟,repeat在同一时刻完成n次循环,最后就是repeat(n)的最后一次随机值送到DUT
发表于 2021-4-16 17:15:01 | 显示全部楼层


anpengfei 发表于 2021-4-14 12:33
这跟对象没关系,影响的就是线程的延迟,只要generator repeat循环里或者transmit()里有延迟(#语句或者@(po ...


是这样的,$display打印的可能是不同的,dut口上有可能是相同的
 楼主| 发表于 2021-4-20 19:22:14 | 显示全部楼层


anpengfei 发表于 2021-4-14 12:33
这跟对象没关系,影响的就是线程的延迟,只要generator repeat循环里或者transmit()里有延迟(#语句或者@(po ...


感谢大佬好像是这样,在同一时间点,t里面的addr只被赋予了一次值,循环是一个函数不消耗仿真时间,感谢大佬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-14 19:20 , Processed in 0.038843 second(s), 7 queries , Gzip On, Redis On.

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