93 lines
5.0 KiB
HTML
93 lines
5.0 KiB
HTML
<html>
|
|
<head>
|
|
<title>PM0044 5.4.3 Pipeline with Call/Jump, table 10</title>
|
|
<script>
|
|
function toggle(id) {
|
|
var obj = document.getElementById(id);
|
|
if (obj.style.display === 'none')
|
|
obj.style.display = 'block';
|
|
else
|
|
obj.style.display = 'none';
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.pipetrace { margin: 1em 0; }
|
|
.pipetrace, .pipetrace td { border: 1px solid black; border-collapse: collapse; padding: 0 0.2em; white-space: nowrap; }
|
|
.pipetrace thead { background-color: #d2d2d2; position: sticky; top: 0; }
|
|
.pipetrace thead th { border: none; box-shadow: inset -1px -1px #000; }
|
|
.pipetrace tr:nth-child(even) { background-color: #f2f2f2; }
|
|
.pipetrace td { min-width: 1.6em; }
|
|
.pipetrace td.instr:before { content: ""; }
|
|
.pipetrace td.instr { width: 9.5em; }
|
|
.pipetrace td.Sbus:before { content: " S₀"; }
|
|
.pipetrace td.Sfetch:before { content: " S₁"; }
|
|
.pipetrace td.Sraw:before { content: " S₂"; }
|
|
.pipetrace td:before { content: attr(class); }
|
|
.pipetrace td.D { background-color: lawngreen; }
|
|
.pipetrace td.E { background-color: navajowhite; }
|
|
.pipetrace td.Sbus { background-color: red; }
|
|
.pipetrace td.Sfetch { background-color: red; }
|
|
.pipetrace td.Sraw { background-color: red; }
|
|
.pipetrace td.X, .pipetrace td.Flushed { background-color: red; }
|
|
.pipetrace td span:after { content: attr(class); }
|
|
.pipetrace td span { padding: 0 0.2em; margin: 0 0 0 0.1em; }
|
|
.pipetrace td span.FS { background-color: lightgrey; }
|
|
.pipetrace td span.F { background-color: lightskyblue; }
|
|
#pipetrace_legend { border: none; background-color: white; position: fixed; bottom: 0; right: 0; }
|
|
#pipetrace_legend tr:first-of-type { font-weight: bold; }
|
|
#pipetrace_legend td { text-align: center; }
|
|
#pipetrace_legend td.defn { text-align: left; }
|
|
#pipetrace_legend td.defn:before { content: ""; }
|
|
</style>
|
|
</head>
|
|
|
|
<body onload="toggle('pipetrace_legend')">
|
|
|
|
<h1>PM0044 5.4.3 Pipeline with Call/Jump, table 10</h1>
|
|
|
|
<table id="pipetrace_legend" class="pipetrace">
|
|
<tr><td colspan="2">Legend</td></tr>
|
|
<tr><td class="D" /><td class="defn">Decode</td></tr>
|
|
<tr><td class="E" /><td class="defn">Execute</td></tr>
|
|
<tr><td><span class="F" /></td><td class="defn">Fetch</td></tr>
|
|
<tr><td class="X" /><td class="defn">Flush</td></tr>
|
|
<tr><td><span class="FS" /></td><td class="defn">Fetch Stall - space in prefetch buffer but bus busy</td></tr>
|
|
<tr><td class="Sbus" /><td class="defn">Decode Stall - bus busy</td></tr>
|
|
<tr><td class="Sfetch" /><td class="defn">Decode Stall - insufficient data in prefetch buffer</td></tr>
|
|
<tr><td class="Sraw" /><td class="defn">Decode Stall - read after write</td></tr>
|
|
</table>
|
|
|
|
<p>PM0044 table 10 shows a fetch stall in the first execution cycle
|
|
of the call (cycle 7) however it should be possible for a fetch
|
|
to take place since pushing the return address only busies the
|
|
data bus (and STM8 is a Harvard architecture with unified address
|
|
space so the data and program are separate buses).</p>
|
|
<p>Also note that since the flush happens on the last execute cycle
|
|
of the call (unlike the jp) there is no overlap and we mark
|
|
the following cycle as a decode stall. Technically this is correct
|
|
but table 10 does not and says the call takes 3 cycles which
|
|
ignores the unavoidable stall cycle. The later instruction documentation
|
|
for call says it takes 4 cycles which is presumed to include the
|
|
stall cycle that follows it.</p>
|
|
<a title="Click for legend">
|
|
<table class="pipetrace" onclick="toggle('pipetrace_legend')">
|
|
<tbody>
|
|
<tr><td /><td class="Flushed" /></tr>
|
|
<tr><td>0x080c4</td><td class="instr">inc A</td><td class=""><span class="F" /></td><td class=" D"><span class="F" /></td><td class=" E" /></tr>
|
|
<tr><td>0x080c5</td><td class="instr">jp 0x80cc</td><td class="" /><td class="" /><td class=" D X"></td><td class=" E" /></tr>
|
|
<tr><td /><td class="Flushed" /></tr>
|
|
<tr><td>0x080cc</td><td class="instr">neg A</td><td class="" /><td class="" /><td class="" /><td class=""><span class="F" /></td><td class=" D"><span class="F" /></td><td class=" E" /></tr>
|
|
<tr><td>0x080cd</td><td class="instr">call 0x80d8</td><td class="" /><td class="" /><td class="" /><td class="" /><td class="" /><td class=" D"><span class="F" /></td><td class=" E"><span class="F" /></td><td class=" E X" /></tr>
|
|
<tr><td /><td class="Flushed" /></tr>
|
|
<tr><td>0x080d8</td><td class="instr">incw X</td><td class="" /><td class="" /><td class="" /><td class="" /><td class="" /><td class="" /><td class="" /><td class=""></td><td class=" D Sfetch"><span class="F" /></td><td class=" D"><span class="F" /></td><td class=" E" /></tr>
|
|
</tbody>
|
|
<thead>
|
|
<tr><th>Address</th><th>Instruction</th><th class="n">1</th><th class="n">2</th><th class="n">3</th><th class="n">4</th><th class="n">5</th><th class="n">6</th><th class="n">7</th><th class="n">8</th><th class="n">9</th><th class="n">10</th><th class="n">11</th>
|
|
</thead>
|
|
</table>
|
|
</a>
|
|
|
|
</body>
|
|
</html>
|