0

ブール代数では、項の加算は 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
4

2 に答える 2