2017-12-08 4 views
0

こんにちは私は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ループをサポートしていませんでしたが、最近サポートが追加されています。

+1

https://stackoverflow.com/questions/19057265/how-to-synthesize-while-loop-in-verilog – RaZ

+0

最初のwhileループの例をご覧ください。これは 'ball_x'から10を連続的に減じますが、' side'は1です。しかし、あなたはループ内の 'side'の値を決して変更しないので、このループは永遠にループします。これはシミュレーションの無限ループであり、そのため合成がハードウェアをこのように動作させるように設計することはできません。私は、あなたがしていることについて何か非常に基本的な誤解があると思っています。そして、はるかに単純な設計から始めることをお勧めします。たとえば、[私の会社のウェブサイト](https://www.doulos.com/knowhow/verilog_designers_guide/)にあるVerilogの紹介をご覧ください。 –

+0

ああ、あなたは誤解について非常に正しいです、ありがとうございます –

答えて

0

あなたのコードは合成できないように書かれているようではなく、FPGAの動作方法を理解する必要があります。

あなたの最初のステップは、設計にクロックを導入し、ハードウェアがソフトウェアとどのように異なるかを理解することです。

+0

これは、erroを引き起こしていたコードのビットの抽出だけです、私は時計などがあります... –