Verilog-Netzliste verstehen

Dies könnte eine ungewöhnliche Frage sein. Ich versuche, eine Verilog-Netzliste für 1-Bit-Addierer zu verstehen und daraus einen Schaltplan zu erstellen. Da ich jedoch sehr neu bei Verilog bin, kann ich einige grundlegende Befehle verstehen. Ich hatte es vorgezogen, dies zu lesen . aber es hat mir nicht geholfen. Unten ist die erforderliche Netzliste

module test(in1, in2, out);
input in1;
input in2;
output [1:0] out;

wire  synth_net;
wire  synth_net_0;
wire  synth_net_1;
wire  synth_net_2;

wire  synth_net_3;
wire  synth_net_4;
ADD2 synth_ADD(.in1({synth_net, in1}), .
    in2({synth_net_0, in2}), .cin(synth_net_1), .out({synth_net_3, synth_net_4})
    , .cout(synth_net_2));
GND synth_GND(.out(synth_net));
GND synth_GND_0(.out(
    synth_net_0));
GND synth_GND_1(.out(synth_net_1));
BUF synth_BUF(.in(
    synth_net_3), .out(out[1]));
BUF synth_BUF_0(.in(synth_net_4), .out(out[0])
    );
endmodule

Nun, die Variablendeklaration ist verständlich. Aber ich kann es nicht verstehen

ADD2 synth_ADD(.in1({synth_net, in1}), .
        in2({synth_net_0, in2}), .cin(synth_net_1), .out({synth_net_3, synth_net_4})

Antworten (1)

Ihre Netzliste hat Verbindungszellen erstellt, effektiv eine gute elektrische 0 oder 1.

Sie wurden mit GND-Zellen erstellt und treiben Ihre Drähte ähnlich wie synth_net.

{a,b}ist ein Verkettungsoperator, wenn a & b jeweils 1 Bit sind, haben Sie einen 2-Bit-Wert, der wie ab aussieht.

Daher {synth_net, in1}wird effektiv in1 mit einer 0 (GND) zum MSB hinzugefügt.

Der Artikel, auf den Sie verlinkt haben, schien nur geordnete Portlistenverbindungen zu zeigen, ich bevorzuge benannte Verbindungen, wie Sie sie in Ihrer Netzliste haben.

ADD2 synth_ADD(
  .in1( {synth_net, in1}  ), 
  .in2( {synth_net_0, in2}),
  .cin( synth_net_1       ),
  .out( {synth_net_3, synth_net_4})
);

Das Obige ist eine Instanz von ADD2, diese Instanz heißt synth_ADD. synth_ADD hat Ports in1, in2, cin und out. Wenn wir uns die Instanziierung ansehen, können wir sehen, dass in1 von gesteuert wird {synth_net, in1}.

:ok, das ist gut gemacht. Eine weitere Sache, wenn wir diesen Schaltplan manuell zeichnen, werden alle anderen Ports zusammen mit allen Drähten verwendet, aber wo im Schaltplan werden wir BUF und GND verwenden
Ich bin mir nicht sicher, ob ich genau folge. Wenn der Schaltplan nur eine Darstellung ist, könnte eine Verbindung zur Versorgung oder Masse verwendet werden. BUF, ein Puffer, der normalerweise zu Veranschaulichungszwecken mit der richtigen Treiberstärke hinzugefügt wird, könnte übersehen werden, aber Sie werden ihn in größeren Systemen benötigen, um sicherzustellen, dass Ihr Design Ihre Zeitbeschränkungen erfüllt. Ein Puffer mit hoher Laufwerksstärke wird über lange Strecken nicht so stark geschwenkt. BUF und GND sollten aus Ihren Basisbibliotheken stammen, Sie sollten Schaltpläne dafür haben.
Jetzt bin ich in der Lage, die Ausgabe des Synthesizers zu validieren, der eine Verilog-Datei in eine Verilog-Netzliste konvertiert hat, die ich oben verwendet hatte. Beide scheinen sich gegenseitig zu validieren, also ist mein Testfall erfolgreich. Dieser Link hilft mir, weiter zu verstehen.