Prefetchable Memory Rangeの設定方法について
PCIeインターフェースは、今では広く使われている技術ですが、規格書(PCIe Specification)だけでは少し分かり難いため、本コラムでは、規格書から抜粋したトピックについて説明していきます。
今回は、Type1 Configuration Space Headerの中で、Prefetchable Memory Rangeの設定方法について説明します。Prefetchable Memory Range の設定には、Type1 Configuration Space Headerの下記Registerを使います
・Prefetchable Memory Base
・Prefetchable Memory Limit
・Prefetchable Memory Base Upper 32 Bits
・Prefetchable Memory Limit Upper 32 Bits
これら4つのRegisterは、PCIe SwitchのようなBridge Deviceが、受け取ったMemory Transactionを通すか否かを判断するための、Memory Rageを設定するために使用します。
Registerに設定したMemory Range内のMemory Transactionであれば、そのMemory Transactionを通しますが、Memory Range外のMemory Transactionであれば、そのMemory Transactionを通さない、という動きになります。
Registerの役割

それぞれのRegisterの役割は以下となります。
・Prefetchable Memory Base RegisterとPrefetchable Memory Limit Registerは16bits、
Prefetchable Memory Base Upper 32 Bits Registerと
Prefetchable Memory Limit Upper 32 Bits Registerは32bits、
Prefetchable Memory Rangeは64bitsで構成されます。
・Prefetchable Memory Base RegisterとPrefetchable Memory Base Upper 32 Bits Registerは
Prefetchable Memory Rangeの開始アドレスを設定し、Prefetchable Memory Limit Registerと
Prefetchable Memory Limit Upper 32 Bits RegisterはPrefetchable Memory Range
の終了アドレスを設定します。
・Prefetchable Memory Base Registerの上位12bitsはPrefetchable Memory Rangeの
開始アドレス[31:20]、Prefetchable Memory Base Upper 32 Bits Registerは
Prefetchable Memory Rangeの開始アドレス[63:32]となります。
・Prefetchable Memory Limit Registerの上位12bitsはPrefetchable Memory Rangeの
終了アドレス[31:20]、Prefetchable Memory Base Upper 32 Bits Registerは
Prefetchable Memory Rangeの終了アドレス[63:32]となります。
・Prefetchable Memory Rangeの開始アドレス下位20bitsは0x00固定、
終了アドレスの下位20bitsは0xFF固定となります。
設定方法の具体例
どのような値を設定すればいいのか、具体的な例を用いて説明します。詳細な仕様についてはPCIe Specificationをご確認ください。
Memory Transactionを通すPrefetchable Memory Rangeを1_8000_0000h - 1_84FF_FFFFhの範囲に設定する場合は、以下のようにRegisterを設定します。


上記のRegister設定により、1_8000_0000h - 1_84FF_FFFFhのMemory Rangeを設定することができます。
お問い合わせ
本記事に関して、ご質問がありましたら以下より問い合わせください。