2013-08-23 11 views
6

Gibt es irgendwelche Funktionen von SV, die ein Programmblock bietet, die mit anderen Methoden nicht dupliziert werden können?SystemVerilog-Programmblock vs. traditionelle Testbench

Die weniger konkrete Version dieser Frage lautet: Soll ich mich mit Programmbausteinen zur Verifikation beschäftigen? Ich bewege mich von einer Umgebung, in der wir auf Verilog-95 beschränkt waren, in eine Umgebung, in der SV unterstützt wird, und ich frage mich, ob ich zusätzliche Arbeit für mich selbst schaffen möchte, indem ich keine Programmblöcke verwende.

Antwort

9

Check out IEEE Std 1800-2012 § 3,4 & § 24. Ausführliche Beschreibung program Blöcke.

In einer kurzen, unvollständigen Zusammenfassung, ein program Block:

  • kann nicht nicht always Verfahren enthalten, primitive Fälle module Fälle interface Instanzen (virtual interface und Port interface erlaubt ist) oder andere program Instanzen.
  • legt die Zeitplanung in der reaktiven Region fest. Dies verhindert Rennbedingungen.
  • hat eine zusätzliche Systemtask $exit, die die program Instanzen beendet, die es aufrufen.
  • Die Simulation wird beendet, wenn alle program Instanzen beendet wurden.
  • ist meist wie ein module Block außer wie oben angegeben.
  • Die Idee eines program Blocks besteht darin, eine klare Trennung zwischen Test und Design zu schaffen. In früheren Versionen von SystemVerilog (vor IEEE 1800) war die Instanziierung einer class oft auf program Blöcke beschränkt. Dies betonte die Trennung von Test und Design. Es machte auch program Blöcke für Verifikationsingenieure, die objektorientierte Programmierung in ihrem Fluss verwenden wollten. Seit IEEE 1800 kann ein class fast überall definiert und instanziiert werden. Als Ergebnis wurden program Blöcke weniger ausreichend.

    Heute ist die Meinung der Nützlichkeit eines program Blocks geteilt. Von den letzten Konventionen, die ich gemacht habe, scheint der Trend zu sein, program Blöcke aufzugeben. Dies liegt daran, dass die Vorteile durch andere Verfahren erreicht werden können. Die Planung im Bereich "Reaktiv" kann mit clocking Blöcken erfolgen. A mailbox, Warteschlange ([$]) oder assoziatives Array ([*]) können für die intelligente Behandlung von Simulationen verwendet werden, um mehrere Tests zu beenden. Persönlich mag ich immer noch program Blöcke verwenden und als always gleichwertig, wenn nötig. Wenn Sie planen, UVM zu verwenden, könnte ein Blockprüfstand, der nicht program ist, für Sie besser funktionieren.

    Am Ende kommt es wirklich auf eine Methodologiepräferenz an. Es ist am besten, zu bewerten und es selbst zu versuchen.

    +0

    Danke!Ich habe mit Programmblöcken herumgespielt und festgestellt, dass einige grundlegende Funktionen nicht von meinem Simulator unterstützt werden, obwohl grundlegende Programmblöcke funktionieren (Kompilierungsfehler von "SystemVerilog-Konstrukt noch nicht implementiert"). Scheint es nicht wert zu versuchen, herauszufinden, welche Funktionen von Programmblöcken funktionieren und was nicht, da es sich anhört, als könnte ich alle Vorteile von Programmblöcken mit anderen Mitteln nutzen. – dan

    1

    Ich empfehle nicht, Programmblöcke zu verwenden - verwenden Sie stattdessen ein Modul. Ich schrieb eine detailed article darüber vor einigen Jahren.