組み込まれたエンジニア

我輩は石である。名前はまだ無い。

NSL:制御端子の返り値

2010-06-14 21:38:22 | Weblog
NSLには、制御端子の宣言と、その動作内容を記述する構文がある。
制御端子には、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_inoutput/inout
func_outinput/inout
func_selfwire


とした。

この文法に合わせて書き換えたSN/X CPUをIP ARCHに置いた


NSL:カウント型for文

2010-06-14 01:33:43 | Weblog
はやぶさのニュースを気にしつつ、NSLに新しい文法を追加。

WPA内に目視確認ということは、もう回収されているだろう。
はやぶさは、とてつもない偉業を成し遂げた。拍手で迎えよう♪

本論だが、今回の新構文はカウント型for文と名付ける。
これは、FORTRANのDO文相当の機能だれど、とりあえず、+1のみのループ制御とする。
(要望があれば、将来負のカウントや1以外の増分をサポートするかも?)

シミュレーションスクリプトの自動生成にかけるため、余分なコードも入っているけれど、↓のコードを見れば、使い方は分るはず。
20100613からの変更。
このバージョンでは、合せて、初期化するレジスタが未使用ネット検索の利用ネットリストから洩れていたのを修正。

declare for2 {
}
module for2 {
func_self ex();
reg i[8];
reg cnt[8]=0;

cnt++;

if(cnt[5:0]==32) ex();
if(cnt==255) _finish();

func ex seq {
        for(i:=0,4) {
                _display("%d:%d",_time,i);
        }
        _display("%d:for end:%d",_time,i);
}

}