-
Notifications
You must be signed in to change notification settings - Fork 151
About Channels
There are two basic types of channel configurations that one could refer to when talking about "multiple channels":
-
Ganged: A single command is broadcast to all ranks in all channels. Effectively, this means an increase in the amount of data for a given request. For example, in a ganged dual channel DDR3 setup, a single request would generate 2x64bits of data for each beat. With a burst length of 8, this means 128 bytes of data is returned in 8 beats. This is in contrast to a single channel of DDR3 which would produce 1x64bits of data for each beat (64 byte in 8 beats). Note that dual channel transmits twice as much data in the same time (8 beats) effectively doubling the bandwidth. However, this extra data is, in essence, an increase in the prefetch length. It is not always the case that all of this data will in fact be useful for the processor.
-
Unganged/Logically Independent Mode: Effectively this breaks any interdependence between channels and makes it look like there is a single memory controller talking to each channel. Each channel receives separate commands. Although this can be more efficient in terms of not prefetching unnecessary bits, the logic complexity of the memory controller is multiplied by the number of channels.
-
To instantiate a memory system with N unganged channels, set NUM_CHANS=N (for now, due to address mapping issues, N can only be a power of 2).
-
To instantiate a memory system with N ganged channels, set NUM_CHANS=1 and set the JEDEC_BUS_BITS to be N*64. In other words if you wanted a dual-channel ganged system, you'd set JEDEC_BUS_BITS=128.