系统verilog-邮箱
system verilog- Mail Box
下面我贴出了邮箱的完整代码。它有一个 class 生成器、class 驱动程序和一个顶级代码。我的问题是在下面的代码中,在 Class Generator 中,如何使用 Transation tr 和 mailbox mbx?另外,在函数new中如何使用mbx?
program mailbox_example(bus_if.TB bus...);
class Generator; // Class Generator
Transaction tr;
mailbox mbx;
function new (mailbox mbx);
this.mbx=mbx;
endfunction
task run;
repeat (10) begin
tr=new;
assert(tr.randomize);
mbx.put(tr); //send out transaction
end
endtask
endclass
class Driver; //Class Driver
Transaction tr;
mailbox mbx;
function new(mailbox mbx);
this.mbx=mbx;
endfunction
task run;
repeat(10) begin
mbx.get(tr);
@(posedge busif.cb.ack);
bus.cb.kind<=tr.kind;
...
end
endtask
endclass
mailbox mbx; //Top level
Generator gen;
Driver drv;
initial begin
mbx=new;
gen=new(mbx);
drv=new(mbx);
fork
gen.run();
drv.run();
join
end
endprogram
邮箱是一种媒介,用于两个块之间的通信。
为什么邮箱在构造函数中..??
要在驱动器和发电机等两个模块之间进行通信,它们之间应该有一个公共邮箱(例如使用公共电缆将信息从 DTH 天线传输到机顶盒)。
为了在驱动程序和生成器之间共享一个公共邮箱,邮箱在顶级块(例如 Env)中实例化,并且它的句柄通过构造函数传递给驱动程序和生成器。
事务和邮箱如何使用?
邮箱具有存储和获取事务的默认方法,如 put()、try_put()、get()、try_get()、peek() 和 try_peek()。在生成器中,使用 put() 或 try_put() 方法将交易存储到邮箱中。在驱动程序中,使用 get()、try_get()、peek() 或 try_peek() 方法检索事务。
请参阅 SV LRM 中的第 15.4 邮箱 部分了解更多详细信息。 :)
下面我贴出了邮箱的完整代码。它有一个 class 生成器、class 驱动程序和一个顶级代码。我的问题是在下面的代码中,在 Class Generator 中,如何使用 Transation tr 和 mailbox mbx?另外,在函数new中如何使用mbx?
program mailbox_example(bus_if.TB bus...);
class Generator; // Class Generator
Transaction tr;
mailbox mbx;
function new (mailbox mbx);
this.mbx=mbx;
endfunction
task run;
repeat (10) begin
tr=new;
assert(tr.randomize);
mbx.put(tr); //send out transaction
end
endtask
endclass
class Driver; //Class Driver
Transaction tr;
mailbox mbx;
function new(mailbox mbx);
this.mbx=mbx;
endfunction
task run;
repeat(10) begin
mbx.get(tr);
@(posedge busif.cb.ack);
bus.cb.kind<=tr.kind;
...
end
endtask
endclass
mailbox mbx; //Top level
Generator gen;
Driver drv;
initial begin
mbx=new;
gen=new(mbx);
drv=new(mbx);
fork
gen.run();
drv.run();
join
end
endprogram
邮箱是一种媒介,用于两个块之间的通信。
为什么邮箱在构造函数中..??
要在驱动器和发电机等两个模块之间进行通信,它们之间应该有一个公共邮箱(例如使用公共电缆将信息从 DTH 天线传输到机顶盒)。
为了在驱动程序和生成器之间共享一个公共邮箱,邮箱在顶级块(例如 Env)中实例化,并且它的句柄通过构造函数传递给驱动程序和生成器。
事务和邮箱如何使用?
邮箱具有存储和获取事务的默认方法,如 put()、try_put()、get()、try_get()、peek() 和 try_peek()。在生成器中,使用 put() 或 try_put() 方法将交易存储到邮箱中。在驱动程序中,使用 get()、try_get()、peek() 或 try_peek() 方法检索事务。
请参阅 SV LRM 中的第 15.4 邮箱 部分了解更多详细信息。 :)