Ein möglicher Grund, warum das Design das Timing nicht erfüllt, ist, dass es einen oder mehrere Laufschieber in Reihe mit anderer kombinatorischer Logik enthält. Immer wenn ein Shift-Operator mit einer Variablen verwendet wird, d. h. "a = b << c;" Nios® II C2H generiert Barrelshift-Logik. Die von C2H generierte Barrelshift-Logik implementiert eine große Anzahl von kombinatorischen Multiplexern, was das Timing des Designs erheblich beeinflussen kann. Die folgenden beiden Beispiele zeigen den Quellcode, der aufgrund von Laufschiebern einen Zeitabschwung verursachen kann.
Kombinatorische Shift-Eingabe:
Nachfolgend finden Sie ein Beispiel für eine kombinatorische Shift-Eingabe in den Laufschieber, die zu timing-Verschlechterungen führen kann.
int a, b, c, d, result, shift_distance;
result = (a b c d) >> shift_distance;
Das Zusatzergebnis wird als Erweiterung zum Shift-Operator verwendet, sodass ein langer Zeitablauf zwischen einer der zusätzlichen Eingaben und dem "Ergebnis" erstellt wird. Um die Pipelining-Menge zu erhöhen, weisen Sie das Zusatzergebnis einer temporären Variable wie unten gezeigt zu:
int a, b, c, d, addition_result, shift_distance;
addition_result = a b c d;
result = addition_result >> shift_distance;
Kombinatorische Shift-Ausgabe:
Nachfolgend finden Sie ein Beispiel für eine kombinationsfunktionale Shift-Ausgabe vom Laufschieber, die zu einer Zeitabschwingung führen kann.
int a, b, c, d, result, shift_distance;
result = (a >> shift_distance) b c d;
Das Shift-Ergebnis wird als Erweiterungsoperator zu einem zusätzlichen Operator verwendet, sodass ein langer Zeitablauf zwischen "a" und "result" erstellt wird. Um die Pipelining-Menge zu erhöhen, weisen Sie das Shift-Ergebnis einer Variable wie unten gezeigt zu:
int a, b, c, d, result, shift_result, shift_distance;
shift_result = a >> shift_distance;
result = shift_result b c d;