• 検索結果がありません。

5.3.1 はじめに

cpu部分には、記述ファイルのうち、アプリケーションとコンフィグレーションに依存しない部分が含まれ ます。この部分は、アセンブラ言語(仮想アドレス)からチップ(物理アドレス)へのアドレス変換を定義し ます。変換を記述するため、DELFEEは次の4つの主要なレベルを識別します。

1. アドレッシングモードの定義。アドレッシングモードは、アドレス空間のサブセットです。アドレス空 間内のアドレス範囲を定義します。

2. アドレス空間の定義。アドレス空間は、使用可能なアドレス範囲全体を示します。

3. バスの定義。

4. (オンチップ)メモリチップの定義。

アドレス変換は、アドレッシングモードから、アドレス空間とバスを経由してチップまでの範囲で定義さ れます。アドレッシングモードとバスはネストできますが、アドレス空間とチップはネストできません。

アドレッシング  モード1

アドレッシング 

モード3 空間  内部バス 

外部バス 

チップ内部 

チップ外部  map

map

map

mem

mem バス 

アドレッシング  map モード2

map

アドレッシング  モード4

map

図5.3.1.1 アドレス変換

アドレッシングモードとアドレッシング空間は仮想部分に属し、バスとチップは物理部分に属します。次 の節では、アドレス空間、およびアドレス空間のサブセットであるアドレッシングモードについて説明し ます。その後、物理サイド(ハードウェア構成)について説明し、さらに、使用できるバスとチップについ て説明します。

次の例は、cpu部分を示しています。これは、定義を紹介するために作成した架空の例です。この例を見る と、アドレッシングモード定義、アドレス空間定義、バス定義、オンチップメモリ定義がそれぞれ識別で きます。

