FC2カウンター FPGAの部屋 2011年09月13日
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示14(ディスプレイ回路のIPを登録)

Spartan-3A Starter KitでEDKを使ってカメラ表示13(ディスプレイ回路のHDLファイル)”の続き。

前回はカメラ回路とIPICのインターフェース部分を作り、テストベンチも作ってシミュレーションを行った。今回は、user_logic.vhd にDisp_Controller_Top.vhd のインスタンスを接続して、カスタムIPとして登録する。

最初に、user_logic.vhd にDisp_Controller_Topのインスタンスを接続した。その一部を下に示す。

    -- Master Read (Disp_Controller_Top.vhd)
    Disp_Controller_Top : Disp_Cont_Top generic map(
        C_SLV_DWIDTH => C_SLV_DWIDTH,
        C_MST_AWIDTH => C_MST_AWIDTH,
        C_MST_DWIDTH => C_MST_DWIDTH,
        C_NUM_REG => C_NUM_REG
    ) port map (
        red_out            => red_out,
        green_out        => green_out,
        blue_out        => blue_out,
        hsyncx            => hsyncx,
        vsyncx            => vsyncx,
        afifo_overflow    => afifo_overflow,
        afifo_underflow    => afifo_underflow,
        addr_is_zero    => addr_is_zero,
        h_v_is_zero        =>    h_v_is_zero,
        
        Bus2IP_Clk             => Bus2IP_Clk,
        Bus2IP_Reset         => Bus2IP_Reset,
        IP2Bus_MstRd_Req     => IP2Bus_MstRd_Req,
        IP2Bus_MstWr_Req     => IP2Bus_MstWr_Req,
        IP2Bus_Mst_Addr     => IP2Bus_Mst_Addr,
        IP2Bus_Mst_BE         => IP2Bus_Mst_BE,
        IP2Bus_Mst_Length     => IP2Bus_Mst_Length,
        IP2Bus_Mst_Type     => IP2Bus_Mst_Type,
        IP2Bus_Mst_Lock     => IP2Bus_Mst_Lock,
        IP2Bus_Mst_Reset     => IP2Bus_Mst_Reset,
        Bus2IP_Mst_CmdAck     => Bus2IP_Mst_CmdAck,
        Bus2IP_Mst_Cmplt     => Bus2IP_Mst_Cmplt,
        Bus2IP_Mst_Error     => Bus2IP_Mst_Error,
        Bus2IP_Mst_Rearbitrate => Bus2IP_Mst_Rearbitrate,
        Bus2IP_Mst_Cmd_Timeout => Bus2IP_Mst_Cmd_Timeout,
        Bus2IP_MstRd_d         => Bus2IP_MstRd_d,
        Bus2IP_MstRd_rem    => Bus2IP_MstRd_rem,
        Bus2IP_MstRd_sof_n    => Bus2IP_MstRd_sof_n,
        Bus2IP_MstRd_eof_n    => Bus2IP_MstRd_eof_n,
        Bus2IP_MstRd_src_rdy_n => Bus2IP_MstRd_src_rdy_n,
        Bus2IP_MstRd_src_dsc_n => Bus2IP_MstRd_src_dsc_n,
        IP2Bus_MstRd_dst_rdy_n => IP2Bus_MstRd_dst_rdy_n,
        IP2Bus_MstRd_dst_dsc_n => IP2Bus_MstRd_dst_dsc_n,

        IP2Bus_MstWr_d        => IP2Bus_MstWr_d,
        IP2Bus_MstWr_rem    => IP2Bus_MstWr_rem,
        IP2Bus_MstWr_sof_n    => IP2Bus_MstWr_sof_n,
        IP2Bus_MstWr_eof_n    => IP2Bus_MstWr_eof_n,
        IP2Bus_MstWr_src_rdy_n => IP2Bus_MstWr_src_rdy_n,
        IP2Bus_MstWr_src_dsc_n => IP2Bus_MstWr_src_dsc_n
    );


次に、”XPSのカスタムIPにCore Generatorで生成したIPのネットリストを追加する”を参考にして、XPSのカスタムIPに自分で作った回路や、Core Generatorで生成したIPのネットリストを追加する。

・MPD(display_controller_v2_1_0.mpd)ファイルに”OPTION STYLE = MIX”を追加した。一部を下に示す。

###################################################################
##
## Name : display_controller
## Desc : Microprocessor Peripheral Description
## : Automatically generated by PsfUtility
##
###################################################################

BEGIN display_controller

## Peripheral Options
OPTION IPTYPE = PERIPHERAL
OPTION IMP_NETLIST = TRUE
OPTION HDL = VHDL
OPTION IP_GROUP = MICROBLAZE:PPC:USER
OPTION DESC = DISPLAY_CONTROLLER
OPTION ARCH_SUPPORT_MAP = (others=DEVELOPMENT)
OPTION STYLE = MIX


・CamDisp_EDK_OV7670\system\pcores\display_controller_v1_00_a\dataフォルダの下に、camera_controller_v2_1_0.bbdを作った。ファイルの内容を下に示す。

FILES
cam_data_afifo.ngc


Spa3A_SKit_OV7670_68_110913.png

・CamDisp_EDK_OV7670\system\pcores\display_controller_v1_00_aフォルダの下に netlist フォルダを作って、その中に、cam_data_afifo.ngc をコピーした。
Spa3A_SKit_OV7670_69_110913.png

・CamDisp_EDK_OV7670\system\pcores\display_controller_v1_00_a\dataフォルダのdisplay_controller_v2_1_0.pao ファイルを以下のように書き換えた。

