ZedboardでPicoBlazeマイコンを動作させる

PicoBlazeは、ザイリンクスFPGAに組み込むことができる8ビット・マイクロコントローラーです。
Zynqには、強力なデュアルコア32ビット・マイクロコントローラーがすでに搭載されています。
このような小さなマイクロコントローラーを実装するために、なぜプログラマブル ロジックを使用する必要があるのでしょうか?

PicoBlazeは非常にシンプルです。ブロックRAMから18ビットの命令をフェッチし、正確に2クロックサイクルで実行します。
ハードウェアで開発するには複雑すぎるようなステートマシンを実装するのにも使用できます。

PicoBlazeのリプログラミングは、PicoBlazeのアセンブリコードをWindowsの実行ファイルでコンパイルし、
JTAGでBRAMをリフラッシュする流れが一般的です [1]。
<a href=https://kevinpt.github.io/opbasm/>Open PicoBlaze Assembler</a>というオープンソースプロジェクトのおかげで、
Pythonインタプリタがあればどのプラットフォームでもコンパイルが可能になりました。

ここでは、簡単なPython スクリプトでPicoblazeをコンパイルおよびフラッシュすることを目的としています。
以下は、Vivadoのブロック デザインです。

PicoBlazeとブロックRAMの接続

まず、ザイリンクスのKen Chapman氏が作成したVHDLソースファイルkcpsm6.vhdでコアを作成することから始めます。
下図は、PicoBlazeとブロックRAMの接続を示したものです。

Vivado のブロックデザイン

BRAMはスタンドアローンのトゥルー デュアル ポートRAMとして構成され、幅18 ビット、深さ2048 となっています。
これは、Zynqの36 kbブロックRAM 1つに完全に適合します。
これにより、理論的にはZedboard上に最大140個のPicoBlazeコアを配置することができます。

プログラムはBRAM PORT AからAXI4 Liteインタフェースでロードされ、PicoblazeはPORT Bから読み込みます。
以下は、Picoblaze上で100個の連続したプログラムをコンパイル、ロード、実行するのに合計2.5秒かかるPythonコードです。

PicoBlazeの愚かな使い方ですが、Open Picoblaze Assemblerを使用してZynqで何ができるかを示しています。

FPGA設計のソースコード

参考文献

ページトップへ