こんにちは私はVivado 2017年2月1日にコードのこの部分を実行しようとしていると私はVerilogの反復エラー
が[シンセ8から3380]ループ条件は、2000回の繰り返し
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
後に収束しないこのエラーを得続けます
このコードは、10pxの幅の境界に当たったときに方向を変えるボールを取得することです。私はそれをオンラインで調べて、明らかにVivadoはいくつかのバージョンのwhileループをサポートしていませんでしたが、最近サポートが追加されています。
https://stackoverflow.com/questions/19057265/how-to-synthesize-while-loop-in-verilog – RaZ
最初のwhileループの例をご覧ください。これは 'ball_x'から10を連続的に減じますが、' side'は1です。しかし、あなたはループ内の 'side'の値を決して変更しないので、このループは永遠にループします。これはシミュレーションの無限ループであり、そのため合成がハードウェアをこのように動作させるように設計することはできません。私は、あなたがしていることについて何か非常に基本的な誤解があると思っています。そして、はるかに単純な設計から始めることをお勧めします。たとえば、[私の会社のウェブサイト](https://www.doulos.com/knowhow/verilog_designers_guide/)にあるVerilogの紹介をご覧ください。 –
ああ、あなたは誤解について非常に正しいです、ありがとうございます –