Zum Beispiel erwähnt Brian Carlton in diesem Thread - How to NOT use while() loops in verilog (for synthesis)?, dass anstelle der Verwendung von For und While-Schleifen in Verilog, sollte eine always
Schleife verwendet werden. Ich habe mich gefragt, wie man aus einer Iteration ausbrechen kann, wenn eine bestimmte Bedingung erfüllt ist. Ich frage mich, ob die folgenden verwendet werden:Welche verschiedenen Konstrukte können verwendet werden, um in Verilog aus einem "Immer" -Block auszubrechen?
immer @ (clk posedge oder var == 3) `
Wo var
ist eine Variable in dem Modul oder blockieren?
Zum Beispiel, wie würde ich den folgenden Code in etwas konvertieren, das von XST synthetisiert werden kann.
//******************************************************
//Check whether randp is prime or not
//******************************************************
for(i = 0; i < 100; i = i+1)
begin
assign PRIME_CHECK = randp;
assign sqroot = PRIME_CHECKED;
for(i = 0 ; i <= sqroot ; i=i+1)
begin
if((sqroot%i) == 0)
begin
break;
end
end
break;
randp = RANDP;
end
Also, wenn ich eine While-Schleife ersetzen wollte, konnte ich '(@posedge clk oder a == 2) beginnen '? – Prateek
Sie müssen die while-Schleife anzeigen, die Sie neu erstellen möchten. @ (expession) ist nur eine Aussage innerhalb der Schleife. Und '(@posedge clk oder a == 2)', obwohl legale Syntax, macht keinen Sinn. Das bedeutet, dass der aktuelle Prozess solange blockiert wird, bis entweder clk von 0 auf 1 wechselt, ODER bis das Ergebnis des Ausdrucks a == 2 irgendeine Änderung hat. Sicher nicht synthetisierbar zu Hardware –
Bearbeitete Frage. – Prateek