2017-12-08 5 views
0

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?

+1

Werfen Sie einen Blick auf: https://stackoverflow.com/questions/19057265/how-to-synthesize-while-loop-in-verilog – RaZ

+0

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/). –

+0

ah Sie ein sehr richtig über die Missverständnisse, Danke –

Antwort

0

Ihr Code scheint überhaupt nicht synthetisierbar zu sein und Sie müssen verstehen, wie das FPGA funktionieren soll.

Ihr erster Schritt sollte sein, eine Uhr in Ihrem Design einzuführen und zu verstehen, wie sich Hardware von Software unterscheidet.

+0

Entschuldigung das ist nur ein Auszug aus dem Bit des Codes, der die Fehler verursacht hat, habe ich eine Uhr und etc ... –