波形をチェックしながら途中でテストケースが死んでしまう原因を調べていたのだが、どうやら不正なメモリ領域にアクセスしていたらしい。 PLICの領域を0x0C00_0000に配置していたのだが、この領域を出るとバスが反応しなくなる(というか、その場合はエラーを返すようにしてほしいな...)
メモリマップ自体は以下の実装に従わなくてはならない。
# Memory Mapping. @property def mem_map(self): return { "rom" : 0x0000_0000, "sram" : 0x2000_0000, "main_sram" : 0x4000_0000, "csr" : 0xf000_0000, }
で、このマップに例えば0x0c00_0000
を追加すればいいかというとそうでもなく、このキーワード"rom", "sram", "main_sram", "csr"
というのは決まっているらしくて、ほかのキーワードを安易に追加してもあまり意味がない。
PLICへのアクセスはCPUサブシステムの外に出してはダメで、サブシステムの中で処理しなければならない。この場合は、ラッパーの構成を変える必要がある。 実装を変更しよう(今日はこれまで)。