##############################################################################
## Filename: H:/HDL/FndtnISEWork/Spartan3A_starter_kit/CamDisp_EDK_OV7670/system/pcores/display_controller_v1_00_a/data/display_controller_v2_1_0.pao
## Description: Peripheral Analysis Order
## Date: Sun Aug 21 18:03:25 2011 (by Create and Import Peripheral Wizard)
##############################################################################

lib proc_common_v3_00_a all
lib plbv46_slave_single_v1_01_a all
lib plbv46_master_burst_v1_01_a all
lib display_controller_v1_00_a user_logic vhdl
lib display_controller_v1_00_a display_controller vhdl
lib display_controller_v1_00_a Disp_Controller_Top.vhd vhdl
lib display_controller_v1_00_a dcm_DISP_clk.v verilog
lib display_controller_v1_00_a VGA_Display_Controller.v verilog
lib display_controller_v1_00_a cam_data_afifo vhdl


インクルードファイルのdisp_timing_parameters.vhは、どうしようか?迷ったが、.vhの拡張子のままではverilogファイルと認識してくれないかもしれないので、同じフォルダにあってインクルードしてくれることを期待して、display_controller_v2_1_0.paoには追加していない。

(2011/9/14:修正).paoファイルには拡張子がかけたので、disp_timing_parameters.vhもVerilogとして追加した。

(2011/9/17:修正)disp_timing_parameters.vhの行は削除した。.paoのリストに入れているとエラーになる。cam_data_afifo が見つからないとエラーが出るので、VHDLフォルダにcam_data_afifo.vhdを入れて、.paoファイルに追加した。

vhdl, verilogフォルダには、display_controller_v2_1_0.paoに追加したファイルをすでに入れてあるので、これで終了とする。

(2011/9/15:追記)
display_controller.vhdのポート定義とポート接続が抜けていたので、追記する。
まずは、ポートの定義から下に示す。

entity display_controller is
  generic
  (
    -- ADD USER GENERICS BELOW THIS LINE ---------------
    --USER generics added here
    -- ADD USER GENERICS ABOVE THIS LINE ---------------

    -- DO NOT EDIT BELOW THIS LINE ---------------------
    -- Bus protocol parameters, do not add to or delete
    C_BASEADDR                     : std_logic_vector     := X"FFFFFFFF";
    C_HIGHADDR                     : std_logic_vector     := X"00000000";
    C_SPLB_AWIDTH                  : integer              := 32;
    C_SPLB_DWIDTH                  : integer              := 128;
    C_SPLB_NUM_MASTERS             : integer              := 8;
    C_SPLB_MID_WIDTH               : integer              := 3;
    C_SPLB_NATIVE_DWIDTH           : integer              := 32;
    C_SPLB_P2P                     : integer              := 0;
    C_SPLB_SUPPORT_BURSTS          : integer              := 0;
    C_SPLB_SMALLEST_MASTER         : integer              := 32;
    C_SPLB_CLK_PERIOD_PS           : integer              := 10000;
    C_INCLUDE_DPHASE_TIMER         : integer              := 1;
    C_FAMILY                       : string               := "virtex6";
    C_MPLB_AWIDTH                  : integer              := 32;
    C_MPLB_DWIDTH                  : integer              := 128;
    C_MPLB_NATIVE_DWIDTH           : integer              := 32;
    C_MPLB_P2P                     : integer              := 0;
    C_MPLB_SMALLEST_SLAVE          : integer              := 32;
    C_MPLB_CLK_PERIOD_PS           : integer              := 10000
    -- DO NOT EDIT ABOVE THIS LINE ---------------------
  );
  port
  (
    -- ADD USER PORTS BELOW THIS LINE ------------------
    --USER ports added here
    -- ADD USER PORTS ABOVE THIS LINE ------------------
    red_out        : out std_logic_vector(3 downto 0);
    green_out    : out std_logic_vector(3 downto 0);
    blue_out    : out std_logic_vector(3 downto 0);
    hsyncx        : out std_logic;
    vsyncx        : out std_logic;
    afifo_overflow    : out std_logic;
    afifo_underflow    : out std_logic;
    addr_is_zero    : out std_logic;
    h_v_is_zero        : out std_logic

    -- DO NOT EDIT BELOW THIS LINE ---------------------
    -- Bus protocol ports, do not add to or delete
    SPLB_Clk                       : in  std_logic;
    SPLB_Rst                       : in  std_logic;


次にポート接続を下に示す。

  USER_LOGIC_I : entity display_controller_v1_00_a.user_logic
    generic map
    (
      -- MAP USER GENERICS BELOW THIS LINE ---------------
      --USER generics mapped here
      -- MAP USER GENERICS ABOVE THIS LINE ---------------

      C_SLV_DWIDTH                   => USER_SLV_DWIDTH,
      C_MST_AWIDTH                   => USER_MST_AWIDTH,
      C_MST_DWIDTH                   => USER_MST_DWIDTH,
      C_NUM_REG                      => USER_NUM_REG
    )
    port map
    (
      -- MAP USER PORTS BELOW THIS LINE ------------------
      --USER ports mapped here
        red_out            => red_out,
        green_out        => green_out,
        blue_out        => blue_out,
        hsyncx            => hsyncx,
        vsyncx            => vsyncx,
        afifo_overflow    => afifo_overflow,
        afifo_underflow    => afifo_underflow,
        addr_is_zero    => addr_is_zero,
        h_v_is_zero        =>    h_v_is_zero,
     -- MAP USER PORTS ABOVE THIS LINE ------------------

      Bus2IP_Clk                     => ipif_Bus2IP_Clk,
      Bus2IP_Reset                   => ipif_Bus2IP_Reset,


  1. 2011年09月13日 04:47 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0