1 Star 0 Fork 0

大浪淘沙/sv_tb_router

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Scoreboard.sv 1.71 KB
一键复制 编辑 原始数据 按行查看 历史
大浪淘沙 提交于 2022-02-11 21:56 +08:00 . init
`ifndef _SCOREBOARD_SV_
`define _SCOREBOARD_SV_
class Scoreboard;
// data or class properties
Packet in_pkt, out_pkt;
Packet in_pkt_q[$];
event DONE;
string name;
pkt_mbx sb_in_mbx, sb_out_mbx;
bit [3:0] sa, da;
covergroup router_cov;
coverpoint sa;
coverpoint da;
cross sa, da;
endgroup
// initialization
function new(string name, pkt_mbx sb_in_mbx, sb_out_mbx);
this.name = name;
this.sb_in_mbx = sb_in_mbx;
this.sb_out_mbx = sb_out_mbx;
router_cov = new();
endfunction : new
extern virtual task start();
extern virtual function void check();
endclass : Scoreboard
task Scoreboard::start();
fork
forever begin
sb_out_mbx.get(out_pkt);
while (sb_in_mbx.num()) begin
sb_in_mbx.get(in_pkt);
in_pkt_q.push_back(in_pkt);
end
check();
end
join_none
endtask: start
function void Scoreboard::check();
static int cmp_cnt = 0;
string msg;
int idx[$] = in_pkt_q.find_first_index() with (item.da == out_pkt.da);
if (idx.size() == 0) begin
$display("reveive value error!");
$finish;
end
in_pkt = in_pkt_q[idx[0]];
in_pkt_q.delete(idx[0]);
if(in_pkt.compare(out_pkt, msg)) begin
$display("match. %d", cmp_cnt++);
sa = in_pkt.sa;
da = in_pkt.da;
router_cov.sample();
$display("the coverage process %f", $get_coverage());
end else begin
$display("not match %p, %p ", in_pkt.payload, out_pkt.payload);
$finish;
end
if(cmp_cnt >= pkt_cnt || $get_coverage()== 100) begin
-> DONE;
end
endfunction: check
`endif
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/bai-mengwei/sv_tb_router.git
git@gitee.com:bai-mengwei/sv_tb_router.git
bai-mengwei
sv_tb_router
sv_tb_router
master

搜索帮助