たばたさんと共同で主催させてもらった,高位合成友の会でSynthesijerについて発表させていただきました.
たばたさんのneon light compiler,高前田先生@NAISTのPyCoRAMの話も大変面白く開発意欲がかき立てられた一日になりました.
さて,スライドでも紹介した演算のチェイニングを早くリリースできるよう実装すすめないと.
たばたさんと共同で主催させてもらった,高位合成友の会でSynthesijerについて発表させていただきました.
たばたさんのneon light compiler,高前田先生@NAISTのPyCoRAMの話も大変面白く開発意欲がかき立てられた一日になりました.
さて,スライドでも紹介した演算のチェイニングを早くリリースできるよう実装すすめないと.
変更しました.
これでJDK 8な環境で実行した時の大量の警告の発生が止まります.JDK7環境では使えなくなりますが.
バイナリパッケージ(JAR)は未リリースですが今月末には.
ガードっぽい形式でも記述できるようにしてみました.
s5 | nickel -> s10 | dime -> s15
(s10 | nickel -> s15
| dime -> s_ok)
こんな感じ.複数行にまたがるときに()をつけなければいけないのが格好悪いなあ.
Synthesijer.Scalaでは,特定の状態でのレジスタへの代入は
sig0 <= (state, sig1)
と,条件付きの状態遷移は
state0 -> (flag, state1)
と記述するようにしていたのですが,美しくないというコメントをいただき,また同時に”*”ではどうか,というご提案をいただいたので対応してみました.
つまり,
sig0 <= state * sig1
あるいは,
state0 * flag -> state1
というように書けるようになります.
いわゆるベンディングマシンの例題であれば,次のような記述になります.
package synthesijer.scala
class VendingMachine(n:String, c:String, r:String) extends Module(n, c, r){
def this() = this("vendingmachine", "clk", "reset")
val nickel = inP("nickel")
val dime = inP("dime")
val rdy = outP("rdy")
val seq = sequencer("main")
val s5,s10,s15,s_ok = seq.add()
rdy <= seq.idle * LOW
rdy <= s_ok * HIGH
seq.idle * nickel -> s5
seq.idle * dime -> s10
s5 * nickel -> s10
s5 * dime -> s15
s10 * nickel -> s15
s10 * dime -> s_ok
s15 * nickel -> s_ok
s15 * dime -> s_ok
s_ok -> seq.idle
}
ガードライクに書ける方がいいのでは?というコメントももらったので,後で試してみよう.
Synthesijer.Scalaについてプログラミングシンポジウムで発表させていただきました.
発表資料は,こちら.貴重なコメントをいただけましたので,後ほど対応の予定.
あけましておめでとうございます.
本年もSynthesijerおよびわさらぼをよろしくお願いいたします.
さて,タイトルの通りですが,
Synthesijerのユーザーズマニュアル相当のドキュメントを書き始めました.
まだまだ書かなければならなそうな項目を挙げつらったというレベルですが,
随時アップデートしていくつもりです.
こちらからどうぞ.