在布尔代数中,项的加法对应于 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);
我的问题:
我对 + 运算符有什么误解?此外,我对后两种确实有效的解决方案感到困惑——为什么它们都有效,最后一个我只使用逻辑 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