В булевой алгебре сложение терминов соответствует вентилю ИЛИ, а умножение соответствует вентилю И.
Предположим, мне нужен вентилятор термостата, который работает следующим образом:
Вентилятор должен включаться при включении обогревателя или кондиционера. В качестве альтернативы, если пользователь запрашивает включение вентилятора (включив вход fan_on), вентилятор должен включиться, даже если обогреватель или кондиционер выключены.
Основываясь на этих требованиях, я сформулировал логическое утверждение в коде Verilog следующим образом:
assign blower_fan = fan_on + heater + aircon;
Однако при моделировании это дает неверное решение. Однако это работает:
assign blower_fan = fan_on || (heater + aircon);
так же как и
assign blower_fan = fan_on || (heater || aircon);
Мой вопрос:
Что я неправильно понимаю в операторе +? Кроме того, я запутался между двумя последними решениями, которые ДЕЙСТВИТЕЛЬНО работают - почему оба они работают, и является ли последнее, где я использую только логический оператор ИЛИ более правильным (или предпочтительным) способом делать то, что я хочу сделать?
Редактировать № 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