FC2ブログ

[Quartus][Qsys]Generateエラー(自作IPの非共通リセット)

このエラーでGenerate失敗。

Error: neek_audio_tb.: Interfaces neek_audio_inst_i2c_bfm.conduit and neek_audio_inst.i2c must have matching associated resets, but neek_audio_inst_i2c_bfm.conduit has no associated reset.
     :
Error: ip-generate failed with exit code 1: 1 Error, 8 Warnings
Error: There were errors creating the testbench system.



(2013/1/19追記)
QsysでGenerateが成功した。どれが根本原因か不明だが、やった事全て書くと以下。

1.Quartus > Assignments > Settings > EDA Tool Settings > Simulation > Format for output netlist = Verilog HDLを選択
  ※ たぶんこれが原因で、前はVHDLになっていたからエラーが出たものと予想。

2.Qsys > Generationタブ > 以下設定。
   - Create Simulation Model = Verilog
   - Create Testbench Qsys system = Simple BFM
   - Create Testbench Simulation Model = Verilog

3.Qsys > Generationタブ > Create Block Symbol fileのチェックを外す

4.Qsys > HDL Exampleタブ > VHDLへ変更。(Verilogで成功したからこれは無関係のはず)



上記2番のSimple BFMからStandard BFMへ変更すると、また以下エラー。

Error: neek_audio_tb.: Interfaces neek_audio_inst_i2c_bfm.conduit and neek_audio_inst.i2c must have matching associated resets, but neek_audio_inst_i2c_bfm.conduit has no associated reset.
    :
Error: ip-generate failed with exit code 1: 1 Error, 8 Warnings
Error: There were errors creating the testbench system.



やり直してみても、やはりSimple BFMではエラーが消える。
尚、Qsysの以下ワーニングは残ったまま。

Warning: System.vsg: The module properties SIMULATION_MODEL_IN_VERILOG and SIMULATION_MODEL_IN_VHDL can not both be set when using the SIMULATION file property: altera_avalon_video_sync_generator.v
Warning: System.pixel_conv: The module properties SIMULATION_MODEL_IN_VERILOG and SIMULATION_MODEL_IN_VHDL can not both be set when using the SIMULATION file property: altera_avalon_pixel_converter.v



続いてQuartusでのコンパイル。

Error (10054): Verilog HDL File I/O error at avalonif_i2c.v(11): can't open Verilog Design File "i2c_master_defines.v"


こんなエラー出たので、これはQsysで自作コンポーネントを追加した際、i2c_master_defines.v
を登録してなくて、かつ、ファイルパスもずれてる事が原因か?と予想。
Qsys上で、自作I2Cを選択し、右クリック > Edit > Filesタブ
において、「Synthesis Files」と「Verilog Simulation Files」にi2c_master_defines.vを追加。

そのままではエラーが出たので、avalonif_i2c_hw.tcl内の「add_fileset_file」宣言してる箇所の
パスを変更。(../file_name から file_name へ変更)
これでQsysのGenerate後、Quartusで先のコンパイルエラーは消えたが今度は以下。

Error (12006): Node instance "avalonif_i2c_0" instantiates undefined entity "avalonif_i2c"



neek_audio/synthesis/submodulesの下にVerilogファイルはあるのに、なぜだ?
読めてるはずなのに。
でもよくよく見るとI2C回路関連のファイルはあるが、サイズが0。なんで?
そしてCygwinで見ると、パーミッションが全て禁止。

これはもしかして、何らかの原因でサイズ0のファイルが置かれて、しかも、
パーミッションが全禁止だから、QsysでGenerateしても上書き出来ずにずっとサイズ0の
ファイルが残ってしまうって事かな?
けど、一度ファイル削除してからQsys Generateし直しても同問題。

以下でadd_fileset_fileコマンドを調べる。
http://www.altera.co.jp/literature/hb/qts/qsys_tcl_j.pdf

52page
使用方法: add_fileset_file
fileDestination: Qsys 生成後にファイルを格納する位置を指定します。
fileKind: ファイルは次の種類をサポートします。
      ■ VERILOG
      ■ SYSTEM_VERILOG
      ■ SYSTEM_VERILOG_INCLUDE
      ■ VHDL
      ■ SDC
      ■ MIF
      ■ HEX
      ■ DAT
      ■ OTHER
