SystemC AMS は 、アナログ、ミックスドシグナル、RF 機能のためのSystemCの拡張機能です。 [ 1 ] SystemC AMS 2.0 規格は、IEEE Std 1666.1-2016 として 2016 年 4 月 6 日にリリースされました。
計算モデル(MoC)とは、SystemC AMSのプリミティブモジュール間の動作と相互作用を定義する一連のルールです。SystemC AMSは、時間データフロー(TDF)、線形信号フロー(LSF)、および電気線形ネットワーク(ELN)という計算モデルを定義しています。
タイミングデータフロー (TDF) モデルでは、コンポーネントは、10 マイクロ秒ごとなどの選択されたサンプリング レートで、アナログ値を周期的に相互に交換します。サンプリング定理によれば、これはエイリアシング アーティファクトなしで最大 50 MHz の帯域幅の信号を伝送するのに十分です。TDF モデルは、シミュレーション時間の進行に伴って適切なレートで呼び出されるメソッドを定義します。いわゆるモデルのクラスタは、通信を行うタイミングの静的スケジュールを共有します。これにより、クラスタ内の各 TDF インスタンスの processing() メソッドへの呼び出しの相対的な順序が設定されます。TDF の周期的な動作により、デジタル ロジックに使用されるメインの SystemC イベント駆動カーネルとは独立して動作できます。 processing()
SystemCの電気線形ネットワーク(ELN)ライブラリは、SPICEのようなシミュレーションを実行できる標準的な電気部品セットを提供します。抵抗器、コンデンサ、インダクタという3つの基本部品はもちろん利用可能です。さらに、トランスコンダクタンスアンプ(電圧制御電流発生器)などの電圧制御型部品も用意されており、ほとんどのFETやその他の半導体モデルを容易に作成できます。
抵抗器のELNネットワークを流れる電流は、適切な連立方程式ソルバーで解くことができます。これらは節点方程式と呼ばれます。コンデンサやインダクタなどの時間変動するコンポーネントが含まれる場合、それらをモデル化するために通常はオイラー法が実装されます。オイラー法は、有限差分時間領域(FDTD)問題を解くためのシンプルなアプローチです。たとえば、下の左側のコンデンサ充電問題をシミュレートするには、通常時定数の約1パーセントである時間ステップ delta\_t を選択し、右下の反復を実行します。
オイラー法の誤差は時間ステップが小さくなるにつれて2乗に反比例して減少しますが、時間ステップが小さすぎると、複雑な有限要素シミュレーションではシミュレーションが遅くなります。しかし、自動車のトランスミッションシステムのように、状態変数がわずかしかないプラントモデルと並行して複雑なSoCやプラントコントローラの一部を実行するような多くの状況では、時定数に桁違いの差があるため(例えば、100 MHzのクロックと1 ms程度の最短慣性時定数)、これは問題になりません。そのため、アナログサブシステムをRTLシミュレータ内でシミュレーションすることは理にかなっています。さらに、ほとんどのプラント制御状況では閉ループ負帰還が使用され、コントローラは実際のモデルと同様に、わずかに誤差のあるプラントモデルを適切に管理できます。
ELN 形式の下では、SystemC の初期化およびシミュレーション サイクルが拡張され、節点フロー方程式の解法をサポートします。節点方程式の解法は、ガウス消去法や行列の逆行列に基づく直接法ではなく、一般的に反復的に解かれます。反復法は、状態が前のタイム ステップからわずかにしか進んでいない場合に、より高い安定性と高速性を持ちます。カーネルがイベント キューから時間進行イベントを取り出すと、シミュレーション 時間が進みます。シミュレータのアナログ部分は、節点方程式を再計算する必要があるタイム クォンタムを保持します。このクォンタムは、方程式の挙動に応じて動的に調整されます。方程式が「曲がりくねっている」、つまり、クォンタム全体にわたってオイラー法を使用した線形外挿を行うと誤差が大きくなりすぎる場合、タイム ステップは縮小されます。そうでない場合は、各ステップで徐々に拡大できます。全体として、2 つの形式の反復が必要です。1 つ目は、節点方程式を十分な精度で解くためのタイム ステップでの反復です。 2つ目は、時間ステップ間の処理です。単純な実装では、シミュレーション時間がオイラー量子を超えると、アナログサブシステムが再解かれます。外挿誤差が大きすぎる場合は、シミュレータは最後の時間ステップに戻り、より小さなアナログ量子を使用して再度シミュレーションを実行する必要があります。このメカニズムは、SPICEシミュレーションの基礎にもなっています。次に、「クロス」またはその他のアナログ感度の引数となる各アナログ変数を調べて、新しいデジタル領域の処理がトリガーされたかどうかを確認します。トリガーされた場合は、現在のシミュレーション時間に対して、新しいイベントが離散イベントキューに挿入されます。
SystemC の線形信号フロー (LSF) ライブラリは、加算器や微分器などの基本的なアナログ演算子のセットを提供し、微分方程式に見られるすべての基本構造を自己文書化および実行可能な形式で構築できるようにします。標準演算子ライブラリからシステムを構築する利点は、「リフレクション」が可能であることです。つまり、他のコードが構造を分析し、解析的微分、加算、積分、および適切な時間ステップを決定するための感度分析などの他の形式の分析を実行できます。これは、アドホックなコーディングを使用した実装では不可能です。一般的なプログラミングでは、リフレクションとは、プログラムが自身のソースコードを読み取ることができることを指します。
TDF入出力ポートの定義:
sca_tdf:: sca_in <PortType> sca_tdf:: sca_out <PortType>
TDFコンバータの入出力ポート定義:
sca_tdf:: sc_in <PortType> // DE → TDF 入力ポート sca_tdf:: sc_out <PortType> // TDF → DE出力ポート
ELN端末の定義:
sca_eln:: sca_terminal
sca_eln:: sca_node // ELN ノード sca_eln:: sca_node_ref // ELN参照ノード
ToDo: 説明
sca_trace_file * tf = sca_create_tabular_trace_file ( "trace_file_name.dat" ); sca_trace ( tf , < PORT | SIGNAL | NODE > , "name" );時間データフロー1次ローパスモデル:
#include <systemc-ams>using namespace sca_util ; // 利便性のために導入: sca_util::sca_vector<TYPE> → sca_vector<TYPE> using namespace sca_core ; // 利便性のために導入: sca_core::sca_time() → sca_time() using namespace sca_ac_analysis ; // 利便性のために導入: sca_ac_analysis::sca_ac() → sca_ac()SCA_TDF_MODULE ( tdf_low_pass ) { // TDF ポートsca_tdf :: sca_in < double > inp ; sca_tdf :: sca_out < double > outp ;// パラメータdouble fcut ; // カットオフ周波数// メソッドvoid initialize (); // 初期化のためのシミュレーターコールバックvoid ac_processing (); // AC動作実装のためのシミュレーターコールバックvoid processing (); // 時間実装のためのシミュレーターコールバック// コンストラクタSCA_CTOR ( tdf_low_pass ) { fcut = 1.0e3 ; // カットオフ周波数 1kHz }private : sca_vector < double > num ; // 分子係数sca_vector < double > den ; // 逆分子係数sca_vector < double > state ; // 状態ベクトルsca_tdf :: sca_ltf_nd ltf_nd ; // 線形伝達関数 (分子/逆分子型) };線形伝達関数:
// 線形伝達関数の係数を初期化するvoid tdf_low_pass::initialize (){ num ( 0 ) = 1.0 ; den ( 0 ) = 1.0 ; den ( 1 ) = 1.0 / ( 2.0 * M_PI * fcut ); }ToDo: 説明
// AC実装void tdf_low_pass::ac_processing (){ sca_ac ( outp ) = sca_ac_ltf_nd ( num , den , sca_ac ( inp )); }ToDo: 説明
// 時間領域実装void tdf_low_pass::processing (){ outp = ltf_nd ( num , den , state , inp ); }電気線形ネットワークの1次ローパスネットリスト:
SC_MODULE ( eln_low_pass_netlist ) { // sca eln ターミナルsca_eln :: sca_terminal n1 ; sca_eln :: sca_terminal n2 ;// 内部ノードsca_eln :: sca_node_ref gnd ;// eln モジュールsca_eln :: sca_r i_r ; sca_eln :: sca_c i_c ;SC_CTOR ( eln_low_pass_netlist ) : i_r ( "i_r" ), i_c ( "i_c" ) { i_r . value = 1.0 ; i_r . p . bind ( n1 ); i_r . n . bind ( n2 );i_c.value = 1.0 / ( 2.0 * M_PI * 1.0e3 ) ; i_c.p.bind ( n2 ) ; i_c.n.bind ( gnd ) ; } } ;線形信号フローネットリスト:
SystemC AMS 研究グループは、SystemC のアナログおよびミックスドシグナル拡張機能の開発と維持、および OSCI (Open SystemC initiative) SystemC-AMS ワーキンググループの発足を目的として 2002 年に設立されました。研究グループは、初期調査を実施し、アプローチの実現可能性を示すために SystemC 拡張機能を仕様化して実装しました。2006 年に、OSCI 内で研究グループの作業を継続する SystemC AMS ワーキンググループが設立され、現在はAccellera Systems Initiative 内で SystemC AMS の開発に取り組んでおり、2010 年に AMS 1.0 標準が策定されました。2013 年に Accellera SystemC AMS 2.0 標準がリリースされた後、この標準は業界でのさらなる採用と維持のために 2014 年にIEEE Standards Associationに移管されました。SystemC AMS 標準は、IEEE Std 1666.1-2016 として 2016 年 4 月 6 日にリリースされました。[ 2 ] [ 3 ] COSEDA Technologiesは、 SystemC AMS標準に基づいた初の商用設計環境であるCOSIDEを提供しています。