0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Altera社のQuartusで身に覚えの無い「Error (10517): VHDL type mismatch error at xxxx.vhd(nn): boolean type does not match integer literal」に出くわしたときの対処方法

Last updated at Posted at 2016-02-03

はじめに

久しぶりに Altera 社の Quartus を使ってた時、身に覚えの無い「Error (10517): VHDL type mismatch error at xxxx.vhd(nn): boolean type does not match integer literal」(xxxx.vhdはIPのトップ階層のVHDLのファイル名でnnは行番号)に出くわしました。
その対処方法が判りにくかったので、防備録としてメモっておきます。

トラブルが発生した環境

  • Altera 社 Quartus Prime Verion 15.1.0 Build 185 10/21/2015 SJ Lite Edition
  • Qsys を使って各種IPを接続している
  • 使っているIPのうち、Top階層のHDL が VHDL かつ generic に boolean 型のパラメータ変数がある IP がある
  • Quartus Prime の Setting > IP Settings > IP generation HDL preference: が Verilog になっている

トラブルの原因

Quartus Prime の Setting > IP Settings > IP generation HDL preference: が Verilog になっていると、Analyze時に Qsysで作ったHDLのトップ階層のHDLが Verilog-HDL に変換されてプロジェクト内(db/ip/xxxx/xxxx.v xxxx には Qsys で作ったシステムの名前)に取り込まれるようです。その際、インスタンスしたIPのboolean型のパラメータ変数に(true/false)ではなく(1/0)を設定してしまいます。で、IPのトップ階層がVHDLだと、当然 boolean型のパラメータに 1 or 0 を設定していることになり、VHDLの文法エラーになるわけです。

対処方法

対処方法は、次のいずれかです

  1. Quartus Prime の Setting > IP Settings > IP generation HDL preference: を VHDL にする
  2. IPのTop階層のVHDLを、Verilogに書き換える
  3. IPのboolean型のパラメータをInteger型にする

正直、IPを書き換えるのは手間だし、そもそも他者の作ったIPだとどうしようも無いので、多分 1 が一番楽。

参考

似たようなトラブルが報告されています

もしかして、Setting > IP Settings > IP generation HDL preference: を VHDL にするのが解決策ってことなんだろうか? だとしたらちょっとスジ違いな解決策ですね。そもそも Verilog-HDL に変換する際に Boolean 型のパラメータをちゃんと true/false にするのがスジじゃないかな~。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?