私は VHDL を学んでおり、常に改善を目指しているため、ここでさまざまな質問を読んでいます。しかし、このコメントは私を興味深くしました:
大学での短い VHDL コースで、同期の側面を分離するには、個別のプロセスが最善の形であると言われました。
明らかにこれは個人的な好みですが、経験豊富なユーザーが自分の好みで長所と短所に光を当てることができることを望んでいましたか? 一方は他方よりも一般的ですか?
ありがとう!
私は VHDL を学んでおり、常に改善を目指しているため、ここでさまざまな質問を読んでいます。しかし、このコメントは私を興味深くしました:
大学での短い VHDL コースで、同期の側面を分離するには、個別のプロセスが最善の形であると言われました。
明らかにこれは個人的な好みですが、経験豊富なユーザーが自分の好みで長所と短所に光を当てることができることを望んでいましたか? 一方は他方よりも一般的ですか?
ありがとう!
まあ、あなたがリンクしたことを言ったのは私だったので...コメントしたほうがいいです:)
物事を別々のプロセスに入れる場合の悪いこと(IMHO):
良いもの:
私の意見では、あなたが聞いたような勅令 (「分けておいてください」) は、シンセサイザーがロジックとフロップを区別するのが得意ではなかった時代に由来するものであり、フロップだけをクロック プロセスに配置することは理にかなっています。
さらに、そのアプローチは、HDL を持たない時代の人々が模式図を描く方法と一致していました。
最近では、シンセサイザーは、クロック処理されたプロセスで任意の複雑なロジックを処理できます。そして、論理の各小さなビットがどこにあるかを明示する必要なく、意味のある方法でそれを書くことができます。タイミングが本当にタイトな場合にのみ、適切な場所にフロップとロジックを配置することについて真剣に考える必要があります。
私の「ルール」は次のとおりです。
ソフトウェアを書くのとよく似ています:)
私は別のキャンプにいます。私のコードには、リセットとクロッキングの動作を行う単一の同期プロセスがあります。他のすべては非同期です。登録プロセスは次のようになります。
Wait for Clock;
If Reset then
Value <= '0';
else
Value <= nextValue;
endif
好きなもの:
ネガ:
マーティンの答えから私が完全に理解していないこと:
- ロジックが分割されているため、ステートマシンに状態を追加する場合は、両方のプロセスに新しい状態を配置する必要があります
状態変数のタイプを変更して(つまり、列挙型を追加して)、次に進みます。統一されたスタイルとまったく同じです。
- シグナルを登録済みと未登録の両方で使用したい場合は、それを複製することになります。単一のプロセスで、変数を使用してこれを実現できます。
スプリットスタイルでは、すでに登録済みと未登録のバージョンがあります。これらは、レジスタプロセスへの入力と出力です。余分な作業は一切ありません。