This is similar to "Arbitration lost for slow I2C slaves" reported in March 2014.
It looks like the I2C Master code doesn't detect Clock Stretch from the slave properly, and then fails with a false Arbitration Error on the next Write cycle.
This is triggered when the Slave holds the SDA line down for nearly the maximum allowed time (250nS setup time) while it is holding SCL down.
I can't spot the bug by looking at the code, as it looks like it should work.
There's an oscilloscope trace of the clock stretch, failed arbitration, and a long discussion on the problem here:
This isn't a problem in the latest version of this core. The project was using an old version of this core that had these buge, but was fixed 10 YEARS ago.
Please close this bug report.
Does this core have an overall "version"? There doesn't seem to be a "master project version" anywhere, as all the files have their own individual version numbers. Even the numbers of the equivalent ".v" and ".vhd" files don't track.