SMVメモ

朝,「普通のHaskellプログラミング」が届いた.
全体的には入門者向けの内容ですが
最後はwikiのパーサを書くらしい.
研究の関係上,パーサは書けた方が楽しそうなのでここだけでも面白そう.
と言うか最近,parsecとかHaXMLを触っているので丁度良い.
今日は真ん中まで読んでやめ

舞萩,レッドサピナはどんどん成長してます.
ディフェンバキアも暖かくなってきたので,調子がいいみたい.
ただ,ハバネロだけは芽を出しません(汗
芽が出るまで1,2週間らしいのでまだ待てますが^^;

kstm.orgに新入生が入るようです.情報工の2年生.どんな人だろう.
情報工2年と言う事しか分からないので,どんな人か想像できない.
私が2年の頃の今頃は・・・MARIE作ってたなぁ...

さて,今週は色々忙しいっぽいのでそろそろ週末のゼミ発表の為に何かしないと...
と言う事で家に帰ってしばらくしてからSMVでALUとその周辺の設計.

出力のピンの値を決定する為にDEFINEとASSIGNが使えれて
何と無く違いも理解してたつもりだったけれど,気になったので確認してみる.
とりあえず,ASSIGNは同期の取れた変化を,DEFINEは非同期(リアルタイム)に値が変化するイメージ
で間違っていないみたい.

そこで気になったので,下のようなコードを書いてみる

MODULE main
VAR
  fuu: Fuu(bar.out);
  bar: Bar(fuu.out);
SPEC
  AF fuu.out =2 --嘘

MODULE Fuu(in0)
DEFINE
  out := in0+1 mod 2;

MODULE Bar(in0)
DEFINE
  out :=in0+1 mod 2;

こんなの書いたら,振動しちゃうのでSMV的(ステップ)な動作ができないような・・・.
結果

file test.smv: line 4: recursively defined: fuu.out
in definition of bar.out at line 14
in definition of fuu.out at line 10

再帰的な定義を許可しない事で,振動を回避しているようです.