はじめに
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でインスタンスするサンプルコードを作成しました。
コメント