代码拉取完成,页面将自动刷新
`ifndef _ENVIRONMENT_SV_
`define _ENVIRONMENT_SV_
class Environment;
// data or class properties
string name;
virtual router_io.tb rt_io;
rand int pkt_cnt;
constraint valid{
pkt_cnt inside {[1500:2500]};
}
pkt_mbx drv_mbx[16], sb_in_mbx, sb_out_mbx;
semaphore sem[16];
Driver drv[16];
Receiver recv[16];
Generator gen;
Scoreboard sb;
// initialization
function new(string name, virtual router_io.tb rt_io);
this.name = name;
this.rt_io = rt_io;
endfunction : new
extern virtual task run();
extern virtual task configure();
extern virtual task build();
extern virtual task start();
extern virtual task wait_for_end();
extern virtual task reset();
endclass : Environment
task Environment::run();
build();
reset();
start();
wait_for_end();
endtask: run
task Environment::configure();
if (!this.randomize) begin
$display("randomize failed!");
$finish;
end
endtask: configure
task Environment::build();
foreach (drv_mbx[i]) begin
drv_mbx[i] = new();
end
sb_in_mbx = new();
sb_out_mbx = new();
//-----------------
gen = new("gen", drv_mbx, pkt_cnt);
sb = new("sb", sb_in_mbx, sb_out_mbx);
foreach (sem[i]) begin
sem[i] = new(1);
end
foreach (drv[i]) begin
drv[i] = new($sformatf("drv[%0d]", i), drv_mbx[i], sb_in_mbx, sem, rt_io);
recv[i] = new($sformatf("recv[%0d]", i), i, sb_out_mbx, rt_io);
end
endtask: build
task Environment::reset();
this.rt_io.reset_n <= 1'b0;
this.rt_io.cb.frame_n <= '1;
this.rt_io.cb.valid_n <= '1;
##2 this.rt_io.cb.reset_n <= 1'b1;
repeat(15) @(this.rt_io.cb);
endtask: reset
task Environment::wait_for_end();
wait(sb.DONE.triggered);
endtask: wait_for_end
task Environment::start();
gen.start();
sb.start();
foreach (drv[i]) begin
drv[i].start();
end
foreach (recv[i]) begin
recv[i].start();
end
endtask: start
`endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。