Memory controller with shared command buffering for enhanced page-hit optimization
A command buffer for a memory controller comprises a plurality of entries or storing a plurality of commands sequentially, characterized in that each entry includes a main command field, a plurality of shared command fields; a load pointer configured to indicate a next available shared command field for loading a new command targeting the same page; and a pop pointer configured to indicate a next shared command field in which the command is to be moved to the main command field after the command is removed. The method of operating a memory controller is also disclosed herein.
1 . A command buffer for a memory controller, comprising:
a plurality of entries for storing a plurality of commands sequentially, each entry of the plurality of entries comprises:
a main command field,
a plurality of shared command fields,
wherein the main command field and the plurality of shared command fields of each entry are configured to store the commands targeting a same page, defined as having a same row and bank addresses and differing only in a least significant bits of a column address;
a load pointer configured to indicate a next available shared command field for loading a new command targeting the same page; and
a pop pointer configured to indicate a next shared command field in which the command is to be moved to the main command field after the command is removed.
2 . The command buffer of claim 1 , wherein each entry of the plurality of entries further comprises a validity bit for indicating validity of the commands in the entry.
3 . The command buffer of claim 1 , wherein each entry is configured to store two or four commands.
4 . The command buffer of claim 1 , wherein the load pointer is incremented by 1 when a new command is stored in the shared command field of the entry.
5 . The command buffer of claim 1 , wherein the pop pointer is incremented by 1 when the command in the main command field is removed.
6 . The command buffer of claim 1 , wherein the load pointer and the pop pointer are configured to indicate a first slot of the shared command fields when the command targeting a new page is loaded into the main command field, or all the commands in shared command fields are removed.
7 . A method of operating a memory controller comprising:
receiving a plurality of commands in a plurality of entries of a command buffer, each entry plurality of entries comprises:
a main command field,
a plurality of shared command fields,
a load pointer indicating a next available shared command field for loading a new command targeting a same page, and
a pop pointer configured to indicate a next shared command field in which the command is to be moved to the main command field;
identifying commands targeting a same page as the command in the main command field, defined as having a same row and bank addresses and differing only in a least significant bits of a column address;
loading the identified commands targeting the same page into the shared command fields according to the load pointer;
incrementing the load pointer by 1, upon loading the shared command field to indicate a subsequent shared command field for loading the command;
removing the command which has been processed from the main command field;
moving the command from the shared command field as indicated by the pop pointer into the main command field; and
incrementing the pop pointer by 1, upon moving the command from the shared command field to indicate subsequent shared command field for moving the command into the main command field.
8 . The method of claim 7 , wherein merging the commands into a single command is disallowed for entries containing shared commands.
9 . The method of claim 7 , further comprising:
a mechanism for blocking read commands from loading into the main command field when a write command to the same address, defined as having the same row and bank addresses, is pending in the main command field.
10 . The method of claim 9 , wherein said blocking mechanism is deactivated when all write commands to said address, defined as having the same row and bank addresses, have been processed and removed from the main command field.