Was ist der Unterschied zwischen Reg und Wire nach der Synthese?

Angenommen, ich habe diese beiden Codes:

module wire_example( a, b, y);
  input a, b;
  output y;

  wire a, b, y;

  assign y = a & b;

endmodule

und das zweite ist:

module reg_combo_example( a, b, y);
input a, b;
output y;

reg   y;
wire a, b;

always @ ( a or b)
begin   
  y = a & b;
end

endmodule

Meine Frage ist, was ist der Unterschied in der Netzliste, beide haben ein Gate, aber wird das Modul mit reg yeinem Flip-Flop oder einem Latch zum Halten der Daten haben, während wire yes kein Latch hat?

Antworten (2)

Keines Ihrer Beispiele enthält Latches oder Flip-Flops. Der alwaysBlock in Ihrem zweiten Beispiel ist kombinatorisch, nicht sequentiell (wenn er einen Latch synthetisieren würde, welche Uhr würde diesen Latch steuern?). Sie müssen einfach einen regTyp für verwenden y, weil er auf der linken Seite einer Zuweisungsanweisung innerhalb eines alwaysBlocks erscheint. Viele Leute betrachten dies als einen Nachteil von Verilog, der schwer zu bestreiten ist. In VHDL signalwürde ein Typ anstelle von wireund verwendet regwerden, um die Verwirrung zu beseitigen.

.... weshalb Sie SystemVerilog verwenden und nur eine "Logik" deklarieren
Wird die Verwendung eines Registers anstelle von Kabeln zu einer langsameren Schaltung führen?

wire:

Es ist ein Netz, das die Verbindungen zwischen Komponenten darstellt. Es wird für kontinuierliche Zuweisungen verwendet, wiredh sein Wert wird kontinuierlich von den Ausgängen der daran angeschlossenen Geräte gesteuert.

reg:

Es wird für Verfahrensaufgaben verwendet. regbedeutet nicht immer ein Flop/Register. regkann seinen Wert auch behalten, bis ein anderer Wert in die Register geschrieben wird.