- ベストアンサー
verilogのwhile文についての質問
- verilog初心者です。while文での処理を記述していたのですが、なんとか出来る方法はないでしょうか?
- TESTモジュール内でのwhile文の利用について、変更するとエラーとなってしまいます。
- 合成やシミュレーションでは期待する値を得ることができましたが、while文の変更でエラーが発生します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
複数クロックサイクルかかっても良いなら、そういう順序回路を組めば良いだけです。 1クロックサイクルでループを1つ進める感じにすれば、サイクル数は必要ですがループで出来ることは実現できるでしょう。 組み合わせ回路でやりたいなら、 if文やcase文などで構成することになります もっともforやwhileが必要になるという時点で設計方針が怪しいので、 最初から考え直すのが一番お勧めかもしれません。 (論理回路を作っていると認識があればforやwhileは普通出てこないはずなので。) 例えば提示されているソースは、 in_dataの値を条件が満たされるまで1つずつ右シフトしてますが、 条件を満たすにはどれだけ右シフトすればよいか求める回路を作って その出力を右シフト量として与えるというやり方の方がまだあり得ると思います。 (念のため、この方法が最善というわけではないです。 やりたい処理内容によってはもっと根本から再設計した方が良いかもしれません。)
その他の回答 (1)
- Werner
- ベストアンサー率53% (395/735)
forやwhileは条件次第では一応合成できますが、 基本的には合成できないと思ってください。 初心者なら論理合成対象にforやwhileは使わない方が良いですよ。 (シミュレーション記述に使うのは問題ないです。) 普通に論理設計してるだけなら 使う必要性があることはまず無いはずです。
お礼
回答ありがとうございます。 参考にしている本何冊かでも同じように論理合成対象にforやwhileは使わないほうが良いと書かれてありました。 しかし、自分の中でこのような処理をしたい、と思ったとき forやwhileを使用しないと出来ないのでは?と思うことが多々あります。 そのような場合、どのように解決するものなのでしょうか?
お礼
遅くなってしまいましたが、回答ありがとうございました。 あれから少し勉強し、論理回路を作っていると認識があればforやwhileは出てこない、の意味が分かりました。 問題の回路は設計方針から見直し、使わないように直しました。