2017-12-23 8 views
2

Teil 1:Warum Gebrauch Funktionen in Verilog, wenn Modul ist

ich immer in Verilog verwenden Funktionen wurde gesagt, Code-Duplizierung zu vermeiden. Aber kann ich das nicht mit einem Modul machen? Wenn mein Verständnis stimmt, können alle Funktionen in Verilog als Module neu geschrieben werden, mit der Ausnahme, dass Module nicht aus dem Inneren eines Immer-Blocks instanziiert werden können. Außer, in diesem Fall kann ich immer bei Modulen bleiben. Hab ich recht?

Teil 2:

Wenn ich richtig bin, warum nicht die Verilog kann Compiler so geschrieben werden, dass die Module die Behandlung einer Funktion erhalten? Ich meine, warum kann der Compiler dem Programmierer nicht erlauben, ein Modul in n Block zu instanziieren und Funktionen zu stoppen?

+0

Eigentlich können Sie rekursive Module mit 'parameters' und' generate' Blöcken erstellen. Überprüfen Sie diese [32-Bit-ALU, die ich für die Computerarchitektur mit einem rekursiv definierten LAC geschrieben habe] (https://gist.github.com/patrickroberts/3908606ece975eb4c20b4cd8f8b25dd6). –

+0

@PatrickRoberts danke für den Link. Ich habe die Frage bearbeitet – user3219492

+0

Ich habe einige Screenshots der Spezifikation für das Modul der obersten Ebene in der Verbindung zur Verdeutlichung hinzugefügt. Ich bin froh, dass du es überprüft hast. Wurden Sie aus Neugierde aufgefordert, Funktionen zu verwenden, um Code-Duplizierung ** statt Modulen ** explizit zu vermeiden? Oder einfach nur allgemein? Weil es ein guter Rat ist, wenn es nur allgemein angewendet wird, aber ich finde auch, dass Module in bestimmten Kontexten sinnvoller sind, und es ist nicht klar, ob dieser Ratschlag Ihnen implizit angeboten wurde, die Verwendung von Modulen zugunsten von Funktionen aktiv zu verhindern. –

Antwort

2
  1. Modul! = Funktion. Ihre Verwendung in Verilog ist völlig anders.

    Funktionen sind eigentlich ein erweiterten Ausdruck und es wird in Ausdrücken verwendet. Es kann in rhs-Ausdruck der Anweisung 'assign' oder in Ausdrücken innerhalb eines prozeduralen Blocks verwendet werden.

    • Funktionen nicht Zeit verbrauchen.

    • Funktionen müssen einen Wert zurückgeben.


    Module dienen Hardware-Hierarchie zu exprimieren und enthalten gleichzeitige Verfahrensblöcke (welche Funktionen enthalten könnten).

    • Module können Zeit verbrauchen.

    • Module können keinen Wert zurückgeben. (Ausgangs-Ports sind nicht Werte zurückgeben)


    Potenziell können Sie eine Funktion erstellen, die Interna eines einzelnen ersetzt immer blockieren und schreiben einen äquivalenten Modul mit einem immer Block, der Funktion zurückgibt. Aber das ist es.

  2. Sie sind nicht korrekt :). Der Verilog-Compiler kann nicht so geschrieben werden, weil es einen Verilog-Standard gibt, dem jeder Verilog-Compiler folgen muss. Sonst wird es nicht verilog sein.

Verwandte Themen