SystemVerilog VMM Workshop Lab Guide(LG)学习笔记-Lab2 VMM Transaction & Atomic Generator
2012-11-01 23:39
1271 查看
vmm_data中的重要函数有allocate(), compare(), copy(), copy_data(), display(),psdisplay(),
在Packet.sv中添加vmm_log与随机数据成员,log声明为static
定义Packet约束
使用allocate()代替new(),便于重用.
这是一种类似$cast()的处理方法:
例如Generator中
这样很容易使用派生类替换blueprint.
填充copy函数
$cast(dest_var, source_exp);
copy函数的两种用法:
1. $cast(cbja, objb.copy()); 将obja的内存回收,赋予新内存,再将objb的内存中的内容复制到obja
2. objb.copy(obja); 这样操作obja的内存仍然存在,将objb的内容复制到obja中。这在以同步/通信为目的保留资源是会使用到。
通过channel在transaction中传递对象`vmm_channel(Packet),建立channel
添加`vmm_atomic_gen(Packet, "Packet Gen"),建立Generator
在build()中将Packet_atomic_gen对象gen中的属性stop_after_n_insts置为cfg中的run_for_n_packets
stop_after_n_insts的作用为生产该值的对象,发送至channel后generator停止,发出vmm_notify::DONE
添加get.out_chan()的sink()方法,丢弃生成的数据,以免堵塞。注意使用该方法后channel常空,不要设法get()
在start()中添加gen.start_xactor();会自动调用main()方法。
在wait_for_end()中等待gen()的结束,在stop()中使用gen的stop_xactor()方法。当调用wait_if_stopped方法和wait_if_stopped_or_empty时,transactor会停止。
从Packet中派生出一个子类,约束其只产生长度为2~4之间的payload,将对象赋给gen的randomize_obj
这个lab中值得注意的是:约束名一样时,派生类的约束可以覆盖基类的约束。这里采用的是完全覆盖方式,假如约束valid中约束了a,b两个rand变量,而派生类的约束valid只约束了b变量,那么派生类中对象里的a变量就不会被约束了。
在Packet.sv中添加vmm_log与随机数据成员,log声明为static
定义Packet约束
使用allocate()代替new(),便于重用.
这是一种类似$cast()的处理方法:
例如Generator中
Xaction tr; function new(...); endfunction task run(); tr = new(); assert(tr.randomize()); tr.send(); endtask这种情况下,如果想在上层test中使用Xaction的派生类My_xaction就不能了,因为Generator初始化之后,新对象无法赋给tr.一种思路是将tr的初始化放在new()中,但是这样会导致每次run使用的tr都会指向同样的tr对象,这并不是期望的结果。可以采用的解决办法是:
Xaction blueprint; function new(...); blueprint = new(); endfunction task run; Xaction tr; if(!$cast(tr, blueprint.allocate())) ... endtask
这样很容易使用派生类替换blueprint.
填充copy函数
$cast(dest_var, source_exp);
copy函数的两种用法:
1. $cast(cbja, objb.copy()); 将obja的内存回收,赋予新内存,再将objb的内存中的内容复制到obja
2. objb.copy(obja); 这样操作obja的内存仍然存在,将objb的内容复制到obja中。这在以同步/通信为目的保留资源是会使用到。
通过channel在transaction中传递对象`vmm_channel(Packet),建立channel
添加`vmm_atomic_gen(Packet, "Packet Gen"),建立Generator
在build()中将Packet_atomic_gen对象gen中的属性stop_after_n_insts置为cfg中的run_for_n_packets
stop_after_n_insts的作用为生产该值的对象,发送至channel后generator停止,发出vmm_notify::DONE
添加get.out_chan()的sink()方法,丢弃生成的数据,以免堵塞。注意使用该方法后channel常空,不要设法get()
在start()中添加gen.start_xactor();会自动调用main()方法。
在wait_for_end()中等待gen()的结束,在stop()中使用gen的stop_xactor()方法。当调用wait_if_stopped方法和wait_if_stopped_or_empty时,transactor会停止。
从Packet中派生出一个子类,约束其只产生长度为2~4之间的payload,将对象赋给gen的randomize_obj
这个lab中值得注意的是:约束名一样时,派生类的约束可以覆盖基类的约束。这里采用的是完全覆盖方式,假如约束valid中约束了a,b两个rand变量,而派生类的约束valid只约束了b变量,那么派生类中对象里的a变量就不会被约束了。
相关文章推荐
- SystemVerilog VMM Workshop Lab Guide(LG)学习笔记-Lab1 VMM Environment & Message Service
- spring resource 学习笔记1.0 FileSystemResource&PathResource 学习
- IBM UNIX & LINUX -AIX 5L 系统管理技术 学习笔记1 -网络文件系统 NFS network file system
- IA32 architecture 学习笔记 (五)<chapter 2 System Architecture Overview>
- spark-streaming-[8]-Spark Streaming + Kafka Integration Guide0.8.2.1学习笔记
- K近邻法(KNN)学习笔记(used by python & matlab)
- 【学习笔记】day1_快速入门 14_电话拨号器定义布局&获取组件对象
- 【JAVAWEB学习笔记】16_session&cookie
- Memcached 学习笔记(一)安装 & helloworld
- 学习笔记:AlexNet&Imagenet学习笔记
- Mac OSX & iOS 操作系统学习笔记02——OSX和iOS的架构
- tarjan学习笔记(poj2186&&bzoj1051受欢迎的牛)
- VMware VSphere 虚拟化&云计算学习配置笔记(四)
- 设计模式学习笔记之 ( B…
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Struts2_实战演练(中)>(三十九)
- [学习笔记]Android广播发送者&广播接收者介绍
- 自然语言16.1_Python自然语言处理学习笔记之信息提取步骤&分块(chunking)
- 【C语言学习笔记】调用系统命令system
- 【js学习笔记-110】--------<canvas>中的图形
- ARM&LINUX学习笔记(3)---安装交叉编译器