The values loaded into the Block Memory Generator v7.3 by using a .coe-file are not read out correctly.
If a .coe is loaded into the Memory Generator with a bus width of 16-bit, the coe is read out correctly. If a write is performed to the generator of greater than 16-bits and this value is read out, it is read out incorrectly.
This is known issue with Block Memory Generator v7.3 and earlier versions when core initialization with COE file. This problem occurs for configurations where the Depth is >32k and write widths like 17, 25 etc., which results in using cascading feature of the block RAM in the generated configuration (i.e., few extra bits when divided by 8 or 9).
This issue is reproducible in both ISE 14.6 and Vivado 2013.2 design tools.
The work around is to change the algorithm to "Fixed Primitive" and a primitive type other than "16kx1".