プログラマブル素子言語文法
予約語
プログラマブル素子言語には以下の予約語があります。
予約語
if、else、while、for、switch、case、default、break、init、define、return、quit、function
予約定数
| 定数名 | 意味 |
|---|---|
| PI | π |
| PI2 | 2π |
| true | ブール値の真 |
| false | ブール値の偽 |
| ON | スイッチング素子のオン状態 |
| OFF | スイッチング素子のオフ状態 |
数学関数
| 関数名 | 意味 |
|---|---|
| sin(x) | 正弦 |
| cos(x) | 余弦 |
| tan(x) | 正接 |
| asin(x) | 逆正弦 |
| acos(x) | 逆余弦 |
| atan(x) | 逆正接 |
| atan2(y,x) | y/xの逆正接 |
| sqrt(x) | 平方根(ルート) |
| log(x) | 自然対数 |
| log10(x) | 常用対数 |
| exp(x) | 指数関数 |
| pow(x,y) | xのy乗を計算する冪関数 |
| abs(x) | 絶対値 |
| min(x,y) | 最小値 |
| max(x,y) | 最大値 |
| mod(x,y) | xをyで割った余りを出す剰余関数 |
| int(x) | 64bit整数化 |
固有のシミュレーションパラメータ
シミュレーションに設定されているパラメータをプログラム上で使用する際に使用します。
| パラメータ | 名称 | param | setparam |
|---|---|---|---|
| Fs | メイン周波数 | 〇 | 〇 |
| Ts | メイン周期 | 〇 | 〇 |
| t | シミュレーション時間 | - | - |
| tt | 総シミュレーション時間 | - | - |
Note
メイン周波数とメイン周期はシンボル名をFsまたはTsとして持ち、固有パラメータはValueとなります。
例えばparam関数の場合次のように表記します。
MainFreq = param("Fs","Value");
tについてはスクリプト上でそのまま使用することができるパラメータです。
変数tとttの違いについて
時間変数tは,Parameter:Updateすると0クリアされますが、ttは0クリアされず連続的な解析時間を取得することができます。
ttを使用する場合、Parameter:Clearを実行するまで0クリアされない点にご注意ください。
機能関数
| 関数名 | 意味 |
|---|---|
| output("sym","type","mode") | シンボルsym、タイプtype、モードmodeで指定された出力変数の現在値を返す関数。PRCとDSPでは、この関数で指定される出力変数が存在しないときは自動的に出力変数が設定され、この関数を削除するとその出力変数も削除される。 自動コード生成時には大域入力変数に置き換えられる。 |
| output("sym", "type", "mode", time) | シンボルsym、タイプType、モードmodeで指定された出力変数の時間timeにおける値を返す関数。 |
| param("sym", "par") | シンボルsymを持つ素子のparで指定されたパラメーター値を返す関数。parには、各素子のパラメーターダイアログボックスに表示されているパラメーターシンボルを指定する。自動コード生成時には大域入力変数に置き替えられる。 |
| setoutvar(var) | PRCとDSPにおいて、変数varを出力変数に設定する。 出力変数シンボルは、PRC/DSPのシンボル名に varのシンボルをピリオド.で連結したシンボルとなり、出力タイプはなく、出力モードはFINとなる。この関数を削除すると、出力変数も削除される。 |
| setparam("sym", "par", value) | シンボルsymを持つ素子のparで指定されたパラメーター値をvalueに設定する関数。parには、各素子のパラメーターダイアログボックスに表示されているパラメーターシンボルを指定する。自動コード生成時には大域出力変数に置き替えられる。 |
| setvar("sym", "var", value) | シンボルsymを持つPRCまたはDSPの変数名varの値をvalueに設定する関数。自動コード生成時には大域引数変数に置き替えられる symが空の場合、自分自身が指定される。symにVIOを指定すると自動コード生成時には大域引数変数が生成される。 |
| table("sym", xvalue) | シンボルsymを持つテーブル素子のx値xvalueに対するy値を返す関数。詳しくはテーブル素子/TBLを参照してください。 |
| var("sym", "var") | シンボルsymを持つPRCまたはDSPの変数名varの値を返す関数。自動コード生成時には大域引数変数に置き替えられる。 symが空の場合、自分自身が指定される。symにVIOを指定すると自動コード生成時には大域引数変数が生成される。 |
var関数、setvar関数について
var関数、setvar関数は対象素子がPRCまたはDSPの時のみ使える関数です。
param関数、setparam関数の代わりに使用します。
var関数、setvar関数は以下の機能を持ちます。
- 通常書式:x = var("sym","a");
symの変数aを取得します。 - 自身の変数を取得:x = var("","b");
自身の変数bを取得します。 - Cコード用に回路上に存在しない変数を定義:x = ("VIO","a");
この場合、PRC、またはDSPの実行時には無視されます。
Cコードにおいては大域変数g_in_VIO_aとして定義されます。
"VIO"は仮想的なIOデバイスにつけられたシンボルです。変更はできません。
SCALE_CONNECT用関数
| 関数名 | 意味 |
|---|---|
| SLexport(n, value) | SCALE_CONNECTのn番目の出力ポートに対し、valueを設定する関数。nは1から始まる整数、valueは任意の変数。 |
| SLsync() | SCALE_CONNECTとの同期をとる関数。 |
| SLimport(n) | SCALE_CONNECTのn番目の入力ポート値を返す関数。nは1から始まる整数。 |
演算子
| 演算子名 | 意味 |
|---|---|
| 四則演算子 | +、-、*、/ |
| 余り演算子 | % |
| インクリメント、デクリメント演算子 | ++、-- |
| シフト演算子 | <<、>> |
| 不等号 | <、>、<=、>= |
| 比較演算子 | ==、!= |
| 論理演算子 | !(NOT)、&&(AND)、||(OR) |
| ビット論理演算子 | ~(NOT)、&(AND)、|(OR)、^(XOR) |
変数
全ての変数は、宣言なしで使用でき、型はない。必ず0で初期化される。
文
文末には終端記号の';'をつける。
if文
if (condition) {
文1;
文2;
}
else {
文3;
文4;
}
else文は省略可能。また、単文のときは{ }は省略可能。
while文
while (condition) {
文1;
文2;
}
また、単文のときは{ }は省略可能。
for文
for (init; condition; update) {
文1;
文2;
}
condition:条件文、真のときループ
update:更新文
単文のときは{ }は省略可能。
switch文
switch (index) {
case const1 : 文1; break;
case const2 : 文2; break;
default : 文3; break;
}
default文は必ずcase文の後に記述する。
init文
init {
文1;
文2;
}
{}は省略不可。 init文が実行されるまでの変数の初期値は
0となります。
Update後のinit文の実行有無について
プログラムに記載されたinit文は、継続解析のUpdateのあとのシミュレーション開始時にも、実行されます。
初回のシミュレーション時のみ実行したい処理がある場合には、init文ではなく、
if文による実行フラグ管理のようなプログラムを作成してください。
define文
define 定数名 (数または式)
定数を変更しようとするとエラーになる。
定数部分の括弧は必ず付ける。
文末の終端記号は不要である。
return文
return;
quit文
quit;
function文
定義
function func() {
文1;
文2;
}
func();
関数はプログラムの先頭で定義する必要がある。
呼び出しは関数名を
FuncとすればFunc();となる。数内の変数は局所化されており、上記の関数内変数xは、内部ではFunc_xで処理されている。
Cコードでは、Cの関数に置き換えられxは局所変数となる。
以下にfunction文を使用した加算関数の例を記載する。
//function文で加算関数ADDを定義
function ADD(){
gain = 10;
OUT = gain * (IN1 + IN2);
}
setvar("","ADD_IN1",5); //ADD関数のIN1に5を設定
setvar("","ADD_IN2"10); //ADD関数のIN2に10を設定
ADD(); //ADD関数を呼び出し実行;
ans = var("","ADD_OUT"); //結果をADD関数のOUTからansへ取得
コメント
/* と */ で文との間にスペースを入れて挟むとコメントとなる。
または、行頭に//を書き、そこから行末までがコメントとなる。