代码拉取完成,页面将自动刷新
`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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。