私がこれまでに読んだすべての本で言及されている一般的な経験則は、クロックの立ち上がりエッジまたは立ち下がりエッジによって駆動される always ブロックでノンブロッキング割り当てを使用する必要があるということです。反対に、組み合わせ論理の記述にはブロッキング割り当てを使用する必要があります。この規則は私には理にかなっており、例の作成者はそれを徹底的に守っています。
ただし、製品コードの 1 つで次の Verilog を見つけました。
always @* begin
in_ready <= out_ready || ~out_valid;
end
ノンブロッキング割り当て<=
が使用されていることに注意してください。この場合、複数の割り当てがないため、違いはないと思います。しかし、これについての説明が見つからないようです。問題は、特定の always ブロックの範囲内でも、より大きな設計の一部としても、違いがあるのか、それとも違いがないのかということです。