以下のPLICのオープンソース実装を使って自作CPUに接続していたのだが、どうもメモリマップが違う気がする。 かなり古い実装なので、現在の仕様と違うのはやむなしか...
なんか結局は自分で実装しなければならないような気がしているので、一生懸命仕様書を読んでいる。
仕様書を読み漁って、なんとなく必要なレジスタ群が分かってきた。
- Priorityレジスタ (割り込みソースの数だけ用意される)
base + 0x000000: Reserved (interrupt source 0 does not exist) base + 0x000004: Interrupt source 1 priority base + 0x000008: Interrupt source 2 priority ... base + 0x000FFC: Interrupt source 1023 priority
- Pendingレジスタ (割り込み要求が通知され、まだCompleteしていない状態)
base + 0x001000: Interrupt Pending bit 0-31 ... base + 0x00107C: Interrupt Pending bit 992-1023
- Enableビット (割り込み要求許可をしたソースおよびHARTの組)
base + 0x002000: Enable bits for sources 0-31 on context 0 base + 0x002004: Enable bits for sources 32-63 on context 0 ... base + 0x00207C: Enable bits for sources 992-1023 on context 0
- HART1向けのEnableレジスタ
base + 0x002080: Enable bits for sources 0-31 on context 1 base + 0x002084: Enable bits for sources 32-63 on context 1 ... base + 0x0020FC: Enable bits for sources 992-1023 on context 1
base + 0x1FFFFC: Reserved base + 0x200000: Priority threshold for context 0 base + 0x200004: Claim/complete for context 0 base + 0x200008: Reserved
- HART1向けのPriority Thresholdレジスタ
base + 0x201000: Priority threshold for context 1 base + 0x201004: Claim/complete for context 1 ...