ブール代数では、項の加算は OR ゲートに対応し、乗算は AND ゲートに対応します。
次のように機能するサーモスタットの送風ファンが必要だとします。
ヒーターまたはエアコンのいずれかがオンになっている場合は、ファンがオンになるはずです。あるいは、ユーザーが (入力fan_onをオンにして) ファンをオンにするように要求した場合、ヒーターやエアコンがオフの場合でもファンはオンになるはずです。
これらの要件に基づいて、Verilog コードのロジック ステートメントを次のように定式化しました。
assign blower_fan = fan_on + heater + aircon;
ただし、シミュレーションでは、これは間違った解になります。ただし、これは機能します:
assign blower_fan = fan_on || (heater + aircon);
同様に
assign blower_fan = fan_on || (heater || aircon);
私の質問:
+ 演算子について誤解していることは何ですか? また、機能する後者の 2 つのソリューションの間で混乱しています。なぜ両方が機能し、論理 OR 演算子のみを使用する最後のソリューションが、やりたいことを行うためのより正しい (または推奨される) 方法ですか?
編集#1:これは、入力と出力を宣言したモジュール全体です
module top_module (
input too_cold,
input too_hot,
input mode,
input fan_on,
output heater,
output aircon,
output fan
);
assign heater = (mode&&too_cold);
assign aircon = (!mode&&too_hot);
assign fan = (fan_on) || (heater || aircon);
endmodule