SFLの言語規格では演算に対しても符号拡張やビット切り出しが可能となっているが、特に必要性を感じなかったので、sfl2vlではこれらは端子かレジスタに対してのみ許可していた。
ところが、昨日、ユーザから、「符号拡張をサポートしていないのですか」と質問があって、見たら演算結果を符号拡張しようとしていた。
ん~、エラーメッセージには識別子にしかこの演算はサポートされないって出ているだろうと思いながら、説明したが、演算結果を符号拡張するには、単に一時端子に代入するだけなので、言語処理系で行っても大したことはない。
ということで、処理系を少し変更し、20060211版からは、演算に対しても符号拡張やビット切り出しが可能になる。
注意が必要なのは、演算ビット幅が確定しない加算などの演算に対しては、望む結果と異なる出力が出ることがある点である。
これは、動作を考えれば当たり前の話で、これがあるから、確定したビット長の識別子にしか演算を許していなかったのであるが、気をつけて使ってくれれば処理系で自動にやった方が便利ではある。
一応、問題ないはずなので、リリースとしているが、何か問題があれば、連絡してもらいたい。
この機能は、たとえば、下記のような記述に利用するのである。
module exttest { input a<4>; input b<4>; output f<8>; output g<4>; par { f=8#(a+b); g=(a||b)<5:2>; } }