インスタンス SystemC

はじめに

SystemCで階層設計(インスタンス)を行います。

サンプルコード

topがdffというモジュールをインスタンスするサンプルコードです。

sample.cpp
#include <systemc.h>

// D-FFを宣言
SC_MODULE(DFF) {
    sc_in<bool> SC_NAMED(clk);
    sc_in<bool> SC_NAMED(d);
    sc_out<bool> SC_NAMED(q);

    SC_CTOR(DFF){
        SC_CTHREAD(flip, clk.pos());
    }

    void flip() {
        while(true) {
            wait();
            q.write(d.read());
        }
    }
};

// Topモジュール。D-FFをインスタンス
SC_MODULE(TOP) {
    sc_in<bool> SC_NAMED(clk);
    sc_in<bool> SC_NAMED(d);
    sc_out<bool> SC_NAMED(q);

    DFF dff1; // D-FFをdff1という変数で宣言
    DFF dff2; // D-FFをdff2という変数で宣言

    sc_signal<bool> SC_NAMED(buf);

    SC_CTOR(TOP):
        dff1("dff1"), // dff1をインスタンス
        dff2("dff2")  // dff2をインスタンス
    {
        dff1(clk, d, buf); // ポートを接続
        dff2(clk, buf, q); // ポートを接続
    }
};

int sc_main(int argc, char* argv[]) {
    sc_clock clk("clk", 10, SC_NS);
    sc_signal<bool> d, q;

    TOP top("top");  // topをインスタンス
    top.clk(clk);
    top.d(d);
    top.q(q);

    d.write(1);
    sc_start(100, SC_NS); // シミュレーション実行

    std::cout << q.read() << std::endl;

    return 0;
}

// 実行結果
// 1

まとめ

SystemCでインスタンスするサンプルコードを作成しました。

コメント

タイトルとURLをコピーしました