FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

AXIチャネルのアクセスをどうやって実装するか?

この実装方法が本当に合っているのかどうかは分からないけれども...

f:id:msyksphinz:20150614145318j:plain

CPUはパイプラインフラッシュが発生することがあるため、メモリアクセスが途中でぶった切られる可能性がある。 例えば、アドレスチャネルまでの応答が確定していて、そこでパイプラインフラッシュが入っても、データチャネルの応答を行うためにデータチャネルの応答を待たなければならない。 これをしないと、パイプラインフラッシュをするのではなく、最後までAXIの応答を待ってからデータを次のチャネルに渡すのだけを防がなければならない。

AXIのチャネルを操作中は、ステートマシンのフラッシュを実行してはならない。どのチャネルを最後にフラッシュするかの情報だけを保持しておく。 ステートマシンで最後までアクセスが完了すると、フラッシュ予定の情報を見てからデータを次のパイプに渡すかどうかを決定する。

ロード命令はとりあえずAXIアクセスを発生させる。その間はパイプラインフラッシュは禁止。 ストア命令は、ROBからコミットが通知まではAXIにアクセスを出せない。その間はパイプラインフラッシュは可能だが、AXIアクセスが始まるとパイプラインフラッシュは禁止。