When inferring block RAM, XST utilizes additional block RAM components. Why?
Additional block RAM is utilized because XST is not using the parity of the block RAM component.
In ISE 7.1i, XST uses the parity bits in Virtex-4.
For all other devices, the support for inferring with parity is offered in ISE 8.1i.
The only method by which to work around this issue within XST for older versions is to instantiate the primitive instead of inferring it.