-
-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[提案] 明示的なノンブロッキング代入 #113
Comments
確かに賛否ありそうですね。
といったあたりです。最後の点を除けば
SystemVerilog内でも |
ありがとうございます。理由をお聞きして私も悩ましく思い始めております。
確かにおっしゃる通りですね。 強く主張するつもりはありませんが、興味深く思った部分なので、他の方の意見なども伺ってみたいところではあります。 |
ちなみに、ちょっと違う話になるかもですが、always_ff の中で
という流れに変換してしまえば、すべてブロッキング代入のポリシーで書ける言語にもなりそうな気がしたのですが、そういった形で文法を統一できるような可能性はありますでしょうか? |
を考えると、自分は今のままの仕様が良いですね。 |
ちょっと自信はないのですが
というような事はありえますでしょうか? ノンブロッキング代入の存在自体が話をややこしくしているような気はしているので、すべてブロッキング代入だけで書ける文法は、実現可能なら有難く思います。 (実際 always_ff は代入のみとして always_comb に処理を切り出すこともあります。ただ、今の値と次の値の2変数作るのでごちゃごちゃしてしまい、ここが隠れるノンブロッキング代入は便利ではあるのですが、Veryl が隠してくれるなら解決するような気もしました) Veryl から生成した SV をさも最初から SVで書いた体で納品したいとかはありそうな気がしているので、always_ff も欲しいところです。 |
個人的なコーディングスタイルとしては大きなalways_ffは回避していますね。 ブロッキングで統一というのはChiselがそういう感じであったと思います。 |
これも質問で恐縮なのですが、 <+= みたいなノンブロッキング専用の += とかってあり得る話なのでしょうか? 時間が進むまで変化しない変数と、同じ時刻の中で参照内容が変わる変数が、変数定義でも式でも見た目区別できないのはそれなりに危険な気もしております。 |
シフト代入演算子<<=があるので簡単ではないですね。 |
仕様の簡潔さを優先するなら、演算子の追加はしないほうが良いのではないでしょうか? |
ありがとうございます。Chisel は興味はあるのですが手が出せていなかったので大変参考になります。
ここは SV の時点で賛否があるところだとは理解しております。
Chisel 風にしたい場合、 いっそ always_ff では単純代入しかしないことにして、function なりに処理を小分けに切り出していくコーディングスタイルの方が安全なのかもしれませんね。 |
ありがとうございます。よく理解できました。
私も増やすべきでないと思っています。 |
always_ff や文法は今のままにするとして、
という糖衣構文があると、ソフトウェアエンジニアが取っ付きやすい気はしています。 |
私としては、Verylが書きやすいSVを目指すなら、そこを対象者に含めるのは疑問符が付きますね。 |
two process methodというものが昔から提案されていて https://qiita.com/ryo_i6/items/cf064e816bfdb7babb81 ソフトウェアエンジニアの人はこのあたりからだと入りやすいと思います。 |
なるほど、私がソフト系の書き方を期待してしまったのがちょっと趣旨違いだったかもしれません。 そもそも論として Verilog の reg が FF にも ワイヤーにもなりえるのも混乱の始まりな気もしています。 またいっそのこと always_ff 内での代入を一回に制限するオプションをつけるというのもありなのかもしれません(その場合も代入した後に変数参照しても古い値が読まれるので、どこに書くかで文意が変わるのは同じですが) Veryl を 「書きやすいSV」 として定義して、それ以上のことをしたければ「さらに別言語かぶせたりマクロで何とかする」というポリシーであればそれはそれでわかりやすい気がいたしました。 |
古いVerilogの頃から同じことはしていましたが、名前がついている技法だったのですね。ありがとうございます。
もろに私がそうで、Veryl で、その two process method で書こうとして、今回違和感を感じた次第でして。
ここは賛否ありそうな気がします。 |
FF記述中にも右辺値として組合せ回路記述ができる事がそもそもの要因ですから、「always_ffの中は代入以外(制御構文含む)使用禁止(two processの強制)」というルールを課して、コーディングルールチェックする方が良さそうに思います。 言語側でどうこうするより、ルールとか言語外でどうこうする領域なのかなと言う考えです。 |
これも、ブロック中の最大行数を決められるようにして、コーディングルールチェックで弾く問題のように思います。 |
always_ffとalways_combの字面が似ていて、それが混乱の元ならば、それぞれのキーワードを変更するのも一手でしょうか? |
あとはそこまで積極的な理由でもないですが、代入演算子は式構文の奥深くにいるので まだ実装してないですが、オプショナルなlinterルールでプロジェクト毎に |
あくまでもHDLですから、言語仕様はRTLエンジニアを主使用者に添えるべきで、SWエンジニアがミスしそうな部分はコーディングルールなどで縛る方が良いように思います。 |
いろいろなご意見有難うございます。背景にある思想がだいぶ理解出来てきました。 個人的に 私の思いつく範囲の Verilog-HDL の嫌なところとして
などがあり、SVでも互換性の観点から一部引きずっているかと思います。 Lint で解決できるものもありますが、 Veryl ならほぼすべて解決しそうに思えております。 今回、代入先の変数が FF か wire か見分けやすくする点で考えた次第でしたが浅知恵でした。 |
これは個人的には(無意味と批判されたシステムハンガリアンではなく)適切なアプリケーションハンガリアン記法だと思っています。 タイミングを気にする設計の場合、各変数がFFなのか入出力なのかwireなのかを継続的に把握することが重要で、変数名に
この用途に関してはLSPなどでの型名のホバーではちょっと不足で、変数名の方がいいかな、と思っています。 |
ありがとうございます。 入出力も区別されるのですね。参考になります。 レジスタ(FF)を意図した変数は always_ff の中でしか代入しない(逆もしかり)なルールが運用上担保できれば安心感のあるコーディングはできそうに思いました (コンパイラではなく、コーディングルールに対する Lint系 の話ですかね)。 ちなみに組み込みソフトでもメモリマップドI/Oのレジスタに対応する変数などは、レジスタ幅や符号などをハンガリアンで記述するのは結構効果があったように思います。ハードウェア制約のある部分とは相性が良いのかもしれませんね。 |
変数宣言上は両者の区別はないので、ルールとしては、
になるでしょうか? |
lintのルールとしては 複数回代入の禁止などはネーミングルールとは別の合成不能記述のチェックのような感じでしょうか。 |
合成不可ではないので、lint error のほうが良いのではないでしょうか? #86 があるとは言え、
のような記述がエラーになるのは厳しいのではないでしょうか。 |
これって合成可能なんでしたっけ?
|
それは知りませんでした。 |
lintルールの追加は別issueにしたのでこちらは閉じます。 |
以下、賛否のある話だとは思うので、趣旨に合わなければ棄却頂ければと思います。
現在の Veryl では、always_ff で書いた = はノンブロッキング代入、always_comb や function などで書いた = はブロッキング代入に展開されるかと思います。
この際にまったく同じコードが書く場所によって解釈が変わることになるかと思います。
あまり良いコードではないですが、
のようなものを、はじめ always_ff の中で書いていて、複雑になってきたので一部 always_comb などに移動させた際に、うっかりカウント数が1つ変わってしまったりします。
1つの言語の中で、同じ記述の意味が変わってしまうのは少し奇妙に感じました。
ブログ記事などにソースコードを一部抜粋する場合など、always_ff の中か、always_comb のなかかわからないと読み違えてしまうと思います。
always_ff の中は従来通り <= のようなブロッキング代入用の文字を割り当てれば安全性が増すように思いました。
ご意見いただけると幸いに存じます。
The text was updated successfully, but these errors were encountered: