When performing signed multiplication, the result according to the specification is truncated from 64 (possible) to 32 bits. The overflow flag in SR is set when the sign of the result (32-bit version)is incorrect. The OR1200 currently truncates to 32-bits then performs sign correction on the result while still throwing the overflow flag.
I thought it was this line in the RTL: result = a31 ^ b31 ? ~mul_prod_r31:0 + 32'd1 : mul_prod_r31:0;
but new Software tests show that the result is correct. After looking at how the data flows though the mult_mac file, it appears that the signs are being converted multiple times. I think this is just a redundancy issue that stekern will fix when he does his review of the file.