Hardwarebeschreibungssprachen und Verifikation
Welche Kombination aus Grund für das Entstehen eines Latches in der obigen Beschreibung und Gegenmaßnahme ist korrekt?
always @(*) begin
case (sel)
2'b00: y = a;
2'b01: y = b;
2'b10: y = c;
endcase
end
- AWeil im case drei Eingänge verwendet werden. Die Eingänge werden auf zwei reduziert
- BWeil bei sel=2'b11 keine Zuweisung an y erfolgt. Es wird ein default-Zweig ergänzt, sodass in allen Fällen ein Wert festgelegt ist
- CWeil always @(*) verwendet wird. Es wird auf always @(posedge clk) umgestellt
Antwort und Erläuterung anzeigen
Antwort: B. Weil bei sel=2'b11 keine Zuweisung an y erfolgt. Es wird ein default-Zweig ergänzt, sodass in allen Fällen ein Wert festgelegt ist
sel hat 2 Bit und damit vier Werte, doch der Fall 2'b11 ist nicht beschrieben; y muss dann den vorherigen Wert halten, und es entsteht ein Latch. Wird der Wert aller übrigen Fälle etwa mit „default: y = 0;“ festgelegt oder y vor dem case ein Standardwert zugewiesen, entsteht eine kombinatorische Schaltung. Latches durch vergessene Bedingungen sind ein Fehler, dem HDL-Anfänger häufig begegnen.