プログラマブル素子言語文法
予約語
プログラマブル素子言語には以下の予約語があります。
予約語
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へ取得
コメント
/*
と */
で文との間にスペースを入れて挟むとコメントとなる。
または、行頭に//
を書き、そこから行末までがコメントとなる。