プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

Zynqで Microblaze を動かす方法

ども。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 のリセットを接続すればいいみたいよ。