The SCALP Instruction Issuer

SCALP is a superscalar asynchronous processor. One of its most important components is its instruction issuer, which takes groups of five instructions read from memory and distributes them concurrently to the functional units. The problem and its solution is described here.

The LARD code for a simplified version of the instruction issuer without branch instructions or variable length instructions is here. This model also includes code to drive a block viewer display showing activity in the controllers, and can be compiled as follows:

	ernie$ lcd -O -lchannels -ltime -lmsg -lblock_view issuer.l
Here are screenshots from the Time View and Block View displays. In the time view display we can see that a group of instructions whose blob is selected contains instructions 15 to 19 for functional units 3, 4, 4, 2 and 4 respectively. Studying the outputs to those functional units shows that these instructions are indeed despatched corectly.

The Time View display also shows messages from the controllers in its lower section.

The block view display shows a snapshot of activity when instructions in columns 1, 3 and 4 are being despatched to functional units 4, 2 and 1 respectively, and the controllers for functional units 0 and 3 are searching for a valid instruction. The occupancy of the instruction fifos between the issuer and the functional units can also be observed.