FC2カウンター FPGAの部屋 2014年06月24日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ6(ブロック・デザインのデバック)

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ5(ブロック・デザインの生成)”の続き。

ブロック・デザインの生成でエラーがでているので、デバックをしていた。日曜日の1日中いろいろなことを試したが、やっとわかってきたと思うので、ブログに書いておく。
因みに、プロジェクト名を短くしないとWinodwsのパス名260文字問題に引っかかってしまうので、プロジェクトを作りなおした。

まずは、cdc_vga_axi_slave IP の構成だが、トップファイルは、cdc_vga_axi_slave.vhd だ。ポート宣言部分の一部分を示す。

library ieee;
use ieee.std_logic_1164.all;

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use IEEE.math_real.all;

--library unisim;
--use unisim.vcomponents.all;

use work.video_timing_pkg.all;

entity cdc_vga_axi_slave is
  generic (
    C_S_AXI_ID_WIDTH     : integer := 1;
    C_S_AXI_ADDR_WIDTH   : integer := 32;
    C_S_AXI_DATA_WIDTH   : integer := 32;
    C_S_AXI_AWUSER_WIDTH : integer := 1;
    C_S_AXI_ARUSER_WIDTH : integer := 1;
    C_S_AXI_WUSER_WIDTH  : integer := 1;
    C_S_AXI_RUSER_WIDTH  : integer := 1;
    C_S_AXI_BUSER_WIDTH  : integer := 1;

    RESOLUTION : RESLUTION_TYPE := 1    -- SVGA
  );
  port(
    -- System Signals
    ACLK    : in std_logic;
    ARESETN : in std_logic;

    -- Slave Interface Write Address Ports
    S_AXI_AWID     : in  std_logic_vector(C_S_AXI_ID_WIDTH-1 downto 0);
    S_AXI_AWADDR   : in  std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0);


generic で宣言された RESLUTION の型は、RESLUTION_TYPE だが、これは、video_timing_pkg.vhd の最初で宣言されている。


subtype RESLUTION_TYPE is integer range 0 to 4;


これで、単体シミュレーションもXPSでのIP化もOKだった。

Vivado のIP Integrator でのIP化は自動的に行われて、IP Packager の IP Customization Parameters 画面では、RESOLUTION は、long 型になっている。
Vivado_ZYBO_CDC_axi_slave_55_140610.png

しかし、IP-XACT の component.xml 上では、subtype で定義された RESLUTION_TYPE 型になっていて、これでエラーが出ていたようだ。

      <spirit:modelParameter spirit:dataType="RESLUTION_TYPE">
        <spirit:name>RESOLUTION</spirit:name>
        <spirit:displayName>Resolution</spirit:displayName>
        <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.RESOLUTION">1</spirit:value>
      </spirit:modelParameter>


つまり、Vivado でIP化する場合は、トップのHDLファイルに subtype で宣言した型を使うとまずいということのようだ。

対策としては、cdc_vga_axi_slave.vhd の generic における RESOLUTION の宣言の型を RESLUTION_TYPE から integer に変更した。

cdc_vga_axi_slave IP の修正手順を下に書いておく。

・まずは、ブロック・デザインで、cdc_vga_axi_slave IPを削除する。

・IP Catalog で右クリックして、右クリックメニューから IP settings... を選択する。
Vivado_ZYBO_CDC_axi_slave_88_140614.png

・IP ダイアログで、IP Repositories の所で、cdc_vga_axi_slave IPを選択された状態で、 X ボタンをクリックして削除する。
Vivado_ZYBO_CDC_axi_slave_91_140614.png

・cdc_vga_axi_slave IP のプロジェクトを立上て、cdc_vga_axi_slave.vhd の generic における RESOLUTION の宣言の型を RESLUTION_TYPE から integer に変更した。
Vivado_ZYBO_CDC_axi_slave_145_140624.png

・Sourcesウインドウで、IP-XACT の下の component.xml を削除した。
Vivado_ZYBO_CDC_axi_slave_146_140624.png

・Tools メニューから、Create and Package IP を選択して、もう一度、IP化を行う。

・Re-Package IP を行う。
Vivado_ZYBO_CDC_axi_slave_147_140624.png

・Re-Package IP 後の component.xml は、RESOLUTION の dateType が integer に変更されていた。

      <spirit:modelParameter spirit:dataType="integer">
        <spirit:name>RESOLUTION</spirit:name>
        <spirit:displayName>Resolution</spirit:displayName>
        <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.RESOLUTION">1</spirit:value>
      </spirit:modelParameter>

これでOK。

・これでもう一度、ブロック・デザインのVivado プロジェクトに行って、IP Repositories に cdc_vga_axi_slave IPを追加して、プロック・デザインに cdc_vga_axi_slave IPを再度インスタンスした。

・Generate Block Design を実行したら、エラー無しで終了した。
Vivado_ZYBO_CDC_axi_slave_148_140624.png

アドレス範囲の critical warning があるので修正を試みる。

・最初に、Tools メニューから、Report -> Report IP Status を選択して、IP Status ウインドウを下に出しておく。
Vivado_ZYBO_CDC_axi_slave_153_140624.png

・下にIP Status 画面は出るはずだが、順番を間違ってしまったので出ていない。cdc_vga_axi_slave_0 を右クリックして、右クリックメニューから、Edit in IP Packager を選択する。
Vivado_ZYBO_CDC_axi_slave_149_140624.png

・Edit in IP Packager ダイアログが表示された。デフォルト値のまま、OKボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_150_140624.png

・cdc_vga_axi_slave_v1_0_project が開いて、Package IP 画面が表示された。

・IP Addressing and Memory 画面で、reg0 のRange Dependency を pow(2,17)に変更した。前はRange は4G だったが、131072 に変更された。
Vivado_ZYBO_CDC_axi_slave_151_140624.png

・Review and Package 画面で、Re-Package IP ボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_152_140624.png

・すると、cdc_vga_axi_slave_v1_0_project は自動的にクローズされて、元のプロジェクトに戻る。

・IP Status 画面を見ると、/cdc_vga_axi_slave_0 に更新マーク?が付いている。Rerun をクリックする。
Vivado_ZYBO_CDC_axi_slave_154_140624.png

・Address Editor タブで、cdc_vga_axi_slave_0 のアドレスのRange を 4G から 128K に設定を変更しておく。
Vivado_ZYBO_CDC_axi_slave_155_140624.png

・これで、もう一度、Generate Block Design をしてみたが、やはり、Range が 4G とう critical warning が出ている。
Vivado_ZYBO_CDC_axi_slave_156_140624.png

・やはり、Package IPでパッケージ化された情報は、component.xml に書かれて編集が出来ないのかもしれない(未確認)。もう一度、IPを作り直すのが面倒なので、とりあえず、これで論理合成などをやってみることにした。

・ブロック・デザインの CDC_VGA を右クリックして、右クリックメニューから Create HDL Wapper... を選択する。
Vivado_ZYBO_CDC_axi_slave_157_140624.png

・Create HDL Wapper ダイアログが表示された。そのまま、OKボタンをクリックした。
Vivado_ZYBO_CDC_axi_slave_158_140624.png

・CDC_VGA_wapper.v が生成された。

VivadoでZYBOのAXI4 Slave キャラクタ・ディスプレイ・コントローラ7(配置制約の生成)”に続く。
  1. 2014年06月24日 04:54 |
  2. ZYBO
  3. | トラックバック:0
  4. | コメント:0