井倉 将実
第2回

リソース情報の取得と割り込みシステム

前回（2006 年 11 月号，pp.161-171）は，BLANCA システムのなく，リスト 1 に示すリソース定義ファイル（再掲載）で設定しアーキテクチャについて解説しました．今回は，ソフトウェアたパラメータを読み込み，if generate 文で必要なデコーダから各種コントローラに割り当てられたベース・アドレスを取だけを生成しています．

得する方法や，各種コントローラからの割り込み出力を束ねる

実はこのリソース定義ファイルは，BLANCA システム・バ

BLANCA システム割り込みコントローラの仕様について解説

スのアドレス・デコーダだけで使うわけではありません．このします．

情報は，リスト 2 に示すリソース・テーブル・コントローラを経由して CPU でも読み込むことができます．

1．システム・リソースの取得方法● リソース・テーブルのイメージ● リソース定義ファイルの内容をソフトウェアも取得

いっても，リスト 2 ではイメージがわかないと思います．そこ

リソース定義ファイルの内容をソフトウェアが取得できると
前回解説したように，BLANCA システムではアドレス・デで図 1 に，リソース・テーブル領域をメモリ・ダンプしたようコーダ回路の HDL ソースに直接アドレス値を埋め込むのではすを，表 1 にメモリ・マップを示します．A/V プロセッサのリ

address
80000000
80000010
80000020
80000030
80000040
80000050
80000060
80000070
80000080
80000090
800000A0800000B0
800000C0800000D0800000E0800000F0+0+4+8+C| ---- ASCII ----424C414E 43412041 - 56502020 00000000 | BLANCA AVP ....
00000000 00000000 - 00000000 00000000 | ................
41565053 80000000 - 01FFFFFF 00000000 | AVPS............
52474243 82000000 - 01FFFFFF 00000000 | RGBC............
41433937 84000000 - 01FFFFFF 00000000 | AC97............
4D4D4343 86000000 - 01FFFFFF 00000000 | MMCC............
434F4D32 88000000 - 01FFFFFF 00000000 | COM2............
4C454449 8A000000 - 01FFFFFF 00000000 | LEDI............
54494D45 8C000000 - 01FFFFFF 00000000 | TIME............
53445241 20000000 - 00000000 00000000 | SDRA ...........
46524F4D A0000000 - 0FFFFFFF 00000000 | FROM............
4C425553 B0000000 - 0FFFFFFF 00000000 | LBUS............
50434948 C0000000 - 3FFFFFFF 00000000 | PCIH....?.......
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................

（a）A/V プロセッサ
address
B0000000
B0000010
B0000020
B0000030
B0000040
B0000050
B0000060
B0000070
B0000080
B0000090
B00000A0
B00000B0
B00000C0
B00000D0
B00000E0
B00000F0+0+4+8+C| ---- ASCII ----424C414E 43412049 - 4F502020 00000000 | BLANCA IOP ....
00000000 00000000 - 00000000 00000000 | ................
494F5053 B0000000 - 007FFFFF 00000000 | IOPS............
50434954 B1000000 - 007FFFFF 00000000 | PCIT............
4C414E43 B2000000 - 00FFFFFF 00000000 | LANC............
49444543 B4000000 - 00FFFFFF 00000000 | IDEC............
43464343 B6000000 - 00FFFFFF 00000000 | CFCC............
55534248 B8000000 - 00FFFFFF 00000000 | USBH............
55534254 BA000000 - 00FFFFFF 00000000 | USBT............
50533248 BC000000 - 00FFFFFF 00000000 | PS2H............
434F4D31 BE000000 - 00FFFFFF 00000000 | COM1............
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................
00000000 00000000 - 00000000 00000000 | ................

表 1 サンプル設計プロジェクトのメモリ・マップ（MicroBlaze の例）
バス デバイス
幅ID0000̲0000h 〜―
2000̲0000h 〜
SDRA4060̲0000h 〜―8000̲0000h 〜
AVPS8200̲0000h 〜
RGBC
8400̲0000h 〜
AC978600̲0000h 〜
MMCC
8800̲0000h 〜
COM2
8A00̲0000h 〜
LEDI
8C00̲0000h 〜 32
TIME
A000̲0000h 〜 ビ
FROMB000̲0000h 〜 ッ
IOPS
B100̲0000h 〜 ト
PCIT
B200̲0000h 〜
LANC
B400̲0000h 〜
IDEC
B600̲0000h 〜
CFCC
B800̲0000h 〜
USBH
BA00̲0000h 〜
USBT
BC00̲0000h 〜
PS2H
BE00̲0000h 〜
COM1C000̲0000h〜
PCIH
FFFF̲FFFFh
アドレス

用 途
ブロック RAMSDRAM 空間
MicroBlaze UART Lite（COM2）
A/Vプロセッサ・リソース・テーブル
アナログ RGB コントローラ
AC97 コントローラ
MMC カード・コントローラ
UART コントローラ（COM2）
LED & DIP スイッチ・コントローラ
タイマ・コントローラ
フラッシュ・メモリ空間
I/Oプロセッサ・リソース・テーブル
PCI ターゲット・コントローラ
LAN コントローラ
IDE コントローラ
CompactFlash コントローラ
USB ホスト・コントローラ
USB ターゲット・コントローラ
PS/2 ホスト・コントローラ
UART コントローラ（COM1）
PCI ホスト・コントローラ（b）I/O プロセッサ