cpu { //

// addressing mode definitions //

amode near_code { attribute Y1;

mau 8;

map src=0 size=1k dst=0 amode = far_code;

}

amode far_code { attribute Y2;

mau 8;

map src=0 size=32k dst=0 space = address_space;

}

amode near_data { attribute Y3;

mau 8;

map src=0 size=1k dst=0 amode = far_data;

}

amode far_data { attribute Y4;

mau 8;

map src=0 size=32k dst=32k space = address_space;

} //

// space definitions //

space address_space { mau 8;

map src=0 size=32k dst=0 bus=address_bus label=rom;

map src=32k size=32k dst=32k bus=address_bus label=ram;

} //

// bus definitions //

bus address_bus { mau 8;

mem addr=0 chips=rom_chip;

map src=0x100 size=0x7f00 dst=0x100 bus=external_rom_bus;

mem addr=32k chips=ram_chip;

map src=0x8100 size=0x7f00 dst=0x100 bus=external_ram_bus;

} //

// internal memory definitions //

chips rom_chip attr=r mau=8 size=0x100; // internal rom chips ram_chip attr=w mau=8 size=0x100; // internal ram }

5.3.2 アドレス変換:mapとmem

DELFEEでは、2つのレベル(ソースレベルとデスティネーションレベル)間のメモリ変換を、次の2種類の方 法で記述します。

1. mapキーワード。これは、アドレッシングモード、アドレス空間、バスの間(チップは該当しない)でア

ドレス変換するためのものです。

2. memキーワード。これは、バスとチップの間のアドレス変換を記述するためのものです。memはmapを

簡単にしたものです。

300 200 100 src 0

100

0 dst アドレス(mau=8)

ソースレベル 

アドレス(mau=16) デスティネーションレベル size

map src=0 size=200 dst=0 図5.3.2.1 マップアドレス変換

マップ定義の一般的な構文は、次のようになります(図5.3.2.1参照)。

map     src=number  size=number  dst=number  destination̲type=destination̲name  optional̲specifiers;

src ソースレベルの開始アドレス。アドレッシングモードとアドレス空間との間でアドレス変換を行う 場合、ソースレベルがアドレッシングモードで、デスティネーションレベルがアドレス空間になり ます。

size ソースレベルの長さ。

dst デスティネーションレベルの開始アドレス。

destination̲type

デスティネーションタイプはマッピングが使用されるコンテキストに依存し、次の3種類のいずれか のタイプになります。

1. amode アドレッシングモードのコンテキストで使用できます。

2. space アドレッシングモードのコンテキストで使用できます。

3. bus アドレス空間、バスのコンテキストで使用できます。

optional̲specifiers

オプションの識別子も、使用されるコンテキストに依存します。

1. label アドレス空間のコンテキストでのみ使用でき、software部分のブロック定義で参照値とし て必要になります(5.4.5節を参照)。

label = name;

2. align これは、すべてのセクションが指定された値に揃えられることを示します。

align = number;

3. page これは、すべてのセクションが指定されたページサイズ内に入れられることを示します。

page = number;

ソースレベルとデスティネーションレベルの両方に、最小アドレス可能単位(MAU、アドレスを使用してア クセスできる記憶域の最小量をビット単位で示したもの)の数値で表現されるアドレス範囲があります。

マッピングの場合のみ、アドレスマッピングの範囲とデスティネーションを記述することができます。実 際の変換も、アドレスがアクセスできるメモリ単位に依存します。最小アドレス可能単位8ビット(mau=8)

のソースレベルが、最小アドレス可能単位16ビット(mau=16)のデスティネーションレベルにマッピングさ れる場合、デスティネーションレベルのサイズ(アドレス範囲で表現)は、元のサイズの半分になります。

そのため、図5.3.2.1の例では、デスティネーションレベルのサイズが100になります。

level1からlevel2方向にmapが存在する場合、マップ定義は次のようになります。

end̲address of level2 = dst + ( size * mau of level1 / mau of level2 )

memの記述は、実際のところ、mapの記述を簡単にしたものです。アドレス変換の長さは、チップサイズ が元になり、デスティネーションアドレスは常に0になります。memは、バスをチップにマッピングすると きに使用されます。

構文は次のようになります。

mem     addr=number  chips=name;

addr チップの開始アドレスロケーション。

chips アドレスnumberにロケートされるチップの名前。

5.3.3 アドレス空間

仮想ワールドと物理ワールドとのリンクは、アドレス空間、およびそれが内部アドレスバスにマッピング される方法を記述することで行います。

アドレス空間は、命令セットがアクセスできるアドレスの完全な範囲で定義します。一部の命令セットは、

複数のアドレス空間をサポートします(たとえばデータ空間とコード空間)。 アドレス空間は、次の構文で記述します。

space name {

mau number;

map src=number size=number dst=number bus=bus_name label=name;

// :

// more maps }

space 記述ファイルでアドレス空間を参照するときに使用される名前を定義します。

mau 最小アドレス可能単位。アドレスを使用してアクセスできる記憶域の最小量を示したものです(ビッ ト単位)。

map このアドレス空間のアドレスの範囲からbus̲nameで定義されたバスへのマッピングを指定します。

アドレスの範囲は、srcおよびlengthで定義し、バスのオフセットはdstで定義されます(アドレス空間 をマッピングするバスは異なるMAU値になっていることがあるが、その場合バスの範囲の長さが変 わる)。アドレス空間は、バスのみにマッピングできます。

通常、アドレス空間のアドレスは、バス上の同じアドレスに対応しています。その場合、srcとdstが同じ値 になります。

前の例では、空間定義が1つだけありました。

space address_space { mau 8;

map src=0 size=32k dst=0 bus=address_bus label=rom;

map src=32k size=32k dst=32k bus=address_bus label=ram;

}

この例では、空間の名前がaddress_spaceになっています。amod定義はこれをマッピング先の名前とし て使用します。最小アドレス可能単位(MAU)は8ビットに設定されています。ラベルromとramは、software 部分のblock定義によって使用されます。これについては、5.4.5節で説明します。

5.3.4 アドレッシングモード

アドレッシングモードは、アドレス空間のアドレス範囲を定義します。アドレッシングモードには通常、

メモリのビットアドレス可能部分、コードセクション専用の部分、ゼロページなど、特殊な特性がありま す。アドレッシングモードは、命令セットによって定義されます。アドレッシングモードをDELFEE言語で 定義するときの構文は次のようになります。

アドレス空間は、次の構文で記述します。

amode name {

mau number;

attr Y number;

map src=number size=number dst=number amode | space=name;

}

amodeアドレッシングモードを参照するときに使用される名前。オブジェクトファイルの場合、セクション

のアドレッシングモードはYnumberでコード化されます。これは、アドレッシングモードに対して指 定されたnameが、セクションではなく、記述ファイル内だけで有効であることを示しています。

mau 最小アドレス可能単位。アドレスを使用してアクセスできる記憶域の最小量を示したものです(ビッ ト単位)。

attr Y アドレッシングモード番号。(アセンブラが生成する)コードセクションまたはデータセクションに

はすべて、それが属するアドレッシングモードを指定するための数値があります。DELFEE記述ファ イルでは、アドレッシングモードを識別するためにこの数値が使用されています。セクションの変 換と混同される可能性があるため、この数値は変更することができません。

map このアドレッシングモードから他のアドレッシングモード(amode)またはアドレス空間(space)に対 するマッピングを定義します。

以下は、2つのアドレッシングモード定義の例です。

amode near_data { attribute Y3;

mau 8;

map src=0 size=1k dst=0 amode=far_data;

}

amode far_data { attribute Y4;

mau 8;

map src=0 size=32k dst=32k space=address_space;

}

0x03ff 0x0000 0x7fff

0xffff

0x7fff

0x0000 Space address_space

far_data near_data

図5.3.4.1 アドレッシングモードのマッピング

この例では、アドレッシングモードにnear_dataおよびfar_dataという名前が付いています。これら は、それぞれアドレッシングモード番号Y3およびY4で識別されます。最小アドレス可能単位(MAU)は8ビッ トに設定されています。アドレッシングモードnear_dataは、アドレッシングモードfar_dataにマッピ ングされ、far_dataは、アドレス空間address_spaceにマッピングされています。address_space は、前の節で紹介したアドレス空間です。