Frage

Was bedeutet es, wenn eine Aufgabe in Verilog mit dem Schlüsselwort „automatic“ deklariert wird?

task automatic do_things;
  input [31:0] number_of_things;
  reg [31:0] tmp_thing;
  begin
    // ...
  end
endtask;

Notiz:Diese Frage entsteht hauptsächlich, weil ich neugierig bin, ob es auf der Website Hardware-Programmierer gibt.:) :)

War es hilfreich?

Lösung

Dies bedeutet, dass die Aufgabe wiedereintrittsfähig ist – innerhalb der Aufgabe deklarierte Elemente werden dynamisch zugewiesen und nicht zwischen verschiedenen Aufrufen der Aufgabe gemeinsam genutzt.

Sie sehen – einige von uns machen Verilog …(Pfui)

Andere Tipps

„automatisch“ bedeutet tatsächlich „wiedereintretend“.Der Begriff selbst wurde aus Softwaresprachen übernommen – C verfügt beispielsweise über das Schlüsselwort „auto“, um Variablen als auf dem Stapel zugewiesen zu deklarieren, wenn der Bereich, in dem sie sich befinden, ausgeführt wird, und die Zuordnung anschließend aufzuheben, sodass mehrere Aufrufe desselben Bereichs dies tun Permanente Werte dieser Variablen werden nicht angezeigt.Der Grund, warum Sie dieses Schlüsselwort in C möglicherweise noch nicht gehört haben, ist, dass es die Standardspeicherklasse für alle Typen ist :-) Die Alternativen sind „statisch“, was bedeutet „diese Variable statisch zuweisen (einem einzelnen globalen Speicherort im Speicher)“, und beziehen sich während der gesamten Ausführung des Programms auf denselben Speicherort, unabhängig davon, wie oft die Funktion aufgerufen wird“, und „flüchtig“, was bedeutet: „Dies ist ein Register an anderer Stelle auf meinem SoC oder etwas auf einem anderen Gerät, das ich nicht habe.“ Kontrolle über;Compiler, bitte optimieren Sie die Lesevorgänge nicht für mich, auch wenn Sie denken, Sie kennen meinen Wert aus früheren Lesevorgängen ohne Zwischenschreibvorgänge im Code.

„automatisch“ ist für rekursive Funktionen gedacht, aber auch für die gleichzeitige Ausführung derselben Funktion in verschiedenen Ausführungsthreads.Wenn Sie beispielsweise N verschiedene Blöcke „verzweigen“ (mit der fork->join-Anweisung von Verilog) und alle gleichzeitig dieselbe Funktion aufrufen, treten dieselben Probleme auf wie bei einer Funktion, die sich selbst rekursiv aufruft.

In vielen Fällen reicht Ihr Code völlig aus, ohne die Aufgabe oder Funktion als „automatisch“ zu deklarieren. Es empfiehlt sich jedoch, ihn dort einzufügen, es sei denn, Sie benötigen ausdrücklich etwas anderes.

Mit dem Schlüsselwort „automatic“ können Sie auch rekursive Funktionen schreiben (seit Verilog 2001).Ich glaube, dass sie synthetisierbar sein sollten, wenn sie den Tiefpunkt erreichen, aber ich bin mir nicht sicher, ob sie Tool-Unterstützung bieten.

Ich mache auch Verilog!

Wie Will und Marty sagen, war die Automatik für rekursive Funktionen gedacht.

Wenn ein normaler (d. h.(nicht automatisch) Funktion mit unterschiedlichen Werten aufgerufen und vom Simulator im selben Zeitabschnitt verarbeitet wird, ist der zurückgegebene Wert unbestimmt.Es kann ziemlich schwierig sein, diesen Fehler zu erkennen!Dies ist nur ein Simulationsproblem. Bei der Synthese ist die Logik korrekt.

Durch die automatische Aktivierung der Funktion wird dieses Problem behoben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top