(Xilinx社のデバイスが搭載されたFPGAボードをジャンク箱で眠らせている人にもお勧め)PicoBlazeってなぁに?PicoBlazeとは、Xilinxが提供しているソフト・マクロで構成されたマイクロ・コントローラです。最大4K命令の実行が可能で、命令長は18ビット固定、1命令あたり2クロック・サイクルで処理されます。PicoBlazeは、非常にシンプルな8ビット・プロセッサです。I/Oは自分で構成する事ができ、入出力それぞれ独立した8ビットのポート番号を持ちます。割り込みなんて1系統しかありません。最大クロック周波数は、デバイスとデザイン(配置配線、タイム・スペック)に依存するものの、Spartan-6(-2)で105MHz、Spartan-6(-3)で138MHz、Vertex-6(-3)で240MHzが得られます。いえ、パフォーマンスはさほど重要なポイントではありません。いうか、パフォーマンス目当てでこんな物を使ってはいけません。FPGAとプロセッサを並行して使う事で、論理記述言語のみで処理する場合に比べて、格段に設計が楽になったりします。(当然ですが、全てのケースでそうだなんて言いません。いう場合もあるというだけです。)プロセッサの場合、シーケンシャルな処理を記述するのは簡単で、単に処理を上から順に書くだけで済みます。(実行はFPGAに比べて格段に遅いけどね。)FPGAでシーケンシャルな処理を構成する場合、ステートマシンを設計したり、ジェネリックで色々なパラメータを上位から渡せるようにした後でそれらを上位でパイプラインを構成して組み合わせたりと、何だかんだを手作業でやる事になるのが通例です。「FPGAで構成したクロック単位でキビキビ動作する回路と、PicoBlaze上で動作するゆるーいソフトウェアを組み合わせる事で、従来にないメリットが得る」という使い方が、PicoBlazeの美味しいところです。PicoBlazeはEDKなど有償ライセンスなしで開発できるのも嬉しいところ。自宅のプチ・プロジェクトでも安心して使えるのがPicoBlazeなのです。PicoBlazeのリソースをダウンロードするPicoBlazeのリソースは、Xilinx社のウェブからダウンロードする事ができます。ダウンロードにはサイン・インが必要です。http://www.xilinx.com/ipcenter/processor_central/picoblaze/member/index.htm初めにダウンロードする場合、登録が必要になっています。ターゲットデバイスを選択して、住所などを入力します。ライセンス情報が表示されます。登録が完了するとラウンジに入室です。ここからお目当てのデバイスのリソースをダウンロードします。7シリーズ用のリソースもあります。MicroBoardで使用するので、KCPSM6をダウンロードしました。Release4の中身は以下のようになっていました。どんな風に開発するの?PicoBlazeの開発フローを簡単に説明します。PicoBlaze向けのソフトウェアをアセンブラで記述する。記述したソフトウェアをアセンブルして、プログラムROM用のモジュールを得る。プログラムROM用のモジュールとPicoBlazeソフト・コアをプロジェクトに追加する。シンセサイズとインプリメンテーションを実行する。言ってしまうと、FPGAの開発フローの前段に余計な物がくっついたという感じです。PicoBlazeプロセッサ向けに追加されたフローは、アセンブラの記述とアセンブルの実行です。このプロセスで得られるのは、PicoBlazeソフト・コア本体と、自分で記述したソフトウェアのインストラクションが格納されたモジュールです。後は、ROMとソフト・コア本体、そして自分が欲しい周辺回路を論理記述言語で接続して使用するだけです。命令格納モジュール(下図で言うyour_program)とPicoBlaze(下図で言うkcpsm6)の関係は以下です。プロセッサ・コアからアドレスを与えられた命令格納モジュールが、命令をプロセッサ・コアに引き渡す構成です。使用イメージを簡単に掴む為に、実際にインプリメンテーションを通した後の様子を回路図で見てみましょう。上記を見ておわかりのように、ユーザ回路の一部にインストラクション格納モジュールとPicoBlaze本体が挟まっただけの構成です。本当に適当な例(さっきの回路)ここで、本当に適当な例(さっきの回路)を挙げてみましょう。トップはsw1の状態を入力ポートのビット0に渡し、出力ポートのビット3から0をport_idが0の時にラッチしてLEDを点灯させているだけの回路です。入力ポートをどのように使用するのか、出力ポートをどのように使用するのか、についてはプロセッサ上で動作するプログラムに任されています。RTL;次にプロセッサ上のプログラムです。レジスタは16レジスタが2バンクある構成になっています。デフォルト・バンクは'A'です。これらのレジスタは、ユーザが自由に使用する事ができます。s0とかs1とかだと分かりにくいのですが、NAMEREGを使う事で名前でレジスタにアクセスする事ができます。RETURN上記の例では、スイッチを押すたびにプロセッサ上のレジスタの値をインクリメントし、インクリメントした値を8ビットのポートに出力するようにしました。今回は非常に単純な例を示したので、「そんなのVHDLだけで良い」と言われかねませんが、プロセッサによる並列処理を介在させる事でハードウェア側の設計を単純にする事ができる例があります。I2CやSPIなど、同じプロトコルでも複数の種類があるような場合や、そもそもステートがあまりに多い場合にも、全体制御をプロセッサにさせる事で、ハードウェア側の設計が楽になる事は間違いありません。(ここでは性能について一切触れませんが。)また、ソフト・コア・プロセッサが動作するというだけで、少しワクワクした気分になるのは自分だけではないでしょう。無償で得られる開発環境で、チクチクピコピコPicoBlazeいじりなんていうのも、たまには面白いのではないでしょうか。(Atom)自己紹介shinta基板が大好きな組み込み系エンジニア。電気図面を描いてPCB上に美しく配線できた時に何とも言えない快感を覚える。ソフトウェアとドライバが一式になったパッケージをダウンロードします。インストール後に本体を接続してソフトウェアを起動すると以下のような画面が表示されます。勢いよく「改良しました!」と宣言したh8writeですが、やっぱり書き込みに失敗するという事がわかりました。そもそも真の原因を掴めないまま改良したと言っても、何を改良したのか意味がわかりません。放置を防ぐアイデアの1つとして「具体的な目標に繋げる」というものを挙げました。LPCXpressoを使って、USBを研究す...システムにおけるレイテンシーとスループットの話題レイテンシーとは、あるシステムに何らかの入力を与え、それに対応する何らかの出力が出てくるまでの時間(遅延量)を指します。ある処理の実行を指令してから実際の結果が得られるまでに250ミリ秒かかったとすると、それは250ミリ秒のレイテンシーを持つシステムという事になります。アップデートしました。このアップデートにより、以下の動画で示すような長い曲でも難なく再生させる事ができるようになりました。LPC824を使ったサウンドモジュールMicroSoundModuleを開発していました。このサウンドモジュールは、コマンドを受け取って色々な再生を行うもので、当初はこのコマンド処理部分の実装にNT-Shellを用いる計画でした。BlackTankには有機EL液晶が搭載される予定です。接続部分はFPCになっていて、例によってFPC用コネクタなのですが、最初の実装は思いっきり失敗してしまいました。mkIIは便利なのですがオンフィールドで書き換えるには不便ですし、ユーザに書き変えを頼むわけにもいきません。Atmelが公開しているアプリケーションノートAVR109に自己プログラミングがありましたので試してみました。ターゲットMPUはATmega8とATmeg...設計基板にアクリルを付けてお洒落度アップ!「アクリ屋ドットコム」さんにアクリルを発注してみる。おもてなしの心は日本人の得意分野かと思っていましたが、コスト削減要求の嵐の中そんなことは忘れ去られてしまったかのように見える今日。した評価基板の天面にアクリル板なんかが載っていると思わず「おぉー。」なんて思ってしまうのも情けない話です。moduleにブートローダを載せる(AVR109対応)随分前に対応しようと思い立っていたAVR109にようやく対応させた。以前やった時にうまく書けなかったのはボードのクロック精度が原因。ここ数日モニタを実装していて、思った以上にRC内蔵クロックの精度が悪いことが分かった。エコーバックのテストでやたらと文字が化ける。