Artikel-ID: 000074260 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 11.09.2012

Warum schlägt mein Nios II C-to-Hardware (C2H) Compiler generierten Beschleuniger das Timing fehl, wenn der Quellcode Variable-Shift-Bediener enthält?

Umgebung

  • Intel® Nios® II Prozessor
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Beschreibung

    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;

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Intel® programmierbare Geräte

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.