fileSource: 次のソースが定義されています。
      ■ PATH–filePath にコピーされるオリジナルのソース・ファイルを指定します。
      ■ TEXT– ファイルの内容に対して任意のテキスト文字列を指定します。
contentsOrPath: fileSource がPATH の場合、filePath にコピーされるファイルを指定します。
         fileSource が TEXT の場合、このファイルに格納されるテキスト文字列を指定します。



もしやfileDestinationのパスが間違っているから、実はQuartusコンパイルに使われるパスと無関係の
場所に生成されてるのか?と思い、以下のようにtclを修正してみた。
これは、プロジェクトフォルダ直下の_IP_I2Cフォルダから見て、Quartusがコンパイル時に使用すると
思われるsynthesys/submoduleフォルダを相対パスで指定したつもり。

add_fileset_file ../neek_audio/synthesis/submodules/avalonif_i2c.v VERILOG PATH avalonif_i2c.v


そしたら、こんな場所に生成されてしまった。

/cygdrive/c/user/work/neek/audio/neek_audio/synthesis/submodules/neek_audio/synthesis/submodules


つまり、fileDestinationのカレントフォルダは、最初からsynthesis/submodulesの下だった。
という事で、fileDestinationのパスは正しい。
しかも今回とんでもないパスに生成されたファイルを見てもサイズはやはり0。

すると、あと疑うべきは以下。
  1.そもそもソースファイルがサイズ0なのでは?
  2.元ファイルを指定するパス設定が間違いでは?

ちょっと待てよ。そもそも手動でI2Cファイルをneek_audio/synthesis/submodules
にコピーしたらQuartusのエラー消えるんだっけ?
やってみたら、エラー消えない。サイズ0問題の前に、そもそもこれが問題か。

Error (12006): Node instance "avalonif_i2c_0" instantiates undefined entity "avalonif_i2c"



もしや、Assignments > Settings > Filesで、元々のIPソースパスを追加するんだっけ?
いや、過去に成功してたプロジェクト見ても、追加されてない。

違うミス発見。qsfでは、トップmodule名以下にしてた。
set_global_assignment -name TOP_LEVEL_ENTITY neek_audio_top
けど、Qsysで生成されるトップは neek_audio。そして、 neek_audio_topは書き途中。
まずはこれを修正しよう。

トップファイルをAssignments > Settings > Filesで登録。逆にI2Cソースは全て削除。
これでQsys Generateしたら、neek_audio/synthesis/submodules以下のI2C関連ソースが
サイズ0じゃなくなった。そしてQuartusコンパイルでさっきのエラーは回避。
なんだトップファイルが無い事が原因だったか。しょーもないミスだ。

そして、ゴールが近そうだが、まだエラー。

Error (10170): Verilog HDL syntax error at i2c_master_defines.v(1) near text "/"; expecting a description


ヘッダーのコメント文を消したら、エラー消えた。改行コード問題??

そして次はなぜか、I2Cソース再発。


Error (10170): Verilog HDL syntax error at avalonif_i2c.v(20) near text "module"; expecting ";"
Error (10839): Verilog HDL error at i2c_master_defines.v(1): declaring global objects is a SystemVerilog feature
Error (10839): Verilog HDL error at avalonif_i2c.v(46): declaring global objects is a SystemVerilog feature
Error (10839): Verilog HDL error at avalonif_i2c.v(47): declaring global objects is a SystemVerilog feature
Error (10839): Verilog HDL error at avalonif_i2c.v(49): declaring global objects is a SystemVerilog feature
     :



avalonif_i2c.vの20行目はmodule宣言の先頭。ヘッダのコメントとかを削除して、
さらに20行目付近の改行コードを疑って、再度改行を入れ直してあげて、
以下のようにしたらエラー消えた。

`include "_IP_I2C/i2c_master_defines.v"
`include "_IP_I2C/timescale.v"
module avalonif_i2c (
// global signal
input wire clk,
   :



残るエラーはコンフィグ用のnCEOと、UART_RXD(確かTXDでなくRXD)の重複エラー
(これは既知)なので、いつも通り、以下設定で回避。
Assignments > Device > Device and Pin Option > Dual Purpose Pins > Use as regular I/O

これでエラー全て消えて、コンパイル成功した。
スポンサーサイト



カレンダー
12 | 2013/01 | 02
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード