Looks like the Vivado simulator outputs "x" when "x" is multiplied by "0". For that reason, we might want to have mul_real check for that condition and output "0" if either input is zero, e.g.
assign prod = ((a == 0) || (b == 0)) ? 0 : (a * b);
This can otherwise cause x's to propagate during some startup scenarios.
Looks like the Vivado simulator outputs "x" when "x" is multiplied by "0". For that reason, we might want to have
mul_realcheck for that condition and output "0" if either input is zero, e.g.This can otherwise cause x's to propagate during some startup scenarios.