Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The stalls in cases 2 and 3 come from the second instruction depending in its first ALU stage on the result of the load in the previous instruction (which is not available until after the second Data Memory stage, so the stall if for the earlier instruction's second ALU stage and the two Data Memory stages). (L8 of the first instruction lines up with L4 of the second.)</p> <pre><code> L1--&gt;IF--&gt;L2--&gt;DE--&gt;L3--&gt;RR--&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 L1--&gt;IF--&gt;L2--&gt;DE--&gt;L3--&gt;RR--&gt;STALL----&gt;STALL----&gt;STALL----&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 </code></pre> <p>For case 4, the value stored in memory by the second instruction is (presumably) not needed until the first Data Memory stage and the address generation part of the second instruction has no dependency on the first instruction. (L8 of the first instruction lines up with L6 of the second.)</p> <pre><code> L1--&gt;IF--&gt;L2--&gt;DE--&gt;L3--&gt;RR--&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 L1--&gt;IF--&gt;L2--&gt;DE--&gt;L3--&gt;RR--&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;STALL----&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 </code></pre> <p>(Since the writing to memory is a commitment of architectural state similar to writing the register, it might be <em>more typical</em> for a pipeline not to require the stored value until the RW stage.)</p> <p>Without bypassing all register source operands are retrieved from the register file in the Register Read stage. Since a new value is written to the register file in the Register Write stage, without bypassing the given 8-stage pipeline will require 5 cycles of stall for such dependent cases.</p> <pre><code> L1--&gt;IF--&gt;L2--&gt;DE--&gt;L3--&gt;RR--&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 L1--&gt;IF--&gt;L2--&gt;DE--&gt;STALL----&gt;STALL----&gt;STALL----&gt;STALL----&gt;STALL----&gt;L3--&gt;RR--&gt;L4--&gt;AL--&gt;L5--&gt;AL--&gt;L6--&gt;DM--&gt;L7--&gt;DM--&gt;L8--&gt;RW--&gt;L9 </code></pre> <p>With bypassing, a dependent value can be communicated from the earliest stage it is available (the end of the second ALU stage for arithmetic instructions, the end of the second Data Memory stage for load instructions)--rather than the Register Write stage--to the earliest stage of the dependent instruction in which the value is needed (before the ALU stages for arithmetic instructions and address computation, before the Data Memory stages for stores if stores require the stored value early as seems to be the case in this pipeline)--rather than the Register Read stage.</p> <p>(Aside: Some pipelines perform the register write in the first half of the cycle and the register read in the second half of the cycle. Not only can this reduce the number of access ports needed for the register file, but it also allows values to be available from the register file one cycle earlier since the read of a newly written value can occur in the later half of the same cycle as the write. This reduces the amount of bypassing needed.)</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload