OBUFや、IOBUFなどを含むIPコア(NGCファイル)を使うときに、ISE(Transrate)でエラーになることがあります。
例えば、当社のUDPIPコアでいうと、最新版ではMIIのMDIOピン(双方向ピン)の部分で、
というように、Transrate段階で、エラーがでます。
これはどういうことかというと、IPコアには一部のピンにはIOバッファが記述されている下記のようなものを考えます。
このIPコアを、トップエンティティでインスタンス化して、IOバッファを適宜XSTで自動的に記述を追加してもらって、下記のようにしたいわけであります。
ところが、XSTはHDLをコンパイルする段階では、NGCファイルを読み込まないので、どのピンにすでにIOバッファが実装されているかは、わからないのです。なので、すべてのIOピンにIOバッファを自動合成してきます。するとこんな回路が生成されてしまうわけです。
XSTは正常に終了し、次にTransrate段階に入ると、「IBUFが2段になっている」や最初の図にありますようにIOBUFの接続がおかしい、というエラーになってしまうのです。
Xilinxのアンサーデータベースで調べてみると、同じような事案が見つかりました。
http://japan.xilinx.com/support/answers/32847.htm
11.1 ISE/EDK – 「ERROR:NgdBuild:467 – output pad net ‘fpga_0_ddr2_clk_0_OBUF’ has an illegal buffer」というエラー メッセージが表示される
このエラーの原因は、XSTがIPコアの中身がわからずエラーになってしまうことなので、XSTにIPコアを認識させることで解決できます。
具体的には、XSTのプロパティで、
read_coresを有効にして、IPコアのパスを設定します。
これで無事、必要なだけIOバッファが自動挿入され、コンパイルが成功します。
コメント