sfl2vlにSFLの拡張書式を追加した。
今回の追加は、par文とrelay文に関するもの。
まず、par文は並列動作を記述するための構文だけれど、ハードウェアは基本が並列であり、特に断わりない限り、物事は並列に動作する。そこで、「par」を省略可としてみた。
次に、ステージ中の、他タスクの呼び出しには、relayやgenerateを使うが、こちらも、ほとんどのケースで、relayしか使う必要がないことから、もっと見た目に綺麗な書式にしたいと思っていた。今回、「relay」を省略可能にしてみた。
これらの省略形を用いると、先日のm8のアドレスモードデコードのステージは、↓のようになる。
stage decode { any { OPR_IMM: { exec.run(mr(pc).i); pc := alu.exe(ADD, pc, 0x01).o;} OPR_MEM: { memory.run(mr(pc).i); pc := alu.exe(ADD, pc, 0x01).o;} OPR_PC : exec.run(pc); OPR_ACC: exec.run(acc); OPR_ZER: exec.run(0x00); } }
主観だが、かなりすっきりして、気持ち良くなったと思う。
3/11追記
generateだけ残るのは気持ち悪いので、generateかrelayなのかをツール側で判定するようにして、generateも省略可能とした。
ステージ中では、基本としてrelay扱いとなり、ステージ外では、generateと扱う。
上に絡むが、instrselfとinstroutは、起動しない時には0を保証するので、同時ONのチェック対象外とした。relayを同時に複数のステージに発行する時、ステージのリセット信号でハザードが発生していたのを抑止。
この結果、これらの信号は設計者のチェックに任せるので、多少気を付けないといけない。