Hallo Ich versuche, dieses Stück Code in Vivado 2017.02.01 auszuführen, und ich erhalte diesen FehlerVerilog Iterationsfehler
[Synth 8-3380] Schleifenbedingung nicht nach 2000 Iterationen konvergiert
while (side == 1)
begin
ball_x<=ball_x - 11'd10;
end
while (side == 0)
begin
ball_x<=ball_x + 11'd10;
end
if (ball_x <14)
begin
side=0;
end
else if (ball_x>1394)
begin
side=1;
end
Dieser Code ist ein Ball, um die Richtung zu ändern, wenn es die 10px breite Grenze getroffen hat. Ich habe es online gegoogelt und Vivado hat offensichtlich keine While-Schleife ein paar Versionen zurück unterstützt, sondern hat kürzlich Unterstützung hinzugefügt und so sollte das funktionieren?
Werfen Sie einen Blick auf: https://stackoverflow.com/questions/19057265/how-to-synthesize-while-loop-in-verilog – RaZ
Nehmen Sie das Beispiel Ihrer ersten while-Schleife. Dies subtrahiert kontinuierlich 10 von "ball_x", während "side" gleich 1 ist. Aber Sie ändern niemals den Wert von "side" innerhalb der Schleife, so dass diese Schleife für immer endlos ist. Dies ist eine Endlosschleife in der Simulation und deshalb kann die Synthese unmöglich Hardware so entwerfen, dass sie sich so verhält. Ich denke, Sie haben einige grundlegende Missverständnisse darüber, was Sie tun, und schlagen vor, dass Sie mit ein paar viel einfacheren Entwürfen beginnen. Sehen Sie sich beispielsweise die Einführung zu Verilog auf der Website meiner Firma an (https://www.doulos.com/knowhow/verilog_designers_guide/). –
ah Sie ein sehr richtig über die Missverständnisse, Danke –