2017-02-14 2 views
0

Erzwingt ein Signal-Bit, umzukehren, wenn diese Methode gültig ist?System Verilog - Forcieren eines Signals zum Invertieren/Flipflop

1.

task 
begin 
force higher_level.lower_level.a[1] = ~higher_level.lower_level.a[1]; 
end 

Ich habe schon versucht, diese mit bestenfalls gemischten Ergebnissen. Manchmal kippt das Bit, während es manchmal das gleiche bleibt.

Allerdings habe ich auch eine weniger elegante Code mit für den gleichen Zweck von Spiegeln, die Bits geschrieben, die die ganze Zeit funktioniert, wie unten zu sehen:

2.

task 
begin 
if(higher_level.lower_level.a[1] == 1'b1) 
force higher_level.lower_level.a[1] = 1'b0; 
else 
force higher_level.lower_level.a[1] = 1'b1; 
end 

die Ist erster Code nicht gute Möglichkeit, die Bits zu spiegeln? Oder gibt es noch etwas, das ich verpasse?

Wo higher_level.lower_level.a[51:0] ist ein 52-Bit-Signal

Dank: D

Antwort

0

Nein, die erste Methode wird nicht funktionieren. Wenn es so wäre, wäre es wie ein Endlos-Loop-Oszillator.

Bei der zweiten Methode müssen Sie einen Stichprobenprozess einrichten, bei dem Sie entscheiden müssen, wann die Stichprobe a erfasst werden soll.

Wenn a von einem Ausdruck gesteuert wird, können Sie erzwingen, dass es die Umkehrung dieses Ausdrucks ist.

+0

Hallo Dave, frage mich nur, was Sie mit Stichprobenverfahren meinen? Ich habe auch vergessen zu erwähnen, dass dieser Code innerhalb eines "Task" -Blocks liegt, so dass das Problem von Endlosschleifen kein Problem wäre, sobald der 'Task'-Block endet. Die "Kraft" sollte aufhören, das Signal zu erzwingen, sobald die Aufgabe beendet ist, wenn mein Verständnis stimmt. – TheSprintingEngineer

+0

Ich meinte, die 'if'-Anweisung muss ihren Verzweigungsausdruck zu einem bestimmten Zeitpunkt auswerten, wenn die Aufgabe, die Sie vergessen haben zu erwähnen, aufgerufen wird. Die "Kraft" -Anweisung richtet einen neuen Prozess ein, der wie eine kontinuierliche Zuweisung funktioniert: Jedes Mal, wenn sich ein Signal auf der RHS ändert, wird die RHS erneut bewertet und eine Zuweisung an die LHS vorgenommen. Dieser Prozess bleibt so lange bestehen, bis eine andere "Kraft" die Stelle erreicht, oder es gibt eine "Freigabe". –

+0

Oh okay, also für die erste Methode, wenn ich 'release' am Ende der Aufgabe verwende, sollte das Signal den Wert halten, bis ein anderer Wert auf das Signal' a' geschrieben ist, oder ist es so, dass Methode 1 niemals funktionieren würde unter allen Umständen und ich sollte nur bei Methode 2 bleiben? – TheSprintingEngineer

Verwandte Themen