IPコアTips(1) IOBUGインスタンスを含むIPコアのインスタンシエーション

OBUFや、IOBUFなどを含むIPコア(NGCファイル)を使うときに、ISE(Transrate)でエラーになることがあります。

例えば、当社のUDPIPコアでいうと、最新版ではMIIのMDIOピン(双方向ピン)の部分で、

ccec9a94cb828887c559b4b63d880bec

というように、Transrate段階で、エラーがでます。

これはどういうことかというと、IPコアには一部のピンにはIOバッファが記述されている下記のようなものを考えます。

7e34a60cbe2c5d3b1ea1b496f2f4cc55

このIPコアを、トップエンティティでインスタンス化して、IOバッファを適宜XSTで自動的に記述を追加してもらって、下記のようにしたいわけであります。

ee48a55cb2607831bb9c5c9d27ba6128

ところが、XSTはHDLをコンパイルする段階では、NGCファイルを読み込まないので、どのピンにすでにIOバッファが実装されているかは、わからないのです。なので、すべてのIOピンにIOバッファを自動合成してきます。するとこんな回路が生成されてしまうわけです。

bcc93f19173890066762f424362e99b9

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のプロパティで、

8da48401694ec1b67430a0f5a456f6f1

read_coresを有効にして、IPコアのパスを設定します。

これで無事、必要なだけIOバッファが自動挿入され、コンパイルが成功します。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする