Bank machines are the main logic block within the memory controller.
When a request (single Write/Read) is accepted, it is assigned to a bank machine.
The bank machine is then responsible for issuing all commands necessary to complete the request.
Once the request is completed, the bank machine is released and made available for assignment to another request.
The Bank Machines correspond to a given DRAM bank at a given time (while a request is assigned).
The assignment of Bank Machines is dynamic.
There is not a need to have a Bank Machine for each physical DRAM bank.
Note: This answer record is part of the Xilinx MIG Solution Center (Xilinx Answer 34243)
The Xilinx MIG Solution Center is available to address all questions related to MIG. Whether you are starting a new design with MIG or troubleshooting a problem, use the MIG Solution Center to guide you to the right information.
Bank Machine Usage
By default, the MIG output uses four Bank Machines. The design allows between two to eight Bank Machines where the trade-off is area versus performance.
Increasing the number of Bank Machines might improve the overall efficiency of the memory controller.
Behavioral simulation with the desired address/traffic pattern should be run to determine efficiency changes.
The number of Bank Machines is configured through RTL parameters in the memc_ui_top.v/.vhd module.
*BM_CNT_WIDTH is only included in the Virtex-6 FPGA designs.
** As this number is increased, FPGA logic timing becomes more challenging and timing failures may occur depending on design and memory configuration.
For 7 Series Vivado designs, out-of-context (OOC) flow cannot be used. Use a non-OOC flow to manually modify the parameter.
For EDK users, a custom pcore should be created whenever parameter changes are made.
The following instructions can be followed to modify the bank machine parameters in legacy flows:
For 7 Series devices using Vivado, the ability to specify the number of bank machines was added to the MIG GUI in the 2016.4 release.
Prior to the 2016.4 release of Vivado you will have to use a non-OOC flow to modify the mig_7series_0_mig.v file in order for the changes to propagate through the rest of the design.
To do this generate the IP but then select the "Global" option when prompted to generate output products.
Next edit the mig_7series_0_mig.v file (default file name) outside of Vivado and modify the nBANK_MACHS parameter to the desired value.
Save the changes and then run synthesis for the new value to propagate through the design.
05/01/2014 - Updated EDK and timing information
09/19/2012 - Minor Updates
08/24/2010 - Added link to 36883