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

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示24(LCD、Rotary EncoderカスタムIPの追加2)

Spartan-3A Starter KitでEDKを使ってカメラ表示23(LCD、Rotary EncoderカスタムIPの追加)”の続き。

今回は、lcd_controller のVHDLファイルを追加し、user_logic.vhd, lcd_controller.vhd の修正を行う。

まずは、CamDisp_EDK_OV7670_LCD\system\pcores\lcd_controller_v1_00_a\hdl\vhdl にlcd_ctlr.vhd をコピーした。
Spa3A_SKit_OV7670_97_110928.png

user_logic.vhd を修正する。VHDLコードの主要な部分を下に示す。まだコードチェックをしていないので間違っているかもしれない。この他にもsignal宣言、component宣言、ポート宣言を追加した。

  -- lcd_ctlr.vhd を接続
  
  -- data_ena を生成する
    process( Bus2IP_Clk ) begin
        if Bus2IP_Clk'event and Bus2IP_Clk = '1' then
            if Bus2IP_Reset = '1' then
                data_ena <= '0';
            else
                if slv_reg_write_sel="1" then
                    data_ena <= '1';
                else
                    data_ena <= '0';
                end if;
            end if;
        end if;
    end process;
    
  LCD_ctlr_i : LCD_ctlr port map (
      CLK => Bus2IP_Clk,
      RESET => Bus2IP_Reset,
      DIN => slv_reg0(C_SLV_DWIDTH-1-15 to C_SLV_DWIDTH-1); -- 下位16ビット  
      CS => data_ena,
      LCD_DB => LCD_DB,
      LCD_RS => LCD_RS, 
      LCD_RW => LCD_RW,
      LCD_E => LCD_E
  );


lcd_controller.vhd にLCD用のポート宣言とそのポート接続を追加した。ポート宣言部分の一部を下に示す。

entity lcd_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";

    ...

    -- DO NOT EDIT ABOVE THIS LINE ---------------------
  );
  port
  (
    -- ADD USER PORTS BELOW THIS LINE ------------------
    --USER ports added here
      LCD_DB : out std_logic_vector(7 downto 0);
      LCD_RS : out std_logic;
      LCD_RW : out std_logic;
      LCD_E : out std_logic;
    -- ADD USER PORTS ABOVE THIS LINE ------------------


rotary_encoder_v2_1_0.mpdを開いて、ポート宣言を追加した。

PORT rot_a = "", DIR = I
PORT rot_b = "", DIR = I
PORT rot_center = "", DIR = I


lcd_controller_v2_1_0.mpdを開いて、ポート宣言を追加した。

PORT LCD_DB = "", DIR = O, VEC = [7:0]
PORT LCD_RS = "", DIR = O
PORT LCD_RW = "", DIR = O
PORT LCD_E = "", DIR = O


XPSでProjectメニューから> Rescan User Repositoriesを選択して、生成したカスタムIPの変更をXPSに認識させた。

xps_timerはすでに入っているので、rotary_encoder, lcd_controller を右クリックメニューからAdd IPした。

XPS Core Configダイアログが開いたが、次のInstantiate and Connect IPダイアログが開かなかった。XPSを見るとrotary_encoder, lcd_controllerが入っていたが、どのPLBにも接続されていなかった。
Spa3A_SKit_OV7670_98_110929.png

rotary_encoder, lcd_controller のSPLBをmb_plbに接続した。(MicroBlazeのPLBバス)
Spa3A_SKit_OV7670_99_110929.png

Portsタブで、右クリックメニューからMake External を選択し、外部出力信号に定義した。
Spa3A_SKit_OV7670_100_110929.png

External Portsの名前を変更した。
Spa3A_SKit_OV7670_101_110929.png

Spa3A_SKit_OV7670_102_110929.png

Addressesタブをクリックすると、rotary_encoder, lcd_controllerがUでマップされていない。
Spa3A_SKit_OV7670_103_110929.png

双方にSizeのプルダウンメニューから64Kを割り振った。MicroBlazeのアドレス内に入ったがBase Addressが0のままだった。
Spa3A_SKit_OV7670_104_110929.png

rotary_encoderに0x840A0000, lcd_controllerに0x840C0000 のベース・アドレスを割り振った。
Spa3A_SKit_OV7670_105_110929.png

(追記)
なんで自動的にアドレスがマップされないのか?と思ったら、ワーニングが出ていました。

WARNING:EDK:2137 - Peripheral rotary_encoder_0 is not accessible from any processor in the system. Check Bus Interface connections and address parameters.
WARNING:EDK:2137 - Peripheral lcd_controller_0 is not accessible from any processor in the system. Check Bus Interface connections and address parameters.


考えてみたら、.paoファイルに自分で追加したファイルの設定をするのを忘れていました。後で記事を書き換えます。
もう一度、元のEDKプロジェクトをコピーして、カスタムIPを作りなおしても、(PAOファイルが完全でも)やはり同様にワーニングが出ている。PAOファイルは関係なかったみたいだ。
もしかすると、複数PLBバスがあると何処にアサインするか分からないのかもしれない?
  1. 2011年09月29日 05:49 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0