in simple words,
if your code coverage is 100% you cannot say that your func cov. is 100% because there may be missing code in the RTL that was expected to be there according to the specification
you use assertion property coverage and covergroups telling explicitly that i need to have this functionality present
vice versa, just by putting your functional as 100% doesnt mean a lot, you MUST ensure that you have covered whole RTL , because your covergroup/cover property may bot be correct.being that you thought that you have verified the perticular functionality but the RTL code was never toggled/covered because of your wrong(somehow) coding