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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6153|回复: 7

[求助] 在 SV中关于new函数 的一个问题

[复制链接]
发表于 2011-8-29 15:28:37 | 显示全部楼层 |阅读模式

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

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

x
我想问一下关于new函数的一个问题,由于没有太多的C和C++的基础,所以很多基本思想还不具备。

  在我们定义了一个类之后 例如 class  Packet ,如果要用它,需要声明一个句柄  Packet  pkt   并用new函数分配 内存地址 。


  这个new函数本身系统提供了一个,但是有时候,我看例子都会自己定义一个new函数 。 function new ( Arg1 ,Arg2)


  什么时候需要自己去定义一个new函数不用系统提供的呢 ?


多谢了
发表于 2011-8-29 18:02:09 | 显示全部楼层
以下是个人观念:
很多例子上都在例子里面做一些初始化的赋值操作,其实这些操作不会必须在new里面做的,当时有些操作必须在new里做:
(1)子类的new需要重写,至少需要一句super.new(...)
(2)需要更新某些static属性的标识符,如object_id,你可能需要在重写new(...),比如
     class ....
          static  int id = 0 ;
       int  this_inst_id ;
       functon new(...)
             this_inst_id = id++ ;
             ....
          endfunction:new
.......
endclass
个人观点,仅供参考....
发表于 2011-8-29 18:08:19 | 显示全部楼层
而且你说的一句话也很到位:new是用来分配内存的。
你既然理解了这点,我想其他的都很好理解!
发表于 2011-8-29 21:32:01 | 显示全部楼层
new除了为你定义的object分配空间外,你还可以把一些你想在初始化时做的放进去,由你具体的应用决定。比如连接interface,给一些变量赋值!
 楼主| 发表于 2011-8-30 10:26:55 | 显示全部楼层
多谢楼上两位,收获不少 。在设计的时候,你的每一个 module ,最终都会映射到逻辑器件上的一些门上 。
在仿真的时候,每一个class都需要在计算机里面进行编译,需要一定的内存空间来处理这块class,如果有很多class并行执行,是不是每一个class需要分配不同的内存空间?如果默认的new函数的话,内存的地址是一样的?
发表于 2011-8-30 11:27:39 | 显示全部楼层
1、再次强调:不是所有的初始化不是必须放在new里的,实际上大多数初始化都可以写成set_*函数,我个人更喜欢这样做,包括设置interface。
2、module在仿真的时候也是一块内存区,所谓映射到门是你自己想的,比如与门,在仿真的时候计算机也不过是按照verilog的四值逻辑表做一个&操作,但是有一点就是module是静态驻留在内存中,也就是在仿真的时候它一直存在同样的一片地址中....
3、接着2的说class,仿真的时候也是一块内存区,但是它是动态的,也就是说它可能在整个仿真的时刻一直存在于同样的一块地址中(比如你的transactor一般来属于这种),有些class则是在仿真过程中的一段时间内是存在的,之后就消失了(也就是那块内存回收了,对jave和systemverilog来说这个操作是透明的),之后可能又重新生成了(比如你的transaction一般来说属于这种);
    理解了这两点,你上面的问题也该不是问题.........
发表于 2011-8-30 20:36:02 | 显示全部楼层
Systemverilog的内存空间的创建、管理和回收是用EDA工具实现的,用户无需关注。
每一个class都有一个默认的new()函数,但函数内没有内容;如果用户需要在new()函数中增加内容(如参数或执行代码),则可以重新定义new()函数。
 楼主| 发表于 2011-8-31 14:00:47 | 显示全部楼层
多谢各位,身边没有人帮助,还好有网络的帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-12-20 09:56 , Processed in 0.019232 second(s), 6 queries , Gzip On, Redis On.

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