重要点知识:
1、类trans2中只创建tran1的句柄t1,没创建对象,却可以利用信箱获得类trans3中的tran1建立的指向对象的句柄。
2、信箱put、get顺序不能错;如果不加fork...join先运行tr2.run()再运行tr3.run()是错误的。
3、下面代码中put()之后get()并不能直接获得传输值(t1),需要运行完tr3.run()之后才会get到t1。
4、注意传输的句柄、邮箱句柄在两个类中都要创建句柄,其中,负责put()的类还需要创建传输对象、句柄对象。
5、注意负责get()的类与负责put()的类,邮箱句柄需要指向同一邮箱对象。
6、trans2和trans3中都名为maibox req,这不是必须的。trans2可以是maibox tot,只要将req.get()改为tot.get(),tr2.req=tr3.req改为tr2.tot=tr3.req。
此外,注意类中创建对象后,其作用范围、生命周期。
module class_priact;
class trans1;
int a =5;
endclass
class trans2;
mailbox req;
task run();
trans1 t1;
this.req.get(t1);
t1.a=t1.a*2;
$display("trans2.is %0d",t1.a);
endtask
endclass
class trans3;
mailbox req;
function new();
this.req=new();
endfunction
task run();
trans1 t1;
t1=new();
this.req.put(t1);
$display("trans3.is %0d",t1.a);
t1.a = t1.a*3;
$display("t1.a*3.is %0d",t1.a);
endtask
endclass
initial begin
trans2 tr2=new();
trans3 tr3=new();
tr2.req=tr3.req;
fork
tr2.run();
tr3.run();
join
end
endmodule
仿真结果
本文详细阐述了在VHDL设计中,如何通过信箱机制实现不同模块间类对象的跨模块传递。重点讲解了类trans2如何通过句柄获取trans3中tran1对象的操作,以及put和get方法的执行顺序和注意事项。同时,涉及对象创建、作用域和生命周期管理的关键点。
1417

被折叠的 条评论
为什么被折叠?



