Addition in verilog: simulation doesn't match synthesis
The expressions ($clog2(32768)-1) and ($clog2(16)-1) look suspicious to me &mdash; don't they yield 14 and 3, respectively, rather than the 15 and 4 that you desire?

But I can't explain why the simulator is getting the "correct" result.