図 1 リソース・テーブルをメモリ・ダンプしたようす（MicroBlaze の例）

Dec. 2006

KEYWORD ―― システム・リソース，A/V プロセッサ，I/O プロセッサ，ローカル・バス，割り込みルーティング，割り込みコントローラ，ベクタ割り込み145リスト 1 A/ V プロセッサ・リソース定義ファイル（AVP_DEF.VHD）-- *************************************************************************-- ***** A/V プロセッサ リソース・マッピング定義ファイル-- ***** 8000_0000h 〜 FFFF_FFFFh 2G バイト空間 ビッグ・エンディアン用-- *************************************************************************
library ieee;use ieee.std_logic_1164.all;
A/Vプロセッサ用シグネチャID

package AVP_DEF is-- ***** AVP シグネチャ定義 ***** -constant AVP_ID0: std_logic_vector(31 downto 0) := X"424C414E";
constant AVP_ID1: std_logic_vector(31 downto 0) := X"43412041";
constant AVP_ID2: std_logic_vector(31 downto 0) := X"56502020";
constant LITTLE_ENDIAN : integer := 0;-- ↑接続する CPU に合わせて設定の必要あり-- BLAN-- CA A-- VP-- リトル・エンディアンのとき 1，ビッグ・エンディアンのとき 0constant BUSERR_ALTRDY : integer := 1;-- バス・エラー発生時，代替レディを返す-- ↑ 1 の場合は，デバイスが存在しないエリアにアクセスしてもハングアップしない-0 の場合は，デバイスが存在しないエリアにアクセスするとハングアップする

各種パラメータ定義

constant SYSCLK_DIV: integer := 13;-- シリアル・コントローラ用分周カウント値-- ↑システム・クロック 66.666MHz 時:18 分周 48.000MHz 時:13 分周 33.333MHz 時:9 分周 25MHz 時:7 分周

constant CHIP_SELECT: integer := 11;-- チップ・セレクト本数-- ***** チップ・セレクト 0 リソース定義 ***** -constant CHIPSEL0: integer := 0;-- チップ・セレクト番号 0
constant CHIPSEL0_ID: std_logic_vector(31 downto 0) := X"41565053";
constant CHIPSEL0_ADRS : std_logic_vector(31 downto 0) := X"80000000";constant CHIPSEL0_SIZE : integer := 25;-- 32M バイト-- ***** チップ・セレクト 1 リソース定義 ***** -constant CHIPSEL1: integer := 1;-- チップ・セレクト番号 1
constant CHIPSEL1_ID: std_logic_vector(31 downto 0) := X"52474243";
constant CHIPSEL1_ADRS : std_logic_vector(31 downto 0) := X"82000000";constant CHIPSEL1_SIZE : integer := 25;-- 32M バイト-- ***** チップ・セレクト 2 リソース定義 ***** -constant CHIPSEL2: integer := 2;-- チップ・セレクト番号 2
constant CHIPSEL2_ID: std_logic_vector(31 downto 0) := X"41433937";
constant CHIPSEL2_ADRS : std_logic_vector(31 downto 0) := X"84000000";-- "AVPS"AVP

ASCII文字4文字でデバイスIDを表す
ベース・アドレス割り当てる空間サイズ-- "RGBC"

RGB-- "AC97"

AC97

リスト 2 A/ V プロセッサ・リソース・テーブル・コントローラ（AVP_SYS.VHD）-- ********** ACCESS ステート時の動作 ********** -when REG_ACC =>if (SYS_ReadWrite = '1') then-- リード・アクセス
case SYS_Address(7 downto 2) iswhen "000000" =>-- +00h シグネチャ表示
SYS_ReadData <= AVP_ID0;
when "000001" =>-- +04h
SYS_ReadData <= AVP_ID1;
when "000010" =>-- +08h
SYS_ReadData <= AVP_ID2;
when "000011" =>-- +0Ch
if (LITTLE_ENDIAN = 1) then
SYS_ReadData(31) <= '1';-- リトル・エンディアン時は MSB が'1'else
SYS_ReadData(31) <= '0';-- ビッグ・エンディアン時は MSB が'0'
end if;
SYS_ReadData(30 downto 0) <= (others => '0');
when "000100" =>-- +10h 割り込みステータス
SYS_ReadData(31 downto 16) <= IOP_Interrupt;
SYS_ReadData(15 downto CHIP_SELECT) <= (others => '0');
SYS_ReadData(CHIP_SELECT-1 downto 0) <= AVP_Interrupt;
when "000101" =>-- +14h 割り込みイネーブル
SYS_ReadData(31 downto 16) <= IOP_IntEnable;
SYS_ReadData(15 downto CHIP_SELECT) <= (others => '0');
SYS_ReadData(CHIP_SELECT-1 downto 0) <= AVP_IntEnable;
when "000110" =>-- +18h 割り込みレベル・レジスタ
SYS_ReadData(31 downto 8) <= (others => '0');
SYS_ReadData( 7 downto 0) <= SYS_IntLevel;〜中略〜

when "001000" =>-- +20h チップ・セレクト 0 デバイス ID
SYS_ReadData <= CHIPSEL0_ID;

146

リソース定義ファイルで定義した定数が入る

Dec. 2006