約 2,998,177 件
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/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/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/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/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/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/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/164.html
SytemCで固定小数点 固定小数点の使い方についてメモしておく。 忘れっぽいので。。。 IEEE1666のLRMを見るとグラフつきでわかりやすいかも。 SytemCで固定小数点 種類 テンプレート・パラメータ量子化モード(誤差)SC_RND SC_RND_ZERO SC_RND_MIN_INF SC_RND_INF SC_RND_CONV SC_TRN (デフォルト) SC_TRN_ZERO オーバーフローモードSC_SAT SC_SAT_ZERO SC_SAT_SYM SC_WRAP (デフォルト) SC_WRAP_SM 固定小数点のコンパイル 使い方例オーバーフロー有無の確認 固定小数点 == sc_uint変換 種類 符号付固定小数点sc_dt sc_fixed W, I, Q, O, N 符号なし固定小数点sc_dt sc_ufixed W, I, Q, O, N よく使うのは、sc_fixed、sc_ufixedの2つだけ。 他はあまり使わない。。。 高速版、符号付固定小数点sc_dt sc_fixed_fast W, I, Q, O, N 高速版、符号なし固定小数点sc_dt sc_ufixed_fast W, I, Q, O, N 高速版は、32ビットOSにおいて、途中の計算を53ビットに制限して(double)高速化を実現しているらしい。 精度は落ちるかもしれないので、よく検討するべし。 動的サイズ:符号付固定小数点sc_dt sc_fix 動的サイズ:符号なし固定小数点sc_dt sc_ufix 動的サイズ、高速版:符号付固定小数点sc_dt sc_fix_fast 動的サイズ、高速版:符号なし固定小数点sc_dt sc_ufix_fast sc_fixed(テンプレート型)とsc_fix(テンプレート型)の違いがある。 テンプレート・パラメータ パラメータ 値の型 説明 W int(正の値) 全体のビット幅(ワード長) I int 整数部のビット幅、正負の値が指定できる Q sc_q_mode 量子化モード(省略可) O sc_o_mode オーバーフローモード(省略可) N int オーバーフロー用ビット数(省略可、Oのためのオプション) 量子化モード(誤差) 第3番目のパラメータで丸め方向を決めることができる。 sc_q_mode SC_RND 正の無限方向への丸め SC_RND_ZERO ゼロ方向への丸め SC_RND_MIN_INF 負の無限方向への丸め SC_RND_INF 無限方向への丸め SC_RND_CONV 収束丸め SC_TRN(デフォルト) 切捨て SC_TRN_ZERO ゼロ方向へ切捨て SC_RND 正の方向への丸め (rounding to plus infinity) 例) y = sc_fixed 3,2,SC_RND (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b11.0 (-1.0) +側 0b01.01 ( 1.25) 0b01.1 ( 1.5) LSB-1番目のビットが、1ならば上へ、0ならば下へ。 SC_RND_ZERO ゼロ方向への丸め (rounding to zero) 例) y = sc_fixed 3,2,SC_RND_ZERO (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b11.0 (-1.0) +側 0b01.01 ( 1.25) 0b01.0 ( 1.0) SC_RND_MIN_INF マイナス方向への丸め (rounding to minus infinity) 例) y = sc_fixed 3,2,SC_RND_MIN_ZERO (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b10.1 (-1.5) +側 0b01.01 ( 1.25) 0b01.0 ( 1.0) SC_RND_INF 無限方向への丸め (rounding to infinity) 例) y = sc_fixed 3,2,SC_RND_ZERO (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b10.1 (-1.5) +側 0b01.01 ( 1.25) 0b01.1 ( 1.5) SC_RND_CONV 収束丸め (convergent rounding) 例) y = sc_fixed 3,2,SC_RND_CONV (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b11.0 (-1.0) +側 0b01.01 ( 1.25) 0b01.0 ( 1.0) 0b10.11(-1.25) = x = 0b11.01(-0.75) y = 0b11.0(-1.0) 0b11.10(-0.75) x 0b11.11(-0.25) y = 0b11.1(-0.5) 0b11.10(-0.25) = x = 0b00.01( 0.25) y = 0b00.0( 0.0) 0b00.01( 0.25) x 0b00.11( 0.75) y = 0b00.0( 0.5) 0b00.11( 0.75) = x = 0b01.01( 1.25) y = 0b01.0( 1.0) ( =, =)と( , )とが交互。奇数と偶数とで異なる。 Convergent Roundingは特定の用途に用いられるらしい。 SC_TRN (デフォルト) 切捨て (truncation) 例) y = sc_fixed 3,2,SC_TRN (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b10.1 (-1.5) +側 0b01.01 ( 1.25) 0b01.0 ( 1.0) これは、デフォルト。 計算は切捨てなので高速だが、精度が出ない。 精度をあげるならば、SC_RNDを使う。 SC_TRN_ZERO ゼロ方向へ切捨て (truncation to zero) 例) y = sc_fixed 3,2,SC_TRN_ZERO (x); 代入前[ x ] 代入後[ y ] -側 0b10.11 (-1.25) 0b11.0 (-1.0) +側 0b01.01 ( 1.25) 0b01.0 ( 1.0) オーバーフローモード オーバーフローを起こした場合、4番目と5番目のパラメータにより調整することができる。 種類は、飽和もしくは折り返しがある。 sc_o_mode SC_SAT 単純飽和 SC_SAT_SYM 対称飽和 SC_SAT_ZERO ゼロ飽和 SC_WRAP(デフォルト) 折り返し SC_WRAP_SM sign magnitude折り返し 単純飽和は、最大値を超えたら最大値まで減少、最小値を下回ったら最小値まで増加させる。 対称飽和は、最大値側は単純飽和とおなじ。最小値を下回ったら"-最大値"まで増加させる。 ゼロ飽和は、オーバーフローを起こしたら、値をゼロにする。 折り返しは、収まらない上位ビットを削除。 パラメータNでを使用する。 SC_SAT 単純飽和 例) y = sc_fixed 3,3,SC_SAT (x) 代入前[ x ] 代入後[ y ] 備考 -側 -6 -4 オーバーフロー -5 -4 オーバーフロー -4 -4 -3 -3 -2 -2 -1 -1 0 0 1 1 2 2 3 3 4 3 オーバーフロー +側 5 3 オーバーフロー 上限よりも下限の飽和する絶対値は異なることに注意。 SC_SAT_ZERO ゼロ飽和 例) y = sc_fixed 3,3,SC_SAT_ZERO (x) 代入前[ x ] 代入後[ y ] 備考 -側 -6 0 オーバーフロー -5 0 オーバーフロー -4 -4 -3 -3 -2 -2 -1 -1 0 0 1 1 2 2 3 3 4 0 オーバーフロー +側 5 0 オーバーフロー オーバーフローすると、ゼロ値となる。 SC_SAT_SYM 対称飽和 例) y = sc_fixed 3,3,SC_SAT_SYM (x) 代入前[ x ] 代入後[ y ] 備考 -側 -6 -3 オーバーフロー -5 -3 オーバーフロー -4 -3 オーバーフロー -3 -3 -2 -2 -1 -1 0 0 1 1 2 2 3 3 4 3 オーバーフロー +側 5 3 オーバーフロー -側のオーバーフロー値は、+側の絶対値と同じとなる。 SC_WRAP (デフォルト) ラップアラウンド。~ n_bit=0 n_bit 0 SC_WRAP_SM 符号つき絶対値ラップアラウンド n_bits=0 n_bits 0 固定小数点のコンパイル SC_INCLUDE_FXをsystemc.hをインクルードする前に定義する必要がある。 これがないと、コンパイルが通らずエラーとなる。 #define SC_INCLUDE_FX #include "systemc.h" もしくは、コンパイル時に"-D"で指定する。 -DSC_INCLUDE_FX 関連 SC_FX_EXCLUDE_OTHER 使い方例 オーバーフロー有無の確認 sc_fixed 4,4 a(1.0); // ワード長4ビット,整数4ビット sc_fixed 4,4 b(1.0); sc_fixed 4,4 c(8.0); sc_fixed 4,4 d(8.0); sc_fixed 4,4 z; cout "o_flag = " z.overflow_flag() endl; z = a * b; // 1.0 x 1.0 = 1.0 オーバーフローなし cout "z = " z endl; cout "o_flag = " z.overflow_flag() endl; z = c * d; // 8.0 x 8.0 = 64.0 オーバーフロー発生 cout "z = " z endl; cout "o_flag = " z.overflow_flag() endl; 結果 o_flag = 0 z = 1 o_flag = 0 z = 0 o_flag = 1 = オーバーフロー発生を確認 固定小数点 == sc_uint変換 よさそうな方法が思いつかないので、とりあえず。 sc_fixed == sc_uint 変換 sc_fixed 4,2 1(1.25); // 1.25 (0b01.01) sc_uint 4 x, y; x = a; // 1.00 (0b00001), 整数部のみを代入 y = a.range( a.wl()-1, 0 ); // 5 (0b00101), ビット列を単純代入 sc_uint == sc_fixed 変換 sc_uint 4 a(5); // 5 (0b00101) sc_fixed 6,4 x; sc_fixed 4,2 y; x = a; // 5.00 (0b0101.00), 整数として代入 y.range( y.wl()-1, 0 ) = a; // 1.25 (0b01.01), ビット列を単純代入
https://w.atwiki.jp/bambooflow/pages/127.html
SystemC マクロ SystemCライブラリのマクロについて、メモ書き。 こんなのがあるよ、っていうのを一覧。とくに説明はかかない。 SC_INCLUDE_FX SC_INCLUDE_DYNAMIC_PROCESSES SC_USE_SC_STRING_OLD このマクロが有効のとき、sc_string を sc_string_old と定義 SC_USE_STD_STRING このマクロが有効のとき、sc_string を std string と定義 SC_FX_EXCLUDE_OTHER SC_STOP_FINISH_DELTA SC_USE_PTHREADS SC_DT_MIXED_COMMA_OPERATORS SC_DT_DEPRECATED SC_ENABLE_OBSERVERS SC_MAX_NBITS SC_SIGNED SC_UNSIGNED SC_REPORT_ERROR() SC_REPORT_WARNING SC_REPORT_INFO() SC_DEFINE_MESSAGE SC_HAS_PROCESS SC_ASSERT_ SC_FXNUM_OBSERVER_READ_ SC_FXNUM_OBSERVER_WRITE_ SC_FXNUM_FAST_OBSERVER_READ_ SC_FXNUM_FAST_OBSERVER_WRITE_ SC_FXDIV_WL SC_ASSERT_