NSLには、制御端子の宣言と、その動作内容を記述する構文がある。
制御端子には、func_in, func_out, func_selfの3種類があり、それぞれ使い方が異なる。
これらの制御端子は、モジュール内外のメッソドを定義するのだけれど、ハードウェアの特性から、返り値は複数あることがあるし、どの端子に返り値を戻すのかは設計者の趣味もあるので、返り値は明示的に設計者に指定させてきた。
それでも、返り値が唯一しかない場合も多く、そういうケースの記述性を上げるため、制御端子の返り値を返す端子を指定できるようにした。
例えば、制御入力端子なら、
のように、制御端子の宣言の後ろにコロン(:)と端子名を書くことで、この端子に値を戻すことを明示する。
本文では、
のように、return文で返り値を指定すると、宣言で指定した端子に値が転送される。
そこで、このモジュールを呼び出す親モジュールでは、
のように、端子を指定せず、制御を呼び出し、返り値を受け取れる。
返り値に指定できるのは、
とした。
この文法に合わせて書き換えたSN/X CPUをIP ARCHに置いた
制御端子には、func_in, func_out, func_selfの3種類があり、それぞれ使い方が異なる。
これらの制御端子は、モジュール内外のメッソドを定義するのだけれど、ハードウェアの特性から、返り値は複数あることがあるし、どの端子に返り値を戻すのかは設計者の趣味もあるので、返り値は明示的に設計者に指定させてきた。
それでも、返り値が唯一しかない場合も多く、そういうケースの記述性を上げるため、制御端子の返り値を返す端子を指定できるようにした。
例えば、制御入力端子なら、
declare test { input a[8]; input b[8]; output q[8]; func_in add(a,b): q; }
のように、制御端子の宣言の後ろにコロン(:)と端子名を書くことで、この端子に値を戻すことを明示する。
本文では、
module test { func add { return a+b; }
のように、return文で返り値を指定すると、宣言で指定した端子に値が転送される。
そこで、このモジュールを呼び出す親モジュールでは、
..... test a1; .... o = a1.ex(pc,1); ...
のように、端子を指定せず、制御を呼び出し、返り値を受け取れる。
返り値に指定できるのは、
制御端子 | 返り値端子 |
---|---|
func_in | output/inout |
func_out | input/inout |
func_self | wire |
とした。
この文法に合わせて書き換えたSN/X CPUをIP ARCHに置いた