ども。nodamushiです。今年こそはブログ頑張って書こうと思いつつも早くも3月が終わろうと………え、終わった!?
さて、今回は Zynq (Cora Z7-07S) でMicroblaze を動かそうとしたら、意外にも苦戦したのでその記録を残しておきます。
Zynq で Microblaze を動かしたい
Zynq で Microblaze ?何?ヘテロジニアスなコアでも開発してんの?
いえいえ、実はシングルCPUアプリケーションの実験なんです。Microblazeを触りたかっただけで、手元にあるのがZynq (Cora Z7-07S) だったんですよね。泣く泣くの選択です。
さて、まずはお馴染みLチカから。というわけで、作ったデザインは以下。単に AXI を介して GPIO に Microblaze が繋がってるだけ。
Lチカのプログラムはこんな感じ。
#include <xparameters.h> #include <cstdint> #define LED ((volatile uint32_t*)(XPAR_GPIO_0_BASEADDR)) #define LEDT ((volatile uint32_t*)(XPAR_GPIO_0_BASEADDR + 4)) int main() { *LEDT = 0; // all out *LED = 1; // LED Red return 0; }
Bitstreamを作成し、Vitisで上記のプログラムを動かそうとしたところ、問題が発生。
ビルドはできるんだけど、デバッグを開始すると、「No ARM processor found in design.Cannot reset entire system」というエラーメッセージが表示されて何も動かん。おい、どういうことだってばよ。
MicroBlaze code running on a Zynq Development Board ZC706 without a Zynq IP implemented - Error: No ARM processor found in design. とか読んでもよくわからない……。私は単に動かしたいだけなんだがな……。
解決法:ZYNQ Processing System のリセットを接続
動かなーい、って実は一回諦めたんだけど、リセットが動きゃいいってことは、単に ARM CPU のリセット繋げばいいんじゃね?ってことで、Zynq7 Processing Systemを配置してリセットを接続してみたら、Runをすることに成功しました。
LEDもちゃんと光ったよ。おぉ、やったね。
というわけで、 Zynq で何故か Microblaze を動かそうとしてる変な人は、とりあえずZynq のリセットを接続すればいいみたいよ。