Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

BFMの使い方

Verification Engineerの戯言


で紹介した「SystemVerilog User Group Fall Meeting:プレゼンテーション資料」の
「Functional Coverage in SystemVerilog (Kevin Schott)」では、
Functional Coverageについて、moduleを使って説明しています。
資料のPage.14の上に次のようなコードがありました。
    module Top;
        logic clk; logic [15:0] bus;
        I_gen_01 stream_gen = new;
        Fetch_bfm bfm(clk, bus);
        Cpu dut(clk, bus);
        initial bfm.startUp("CPU_1",stream_gen,20);
    endmodule
BFM(bfm)のタスクstartUPをinitial文で起動しています。
このタスクstartUpは、Cpu(dut)に対するデータを共有するタスクで、次のようになっています。
    task startUp(string name, I_gen stream_gen, int count);
        for (int n=0; n<count; n++) begin
            curr = stream_gen.getInstr(name);
            drive(curr);
            curr.cover_instr.sample();
            if (n>0) cg.sample();
            prev = curr.copy();
        end
    endtask

こんな使い方もあるのですね。勉強になりました。