Ich arbeite daran, einen Regsiter a1
mit Eingangssignalen zu codieren b1,rst
, und wra1
das Register a1
wird beim Zurücksetzen auf einen bestimmten Wert initialisiert. a1
ändert seinen Wert nur dann, b1
wenn wra1
er 1
sonst den alten Wert behält
process(clk,regrst)
begin
if(regrst='1')then
a1 <= (others =>'0');
elsif(clk'event and clk='1') then
if(wra1='1')then
a1 <= b1;
end if;
end if;
end process;
In dieser Anweisung habe ich den Registerprozess geschrieben, um das benötigte wra1-Signal zu aktualisieren, aber ich bin verwirrt darüber, wie ich den alten Wert des Ausgangs beibehalten kann, falls dieses Schreibsignal 0 ist. Generiert dieses Konzept unbeabsichtigte Latches, um den vorherigen Wert zu speichern ? Wenn ja, was kann ich zu Beginn des Prozesses als Standardregisterzuweisung hinzufügen? und sollte ich die else-Anweisung mit einschließen
a1<=a1;
Danke
Wie Paebbels in seinem Kommentar erwähnt, funktioniert Ihr Prozess genau so, wie Sie es beabsichtigen.
Sie erhalten ein Flip-Flop und kein Latch, da clk
in Ihrer if-Anweisung die Bedingung aktiviert ist, die angibt, dass dies a1
nur zugewiesen wird, wenn clk steigt. clk'event
bedeutet gerade eine Änderung am clk
, also clk'event and clk='1'
„ clk
gerade geändert und ist jetzt eins“, dh eine steigende Flanke.
Eine Default-Zuweisung wie von Ihnen vorgeschlagen ist nicht notwendig, da ein Signal seinen vorherigen Wert behält, wenn es nicht explizit zugewiesen wird. Dies vereinfacht sequentielle Prozesse wie den von Ihnen geposteten, ist aber auch die Quelle unerwünschter Latches in kombinatorischen Prozessen.
Das Folgende ist ein Riegel:
process(wra1, b1) begin
if(wra1='1')then
a1 <= b1;
end if;
end process;
a1
Beachten Sie, dass 1) dieser Prozess keine Uhr hat (d. h. keine steigende Flankenbedingung an einem Signal), genau wie ein Prozess, der kombinatorische Logik beschreibt, aber 2) wenn wra1
nicht 1 ist, wird ihm kein Wert zugewiesen, was bedeutet, dass er seinen aktuellen Wert behält, bis es wra1
ist 1 wieder, auch wenn b1
Änderungen. Das ist die Semantik eines Riegels.
Paebbels