SystemC

VCDファイルを階層ごとに修正する

SystemCで信号波形をダンプする際には、VCD形式で出力することが多いと思います。 SystemCのダンプ形式だと、「階層.信号」といった感じでフラットに出力されてしまうのでどうしても波形ビューワーで見ると、見づらいかと思います。 そこで、こんなものがあ…

固定小数点型において、動的に整数幅を変える

SystemC Forumにて、 How to change the word length of "sc_fix" dynamically? Any examples? 高位合成(RTLへの実装)とかを考えると、どうしてもデータ幅(bit幅)を意識します。 予め bit幅が決まりきっている場合だと問題ないかもしれませんが、 bit幅を見…

SystemC-2.3インストール(clang3.3)

clang 3.3で SystemC-2.3をインストールしようとした際のメモ。 $> ../configure CC=clang CXX=clang++ : : configure: error: "sorry...compiler not supported" ってな感じでエラーが出ます。 どうやら、INSTALLには記載があるのに、clangは使えないようで…

SystemC:未使用 or 固定値端子を隠蔽出来る闇記述

前に SystemC:未使用 or 固定値端子の処理 を書いた際に思ったことがあります。 先ずはこちらのコードをみてください。 #include <systemc.h> //---------------------------------------------// static struct { template < typename T > operator sc_core::sc_signa</systemc.h>…

SystemC:未使用 or 固定値端子の処理

How to terminate unused ports of modules in the port binding? SystemCモデルの接続において、Verilog HDLのように 未使用端子を簡単に処理出来ません。 VHDLのように何かしらを接続する必要があります。 つまり、以下のようなコードになります。 #includ…

Info:(I804) ... is deprecatedを非表示にする

例えば、SystemCモデルコンパイラ時に「-DDEBUG_SYSTEMC」をつけると Info: (I804) /IEEE_Std_1666/deprecated: sc_signal::addtrace() is deprecated のようなメッセージが表示されます。 このメッセージは毎回表示されるので、出力画面がいっぱいになりま…

SystemCインストール (Visual Studio 2012)

Accellera Systems Initiative Forumsにて、スレッドがあったので紹介。 SystemC in Visual Studio 2012 Visual Studio 2012を使う人は見てみてください。 引用 1. Installed Visual C++ 2012 Express Edition 2. Download Systemc-2.3.0.tgz 3. uncompress …

SystemC 2.3 : sc_starvation_policy

SystemC 2.3から追加になっている機能になります。 sc_start()時に、sc_starvation_policyを指定できます。 4.2.1 Function declarations より引用 enum sc_starvation_policy { SC_RUN_TO_TIME, SC_EXIT_ON_STARVATION }; default値は「SC_RUN_TO_TIME」で…

SystemC 2.3:throw_it

SystemC 2.3にて追加された「throw_it」についてです。 サンプルコード # include <stdio.h> # include <systemc.h> SC_MODULE( hoge ){ std::exception ex; sc_event ev; sc_process_handle t; int q; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD( target ); t = sc_get</systemc.h></stdio.h>…

SystemC 2.3 : reset/kill event

SystemC 2.3では、reset/kill 発生時のイベントを利用して プロセスを動作させることも出来ます。 サンプルコード # include <stdio.h> # include <systemc.h> SC_MODULE( hoge ){ sc_event ev; sc_process_handle t; int q; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD(</systemc.h></stdio.h>…

SystemC 2.3:unwind (reset and kill)

前回の「reset/kill」を観測することができます。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_event ev; sc_process_handle t; int q; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD( target ); t = sc_get_current_process_handle();</systemc.h></stdio.h>…

SystemC 2.3:reset and kill

SystemC 2.3で追加された「reset と kill」についてです。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_event ev; sc_process_handle t; int q; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD( target ); t = sc_get_current_process_h</systemc.h></stdio.h>…

SystemC 2.3 : sync_reset_on/off

