The Issue Queue is the fully associative structure that allows random (read: out-of-order) issuing of ready instructions from the ready queue (read: instruction window).
Since this is a simulation, we don't actually need to move instructions into the issue queue. We can scan the ROB to find the ready instructions that are flagged to be in the issue queue. Therefore, our issue queue structure merely maintains usage of the IQ resources.
issue_queue_t is designed as follows
- Constructor(unsigned int): Default size 0.
- resize(unsigned int): This does not check for improper shrinkage
- unsigned int size()
- free_iq_entry(unsigned int location): Frees the specified IQ entry.
- int find_iq_entry(): Finds a free IQ entry, returns -1 if full.
- int alloc_iq_entry(): Finds a free IQ entry and allocates it, returns -1 if full.