FC2カウンター FPGAの部屋 OVL(Open Verification Library)を試してみる5(ovl_next, ovl_frame その1)
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

OVL(Open Verification Library)を試してみる5(ovl_next, ovl_frame その1)

今回は、ovl_nextとovl_frameを試してみる。今回は例を作るのに時間がかかってしまった。良い例(とはなっていないかもしれないが?)を作るのは大変だと思った。
ovl_nextは、reqの次にackが来るというように、Aという信号がアサートされた後の確定したクロック後にBという信号がアサートされるというアサーションだ。例を見てみよう。下に示したのが実際に書いたovl_nextの記述。

    // ta0がアサートされた次のクロックでack0がアサートされる
    ovl_next #(
        `OVL_ERROR,            // severity_level
        1,                    // num_cks(1クロック後にアサート)
        1,                    // check_overlapping (off)
        1,                    // check_missing_start (on)
        `OVL_ASSERT,        // property_type
        "ERROR: ta0がアサートされた次のクロックでack0がアサートされていない",
        `OVL_COVER_BASIC,    // coverage_level
        `OVL_POSEDGE,        // clock_edge
        `OVL_ACTIVE_HIGH,    // reset_polarity
        `OVL_GATE_CLOCK        // gating_type
    ) ta0_ack0_assertion (
        clk,
        reset,
        1'b1,                // enable
        ta0,                // start event
        ack0,                // test_expr
        fire_ta0_ack0_as    // fire
    );


これはta0がアサートされていから1クロック後に必ずack0がアサートされるということを示したovl_nextのアサーションだ。もし、複雑なRTLコードの2つの信号間に、同じクロック期間でアサートされる関係がある時には、このようなアサーションを設計者が入れておけば、あとでRTLコードを読む人へのメッセージともなることだろう?(どっかで、聞いた?、見た?言葉)

次にovl_frameだが、これはovl_nextはA, B信号間のクロック数は確定している必要がある。ovl_frameは、Aがアサートされてから、最小何クロックから最大何クロックまでにBがアサートされれば良いというアサーションになる。下に例を示す。

    // req0アサートされた後で、ack0 が2~4クロックの間に1になる
    ovl_frame #(
        `OVL_ERROR,                // severity_level
        2,                        // min_cks
        4,                        // max_cks
        `OVL_IGNORE_NEW_START,    // action_on_new_start
        `OVL_ASSERT,            // property_type
        "ERROR: req0がアサートされた後の2~4クロック後にack0が1にならない",
        `OVL_COVER_BASIC,        // coverage_level
        `OVL_POSEDGE,            // clock_edge
        `OVL_ACTIVE_HIGH,    // reset_polarity
        `OVL_GATE_CLOCK        // gating_type
    ) req0_ack0_assertion (
        clk,
        reset,
        1'b1,                // enable
        req0,                // start event
        ack0,                // test_expr
        fire_req0_ack0_as    // fire
    );


OVL_IGNORE_NEW_STARTを定義してあるので、Aの信号req0はパルスではなくて、アサートされ続ける信号でも問題ない。
次は、実際に例を作って、結果を見てみることにする。(もう作って、やってありますが。。。)

参考文献:Accellera Standard OVL V2 Library Reference Manual Software Version 2.4 March 2009
  1. 2010年03月17日 05:25 |
  2. アサーション事始め
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1407-f217eaa6
この記事にトラックバックする(FC2ブログユーザー)