約 2,416,889 件
https://w.atwiki.jp/systemc/pages/16.html
SystemCのコンパイルを試す。 下記の記述がhello.cppにあるとすれば、 #include systemc using namespace sc_core; using namespace sc_dt; using namespace std; int sc_main(int argc, char **argv){ cout "Hello" endl; return 0; } g++ -o hello.x hello.cpp -I/usr/local/systemc-2.2/include -L/usr/local/systemc-2.2/lib-linux -lsystemc のようにコンパイルすることで、実行ファイルhello.xを作成することができる。/usr/local/systemc-2.2の部分は、SystemCをインストールしたディレクトリを記述する。lib-linuxの記述は、OSに合わせて変更する。 無事エラーなく作成できたら ./hello.xで実行しよう。 Hello と表示される。 SystemCのライブラリを使用するときに読み込むヘッダファイルは、systemcである。名前空間はsc_coreとsc_dtの2つが用意されている。dtは、data typeの略と思われ、sc_intなどのSystemCのデータ型が定義されている。SystemCのライブラリ中でmain()文が定義されているので、SystemCの記述はそのmain()文から呼び出されるsc_main()が最上位の記述となる。
https://w.atwiki.jp/systemc/pages/12.html
SystemC-2.3.1のインストール Accelleraのホームページからダウンロードする。特に修正しなくてもg++-4.9でコンパイル可能。修正以外の手順は2.2.0と同じ。 cygwin用は、configureするときに --enable-pthreadsのオプションが必要。 g++-4でのSystemC-2.2.0のインストール g++-4.9でコンパイルしようとするとエラーになる。エラー箇所(src/sysc/datatypes/bit/sc_bit_proxies.h)のmutableを消すとコンパイル可能ではあるが、他のバグもあるようなので、SystemC-2.3.1を使用するのがお勧め。 (ここから、2012年の記述) OSCIのホームページからダウンロードしてきたsystemc-2.2.0.tgzを展開する。 tar xvfz systemc-2.2.0.tgz 展開されたsystemc-2.2.0ディレクトリへ移動する。 cd systemc-2.2.0 src/sysc/utils/sc_utils_ids.cppの62行目に次の2行を加える。 #include cstdlib #include cstring src/sysc/kernel/sc_constants.hの中のSC_DEFAULT_STACK_SIZEは大きくした方が良い。0x50000くらいがお勧め。 作業用のobjdirディレクトリを作成する。 mkdir objdir objdirディレクトリへ移動する。 cd objdir CXX環境変数を設定した方が良いかもしれない。 export CXX=g++ コンパイル環境を構築する。 ../configure もし、環境を指定したい場合は、 ../configure --help で確認する。次のようにインストール場所を指定する場合が多い。 ../configure --prefix=/usr/local/systemc-2.2 インストール場所は、あらかじめ作成しておくこと。 コンパイルを行う。 make ライブラリなどをインストールする。 make install 2015-05-06 20 39 52 (Wed) -
https://w.atwiki.jp/systemc/pages/20.html
SystemC-AMSの紹介 SystemC-AMSは、Embedded Analog/Mixed-Signal(E-AMS) systemを取り扱う。デジタルの領域を扱うSystemCにアナログの領域を扱う手段を追加している。次のような目的で使われることを想定している。 実行可能仕様書 (Executable specification) 仮想試作 (Virtual prototyping) アーキテクチャ探索 (Architecture exploration) 実装検証 (Integration validation) SystemC-AMSのアナログシステムのモデル化の方法には次の3通りが用意されている。 Timed Data Flow (TDF) 離散時間の非線形な表現が可能。時間軸と周波数軸の処理を別々に定義する。 Linear Signal Flow (LSF) 連続時間の線形な数式を扱う。 Electrical Linear Network (ELN) 線形なふるまいをする部品(抵抗、コンデンサ、コイルなど)で回路を表現する。 TDFのモジュールはユーザが定義するが、LSFとELNでは用意されたモジュールを利用する前提になっている。これらのモジュールを含む上位階層はsc_moduleである。時間軸解析と小信号(周波数)解析を行うことができる。SPICEのような非線形解析はできない。 SystemC-AMS名前空間 TDFのモジュール LSFのモジュール ELNのモジュール 小信号(周波数)解析 時間軸解析 2012-02-15 18 47 06 (Wed) -
https://w.atwiki.jp/systemc/pages/27.html
高位合成 高位合成の定義は、学会でも業界でもきちんと定まっていないように思える。ここでは、高位合成(High Level Synthesis)は、RTL(Register Transfer Level)からの論理合成よりも抽象度の高い記述から自動的に論理回路を生成することと定義する。 入力がC言語などのプログラム言語であっても、HDL(Hardware Discription Language)で表現できるような内容のものしか受け付けないものが高位合成として市販されている場合もあるので、ユーザとしてはツールの機能をしっかり確認する必要がある。 動作合成 また、高位合成と同様な場面で使われる動作合成(Behavioral Synthesis)を、データパスに対するスケジューリングとリソースシェアリング(複雑な演算を時分割して演算器とレジスタを共用する)を自動生成する機能と定義する。 SystemCの高位合成ツールに望まれる機能 SystemCを用いた高位合成には、下記の機能が望まれる。 動作合成 インタフェース合成 関数型かオブジェクト指向による表現の抽象化 並列処理、処理タイミング、モジュール化、外部端子を表現する手段 高位の記述とは データパスの記述であれば、スケジューリングとリソースシェアリングを行う前の動作合成される記述が高位合成用の記述と考えられる。高位合成の価値はそれだけではないので、データパスのない制御系の記述で考えてみる。 汎用性の高い記述 動作の目的を明確にする。具体的な実装については、別の場所で定義する。 信号で進めと合図する。 signal.show(sign_go); 具体的な記述 動作を表現する。しかし、これでもまだ具体的な実装については、別の場所で定義する。 信号を青にする。 signal.set(color_blue); 詳細な記述 実装をそのまま記述する。ここまで記述するのであれば、高位合成は必要ない。 信号の青色灯を点灯する。黄色灯と赤色灯を消す。 signal.blue = true; signal.yellow = false; signal.red = false; 参考 動作合成 http //techon.nikkeibp.co.jp/article/WORD/20090107/163727/ SystemC推奨設計メソドロジ 合成編 http //jeita-edatc.com/users_lib/SystemC_DM_for_synthesis_080428.pdf SystemC Synthesizable Subset 1.3 draft Synthesis Working Group of Open SystemC Initiative 2014-02-11 13 14 07 (Tue) -
https://w.atwiki.jp/systemc/pages/21.html
SystemC-AMSライブラリのキーワードはsca_で始まる。マクロはSCA_で始まる。 AMSの基本的なクラスは名前空間sca_coreにある。 トレースやデータ型のようなユーティリティクラスは名前空間sca_utilにある。 モデル化の手法ごとに名前空間(namespace)が用意されている。 モデル化の手法 名前空間 TDF sca_tdf LSF sca_lsf ELN sca_eln モデル化手法にかかわらず同等なクラスがある場合は、名前空間で区別される。 たとえば、TDF用のモジュールのクラスはsca_tdf sca_moduleである。 2012-01-30 21 04 15 (Mon)
https://w.atwiki.jp/bambooflow/pages/53.html
SystemC なんとなく覚書き。 勉強のためにメモを残しているだけなので、間違いやテキトウな表現が大いにあります。賢いひとは参考にしないでください。 願わくばSystemCがもっと普及することを。 SystemCを始めるSystemCとは インストール(Linux,Cygwin,VC++EE) HelloWorld - 始めの一歩 Makefileの書き方 クロックカウンタを作る - モジュール定義を覚える 並列処理について - 並列処理動作を体感する Visual C++2008 Express Editionでの使用方法について SystemCの基本的な機能SystemCの基本データタイプ固定小数点 ユーザデータタイプ モジュール プロセス動的プロセスについて チャネルsc_clockクロック信号 sc_fifoチャネル 未分類検証環境モデル構成(テンプレート) SystemCのコアとなるクラス定義一覧 エラボレーション・フェーズ RTL記述 デバッグ 遅延モデル サンプル ビットアクセス 検証波形トレース レポート処理について SCV ↓まだまだ、勉強不足でわからないことだらけ。 間違いもあると思うので注意のほど。 TLM-2.0TLM-2.0について TLM-2.0クラス ジェネリック・ペイロード b_transportについて ブロッキング・インターフェースLTモデル Interconnect(ブロッキングI/F LTモデル) その他SystemC関連の歴史 コーディングスタイル(自分用) 用語集 参考ページ SystemCDoxygenマニュアル 関連サーチ Doxygenマニュアル 参考のためDoxygenを使ってみた。なかなか便利かも。 SystemC ver 2.1.v1 SystemC ver 2.2 TLM-1.0 TLM-2.0 Draft2 TLM-2.0 SCV-1.0p2 注意 packageとqtのフォルダは含めていない。 関連サーチ #bf
https://w.atwiki.jp/bambooflow/pages/145.html
SystemCとは SystemCとはSystemCとは? SystemCが持つ機能 SystemCの利点 SystemCの欠点 SystemCの使い道 SystemCを扱うにあたっての要求スキル SystemCとは? SystemCは、1999年9月に発足した組織OSCI(Open SystemC Initiative)により規格化された、新しいハードウェアモデリング言語である。OSCIから無償でSystemCライブラリが提供されている。 SystemCは、標準のC++で実装されたクラスライブラリで、C++記述によるハードウェア設計の構築を提供する。SystemCを利用できるのは、ハードウェアとソフトウェアにおけるの企画・提案から実装までの設計と検証の期間である。つまり、実際にハードウェアを設計する前段階の作業で利用することができる。 SystemCは高速なシステムレベルC++モデルの開発と交換を可能とするプラットフォームを提供する。 これはシステムレベルツールの開発のためのプラットフォームも提供する。 簡単に言うと、C++のコンパイラを使ってハードウェア記述が可能で検証もできてしまう優れもの。 ただし、SystemCを記述したからといって、それを直接ハードウェアにできるというわけではない。あくまでもハードウェアの代替となる検証用どまり。 ただ、高位合成ツール(SystemC→RTL)が徐々に実用化されつつあるところ。 先はまだわからない。 SystemCが持つ機能 C++でハードウェアを記述するために、SystemCライブラリは次のような特徴的な機能を持つ。 時間モデル ビット・データ型(sc_bv , sc_uint , sc_fixed, etc.) モジュールの記述(SC_MODULE) チャネル/ポート(プリミティブ・チャネル、階層チャネル、インターフェース) 並列動作環境(プロセス) 波形シミュレーション環境(VCD etc.) SystemCの利点 ライブラリが無償で提供されている C++ベースであるため、検証環境が容易に構築できる(GCCもしくはVC++コンパイラ) ソフトウェア/ハードウェア協調検証が比較的容易にできる あらゆる抽象度(TLMからRTLまで)が記述可能 SystemCの欠点 C++の基本的な知識とSystemC固有の記述を覚えなくてはならず、スタートまで若干ハードルがある プロセス間のタイミングでクセがあり悩まされる 記述の自由度が高すぎて、モデルの統一化がなされていない SystemCの使い道 SW/HW協調検証 高位合成(動作合成) 並列分散処理モデル etc. SystemCを扱うにあたっての要求スキル C,C++の知識があり、クラスの概念やテンプレートがわかる(協調検証モデル作成) Verilog-HDL等のハードウェア記述等に興味があり精通している(高位合成)
https://w.atwiki.jp/bambooflow/pages/111.html
SystemCの基本データタイプ SystemCの基本データタイプ基本データタイプ一覧 キャスト(データタイプの変換) 変換一覧(to_xxx)to_stringの使い方 coutで表示させたい場合 printfで表示させたい場合 sc_stringがない? SystemCでは、標準C++のデータ型に加えて以下のようなデータ型が扱える。 基本データタイプ一覧 データタイプ 符号 説明 使用例 sc_int<W> 付 Wビット整数 sc_int 16 a = -123; sc_uint<W> 無 sc_uint 32 addr = 0xdeadbeaf; sc_bigint<W> 付 Wが64ビット以上の整数 sc_biguint<W> 無 sc_bit - '0', '1' の2値 sc_bit b = '1'; sc_logic - '0', '1', 'x', 'z' の4値 sc_bit l = 'x'; sc_bv<W> - sc_bitのWビットベクタ sc_bv 8 bv = "10110110"; sc_lv<W> - sc_logicのWビットベクタ sc_lv 8 lv = "xxxx1010"; sc_fixed<NW, NI> 付 固定小数点NW=全サイズ、NI=整数サイズ sc_fixed 8,4 f = -1.25; sc_ufixed<NW, NI> 無 sc_ufixed 8,4 f = 1.5; 他にもあるが、基本はこんなもの。 C++では、8、16、32、64といったサイズしか扱うことはできない。 SystemCではハードウェアを意識した記述も書けるようにビットサイズが可変であるデータ型が準備されている。 また、sc_logic、sc_lv といった4値を扱うことができるデータ型もある。ただし4値を扱うとシミュレーション速度は低速になる。 SystemCの主な利用価値は、ソフトウェアとの強調検証となっている。そのため、速度が低下する4値は扱うことはほとんどない。 高位合成でも、4値は使用せずにsc_int 、sc_uint がほとんどになる。 sc_fixed ,sc_fixed の高速版であるsc_fixed_fast ,sc_ufixed_fast もある。 キャスト(データタイプの変換) sc_uint 16 x; sc_int 32 y; y = (sc_uint 32 )x; // C++のキャストと同じ 変換一覧(to_xxx) 基本データタイプに共通。 戻り値 関数 int to_int() unsigned int to_uint() long to_long() unsigned long to_ulong() int64 to_int64() uint64 to_uint64() double to_double() const std string to_string() to_stringの使い方 書式 const std string to_string (sc_numrep numrep) const sc_numrep列挙 説明 例(sc_int 8 100) 例(sc_int 8 -100) SC_NOBASE = 0 そのまま "100" "-100" SC_BIN = 2 2進数 "0b01100100" "0b10011100" SC_OCT = 8 8進数 "0o144" "0o634" SC_DEC = 10 10進数 "100" "-100" SC_HEX = 16 16進数 "0x64" "0x9c" SC_BIN_US 2進数(2の補数) "0bus1100100" "negative" SC_BIN_SM 符号付2進数 "0bsm01100100" "-0bsm01100100" SC_OCT_US 8進数(2の補数) "0ous144" "negative" SC_OCT_SM 符号付8進数 "0osm144" "-0osm144" SC_HEX_US 16進数(2の補数) "0xus64" "negative" SC_HEX_SM 符号付16進数 "0xsm64" "-0xsm64" SC_CSD 正規化符号付数字 "0csd10-00100" "0csd-0100-00" coutで表示させたい場合 2進数で代入したい場合。 普通Cでは、2進数は表示できないがSystemCならば表示できたりする。 sc_int 8 data = "0b01010011"; cout "data = " data.to_string(SC_HEX) endl; "0b"の後に"0"を付けると正数、"1"を付けると負数となる。 sc_int 8 data = 100; cout data endl; // 通常表示 cout data.to_string( SC_HEX ) endl; // 16進数 printfで表示させたい場合 SystemCのデータ型を表示するときの方法。 sc_int 32 data; printf( "data = %d\n", (int)data ); // キャスト printf( "data = %d\n", data.to_int() ); // int型に変換 次の方法はダメ。 printf( "data = %d\n", data ); // セグメンテーションエラー 以下のような警告が出る。 test.cpp function 内の `int sc_main(int, char**)' test.cpp 9 警告 cannot pass objects of non-POD type `class sc_dt sc_int 32 ' through `...'; call will abort at runtime ただし、コンパイルは通る。 通るが、実行すると"セグメンテーションエラー"となる。 sc_stringがない? SystemCのバージョン2.2ではsc_stringがなくなっている。 とりあえず、以下のようにすればよいかも。 typedef sc_string std string;
https://w.atwiki.jp/bambooflow/pages/112.html
SystemC関連の歴史 SystemCの歴史はまだ浅い。 以下に簡単にメモ。(間違っているかもしれないが) OSCI(オスキー) 標準化団体でSystemCの言語やモデリング・スタイル、ライブラリなどの標準化を行っている。 TLM普及・標準化団体には、 OSCI OCP-IP GreenSocs などがある。 抽象度の統一化がまだされていない。 過去 1999年9月、Open SystemC Initiative(OSCI)発足 2000年4月、SystemC ver1.0 リリース 2001年10月、SystemC ver2.0 リリース 2003年ころ、ハードウエア記述用のC言語系としてSystemCが業界標準として認知 2005年4月、TLM-1.0 公開 2005年5月、SystemC ver2.1 リリース 2005年12月、IEEE1666標準化「IEEE Std.1666-2005」(SystemC v2.1の範囲) 2006年12月、TLM2.0 Draft Kit(TLM2.0 Draft1 公開 2007年3月、SystemC ver2.2.0 リリース 2007年10月、TLM2.0 Draft2 公開 2008年6月、TLM2.0 公開 2008年6月、OSCI SystemC AMS Extensionsホワイト・ペーパー公開 今後(ロードマップ) 2008年末までに、TLM2.0 LRM公開 2008年末までに、AMS Extensions LRM公開 2009年?、TLM2.1 公開、IEEE標準化へ 20XX年、SystemC ver3、リアルタイムOSモデル 20XX年、SystemC ver4、デジタルとアナログ混在のミックスト・シグナル・モデル
https://w.atwiki.jp/bambooflow/pages/75.html
SystemC用語 OSCI(Open SystemC Initiative) SystemCの標準化を行っている組織。 TLM(Transaction Level Moeling) トランザクション・レベル・モデリング。 データの流れを主体としたシステムレベル。このレベルではハードウェアの詳細な設計までは行わない。 TLMはSystemCで主に使われる。 TLMはRTLに比べて抽象度が高く、シミュレーションも高速に実行できる利点がある。 動作合成(Behavioral Synthesis,ビヘイビア合成) SystemC(C++)記述からRTLを生成する。 専用のツールを必要とする。