SystemC 2.3の「sync_reset_on/off」についてです。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_event ev; sc_process_handle t; int q; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD( target ); t = sc_get_current_process_handle(</systemc.h></stdio.h>…

SystemC 2.3 : disable and enable

SystemC 2.3では、Process Control 編です。 今回は、「disable & enable」についてです。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_in<bool> clock; sc_process_handle t; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD( target ); sensi</bool></systemc.h></stdio.h>…

SystemC 2.3:suspend and resume

SystemC 2.3では、Process Controlはかなり拡張されています。 今回は、「suspend & resume」についてです。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_event ev; sc_process_handle t; SC_CTOR( hoge ) { SC_THREAD( calling ); SC_THREAD</systemc.h></stdio.h>…

SystemC 2.3:Process Handles

SystemC 2.3で色々拡張?変更されたので、 勉強がてら書いていきたいと思います。 先ずは、正常動作というか何も変更を加えてない状態です。 ここでは、t に対しての属性を表示させています。 サンプルコード #include <stdio.h> #include <systemc.h> SC_MODULE( hoge ){ sc_proc</systemc.h></stdio.h>…

SCVインストール(SystemC 2.3版)

基本的な操作は Ubuntu12.04に SCV をインストール と変わりません。 違う点は config時の指定だけです。 SystemCのインストール先は個別に違うと思うので、置き換えてください。 SystemC 2.2 $> ../configure [--prefix=インストール先] --with-systemc=/us…

SCV:SystemCデータ型のランダマイズ

今まで試したソースは C/C++のデータ・タイプだったので、 SystemCのデータ・タイプで試してみました。 サンプルコード #include <scv.h> int sc_main( int argc, char* argv[] ) { printf( "-----------------------\n"); printf( "--- Type:sc_int<8> ---\n"); pr</scv.h>…

SCV_SOFT_SONSTRAINTを書いてみた。

SystemVerilog 2012より追加された soft constraintが どんなものか分からなかったので SCVで書いてみました。 SystemVerilog 2012 : soft constraint サンプルコード #include <scv.h> //Valid values for a are 10 or 30 class slower : public scv_constraint_ba</scv.h>…

SCV:制約付ランダムデータ生成(その2)

今回は、SCVを使った制約付きランダム生成(その2)です。 前回のデータを元に更に制約を加えてみたいと思います。 サンプルコード #include <scv.h> // Valid values for a are 10-20, 50-60, 90-100 class slower : public scv_constraint_base { public: scv_smart</scv.h>…

SCV:制約付ランダムデータ生成(その1)

今回は、SCVを使った制約付きランダム生成(その1)です。 今までの keep_only/keep_outの記述を SCV_CONSTRANT を使って書くことができます。 サンプルコード #include <scv.h> // fast simple constraint. // Valid values for a are 10-20, 50-60, 90-100 class fa</scv.h>…

SCV:重み付けランダムデータ生成(値の範囲)

scv_bagを使ってランダムの確率分布を指定することが出来ます。 前回は値に対してですが、値の範囲に対しても同じことが可能です。 サンプルコード #include <scv.h> int sc_main( int argc, char* argv[] ) { scv_bag<pair<int,int> > dist; dist.add(pair<int, int>(0,4), 15); // 50% dis</int,></pair<int,int></scv.h>…

SystemC 2.3:sc_start(1) Error

きっかけはこちらのスレッドになります。 Error : no matching function for call to SC_start SystemC-2.2では、 sc_start(1); のような sc_start(int); 記述を許していたんですね。 書いたことなかったので、試しに記述して確認してみました。 SystemC-2.2…

SCV:重み付けランダムデータ生成(値)

scv_bagを使ってランダムの確率分布を指定することが出来ます。 サンプルコード #include <scv.h> int sc_main( int argc, char* argv[] ) { scv_bag<int> dist; dist.add(0,15); // 50% dist.add(1,8); // 27% dist.add(2,4); // 14% dist.add(3,2); // 6% dist.add(4,1</int></scv.h>…

SCV:分布を指定したランダムデータ生成

SCVではランダム生成において、モードが存在します。 今回はそれらを試してみました。 モード 説明 RAMDAM 指定分布範囲での一様なランダム生成 SCAN とりうる値で小さいものから大きいものへと生成 RANDOM_AVOID_DUPLICATE 生成可能な数値が出尽くすまで同…

SCV使用時の役立つ?gccオプション

SCVをコンパイルする際の Makefileはこんな感じです。 ※使用する際にはインストールパスを自分のに置き換えてください。 SYSTEMC_HOME = /usr/local/lib/systemc-2.2.0 SCV_HOME = /usr/local/lib/scv-1.0p2-sysc2.2 TARGET_ARCH = linux SYSTEMC_INC_DIR = …

SCV:ランダムデータの生成

SCVをインストールしたので、色々書いてみたいと思います。 先ずは基本的なランダムデータの生成から。 サンプルコード #include <scv.h> int sc_main( int argc, char* argv[] ) { scv_smart_ptr<int> data_p( "data" ); for (int i=0; i<20; i++) { data_p->next(); pr</int></scv.h>…

SCV error: ‘_scv_pop_constraint’

Ubuntu12.04に SCV をインストール 後に exampleを動かすと 以下のような Errorが発生します。 ※実行したものは「examples/scv/randomization/constraints」 : ./run.x scv_constraints.cpp: In constructor ‘packet_base_constraint::packet_base_constrain…

Ubuntu12.04に SCV をインストール

SCV(SystemC Verification library)のことです。 2006年以降全く更新がない困ったライブラリちゃんなので、 ちょっと火がついたのでインストールしてみました。 環境 Ubuntu12.04 LTS(32bit) gcc/g++ 4.4.7 SystemC 2.2 ダウンロード こちらからファイルをダ…

SystemC動作時に確認している環境変数

SystemCでは、マニュアル(LRM)に載っていないけど 動作時に見ている環境変数が存在する。 src内部を getenv とかで grepした結果です。 変数名 2.2 2.3 内容 SYSTEMC_REGRESSION レ レ よくわからない... リグレッション用の何か? SC_SIGNAL_WRITE_CHECK レ…

【SystemC】libtool + gdbの使い方

SystemC-2.3で、libtoolを使ってコンパイル&リンカした場合の 実行形式ファイルらしきものを見るとスクリプトになっています SystemC-2.3では多分 libtoolを使うことが推奨されています。 サンプルコード(sc_main.cpp) #include <systemc.h> int sc_main(int argc, char</systemc.h>…

SystemC Utillity functions : sc_abs

SystemC-2.2からあります。 絶対値を返す関数になります。 ※ただし、sc_logic/sc_bitなどのデータ型には使えません。 template <class T> const T sc_abs( const T& ); サンプルコード #include <systemc.h> int sc_main(int argc, char* argv[]) { sc_int<10> a, b, c; sc_int<1</systemc.h></class>…

SystemC Utillity functions : Version and Copyright

SystemC-2.2からあったようですが、説明も少ないため SystemC-2.3前提で話をします。 用意されている function 以下の 3つの関数が用意されています。 sc_copyright() sc_version() sc_release() どのような動きになるかはこちらを見てください。 サンプルコ…

SystemC 2.3 : sc_vector

SystemC-2.3(IEEE1666-2011)から追加された「sc_vector」を書いてみました。 sc_vector は、モジュールや信号について記述することができます。 ポート信号に対して サンプルコード #include <systemc.h> SC_MODULE( hoge ){ sc_vector<sc_in<bool> > in; void m_process(); SC_CTOR</sc_in<bool></systemc.h>…

Macユーザー必見! MacOSに簡単にSystemCをインストール

こんなサイトがあったんですね。 http://www.logicpoet.com/ こちらのサイトの「Downloads」に以下のようなものがあります。 「SystemC Installation Suite for OSX」では、「SystemC 2.2」だけではなく「SCV」、「TLM2」や「GreenSocs」などのライブラリが…

TLMモデルからSystemCモデルへの7つの課題

Merry Christmas!!! SystemCでは幅広い範囲の抽象度で記述することができます。 それではそれぞれのモデルを再度は以下のような感じになります。 モデリング例 Cycleモデル #include <stdlib.h> #include <vector> using namespace std; #include <systemc.h> SC_MODULE( hoge ) { sc_in <bool > </bool></systemc.h></vector></stdlib.h>…

TLM2.0 Socketの種類を把握して有効に使おう

TLM2.0モデルのインターフェースになる Socket についてです。 Socketとは何か? TLM2.0のコアインターフェース(トランスポート、DMI、デバッグトランスポート)の関数呼び出しを提供し、それらのインターフェースをグループ化してポートよりも使いやすくし…

SystemC 2.3変更点(WRITER_POLICY)

SystemC-2.3から追加された WRITER_POLICYについて SystemC-2.2では SystemC-2.2では、sc_signalに対して複数のプロセスから アクセスするような記述があるとエラーになってました。 #include <systemc.h> SC_MODULE( hoge ){ sc_in <bool > xrst; sc_in <bool > set_p; sc_in <sc_uint<32> > setd</sc_uint<32></bool></bool></systemc.h>…

SystemC 2.3変更点([async_]reset_signal_is)

前回までで、SystemCの thread(process)について語ってきました。 特に SC_CTHREADに対して細かく語ってきたのですが、SystemC-2.3の変更点を 見ていくと面白いことがわかります。 今回の記事はそのような内容になってます。 async_reset_signal_is の追加 S…

SC_CTHREADを活かすためにsc_signalに拡張を試みた話

私が嫌い苦手な SC_CTHREADを使えるように出来ないかなと思い、 sc_signalへの拡張をトライしてみました。っていうお話です。 先に結論だけ書いておくと、面倒臭くなって拡張断念しました。 背景 なぜ SC_CTHREADが嫌い苦手かというと、抽象度が低いからにな…

誰得?SystemCラッパー作成

HDL(Verilog-HDLやVHDL)に対して、SystemCラッパーを作成する方法です。 ラッパーを作成することで、シミュレータでSystemCとHDLとの Co-Simulationが出来るようになります。 Cadence Verilog-HDL $> ncvlog ファイル名 $> ncshell -import verilog -into sy…

SystemCの thread(process) を理解しよう

今回は、SystemCで記述する際に肝となるthread(process)の話です。 まずは、サンプルコードを見てください。 サンプルコード #include <systemc.h> SC_MODULE( hoge ){ sc_in <bool > clk; sc_in <bool > xrst; sc_in <sc_uint<32> > indata1; sc_in <sc_uint<32> > indata2; sc_out <sc_uint<64> > outdata_met; sc_out <sc_uint<64> ></sc_uint<64></sc_uint<64></sc_uint<32></sc_uint<32></bool></bool></systemc.h>…

SystemC 2.3のインストール(Windows:Visual C++ 2008)

ほとんど9割はLinuxで作業しているので、使わないのですが Visual C++の GUIは便利なので、インストールしてみました。 ※環境が古くてすいませんが、私が試したのは Windows XPです。 インストール systemc-2.3.0.tgzを展開 $> tar xvf systemc-2.3.0.tgz 展…

gdb で sc_uintの加算の仕組みを見てみよう

データ型について今週は見ていったので、もう少し。 サンプルコード #include <stdio.h> #include <systemc.h> int main (int argc, char* argv[]) { sc_uint<8> a,b; sc_uint<9> c; a = 2; b = 30; c = a + b; cout << "a = " << a.to_string() << ", b = " << b.to_string() <<</systemc.h></stdio.h>…

sc_uint<1>とsc_biguint<1>の「~」演算

前回が bool型についてだったので sc_uint<1>だとどうなるのか? っということで試してみました。 サンプルコード #include <stdio.h> #include <systemc.h> int main (int argc, char* argv[]) { bool bool_bit1 = 0; int bool_data = ~bool_bit1; bool bool_bit1not = ~bool_bi</systemc.h></stdio.h>…

bool型と「!」と「~」演算子

SystemC(C/C++)を使う上での常識的なネタを。 まずは 以下のサンプルコードを見てください。 - サンプルコード #include <systemc.h> SC_MODULE( hoge ){ sc_in <bool > clk; sc_in <bool > xrst; sc_in <sc_uint<32> > indata1; sc_in <sc_uint<32> > indata2; sc_out <sc_uint<64> > outdata; void process(); SC_CTOR( h</sc_uint<64></sc_uint<32></sc_uint<32></bool></bool></systemc.h>…

SystemC:bool型を連結するのはやめましょう

bool型でハマりそうな(私が勝手にハマっただけかも)記述について紹介。 ビット連結記述の際には注意が必要です。 ※bool型の詳細について、今後紹介。 サンプルコード #include <stdio.h> #include <systemc.h> int main (int argc, char* argv[]) { sc_uint<8> in; in = 0xfa; bo</systemc.h></stdio.h>…

SystemC:初期化リストを記述するようにしよう

前回 name()関数使ってますか? 紹介した際に、信号名の表示が Port_xになってます。 これを宣言した変数名と同じ名前にするにはどうすればいいか? 解決策としては、コンストラクタの初期化リストに記載することです。 参考:ロベールのC++教室 - 第22章 …

SystemC:name()関数使ってますか?

SystemCを構成しているライブラリには、name()関数が存在します。 name()関数は色々な場面で使えると思います。 モジュールや信号のインスタンスを取得する。 サンプルコード #include <systemc.h> SC_MODULE (hoge) { sc_in<bool> clock; sc_in<bool> reset; sc_in<sc_uint<8> > indata; sc_out<sc_uint<8></sc_uint<8></sc_uint<8></bool></bool></systemc.h>…

デバッグ出力のコードの作り方

SystemCにおいてデバッグ用に表示を拡張させたい時には、 以下のように #defineマクロを作成して作ることができます。 今回は、シミュレーション時間と呼ばられた際のコード行を 一緒に出力するものをサンプルとしてあげています。 サンプルコード(SystemC-2…