Processing math: 100%

Cortex-A9内蔵FPGA Zynq 入門 FreeRTOSのススメ


同時進行する複数処理をスッキリ・プログラミング

FreeRTOSを活用したシステム・チップの構築

図1 Zynqでは,FreeRTOSを活用することで,リアルタイム性を確保しつつ,シンプルなコード構造で統合システムを構築できる.たとえば,センサ読み取りとキー入力,ディスプレイ表示を独立したタスクとして設計し動かせる.画像クリックで動画を見る.または記事を読む.[提供・著]中村 晋一郎
詳細[VOD/KIT]ARM Cortex-A9&FPGA内蔵SoC Zynqで初体験!オリジナル・プロセッサ開発入門

Zynqは,Cortex-A9プロセッサを内蔵したFPGAであり,高い柔軟性と処理性能を備えるSoC開発用のFPGAです.FreeRTOSを組み合わせることで,複数の処理を効率的に並列実行できる統合システムを構築できます.

FreeRTOSによるタスク管理

FreeRTOSを使用することで,処理をタスク単位で分割し,それぞれが独立して動作するように設計できます.講義動画のシステムでは以下のタスクを実装します.

  1. センサ読み取りタスク:一定周期でI^2C接続の温湿度センサの値を取得する.
  2. キー入力監視タスク:ユーザの操作を検知し,システムの動作を制御する.
  3. ディスプレイ表示タスク:センサの値やメニュー情報を画面に描画する.
  4. LED制御タスク:システムの状態に応じてRGB LEDの点灯パターンを変更する.

タスク間のデータ受け渡しにはFreeRTOSのメッセージ・キューを使用し,リアルタイム性を維持しつつシンプルな設計を実現します.

割り込み処理の設計

講義動画のシステムでは,以下のような割り込み処理を利用します.

  1. I^2C通信の完了割り込み:センサからのデータ取得を効率化.
  2. キー入力割り込み:ユーザの操作に即座に応答可能にする.
  3. タイマ割り込み:タスクの周期的な実行を制御.

割り込み処理では,できる限り短い時間で処理を完了させ,主要な処理はタスク側で実施するのが基本です.

FreeRTOSのタスク管理

タスクの役割と設計

FreeRTOSでは,複数の処理を「タスク」として定義し,それぞれが独立して動作します.各タスクは,以下の要素をもちます.

  1. タスク関数:タスクの本体処理を定義.
  2. 優先度:タスクの実行順序を制御.
  3. スタックサイズ:タスクごとに確保するメモリ領域.
  4. タスクハンドル:タスクを管理するための識別子.

適切な優先度設定により,リアルタイム性を確保しつつ,CPUリソースを最適に活用できます.

タスク間通信

FreeRTOSでは,タスク間のデータ受け渡しに以下の方法を使用します.

  1. キュー:FIFO方式でデータを送受信.
  2. セマフォ:タスクの同期や排他制御を実現.
  3. イベント・グループ:複数のタスク間での状態共有に使用.

講義動画のシステムでは,センサタスクが取得したデータをキュー経由でディスプレイタスクへ送信し,画面を更新する設計とします.

FreeRTOSのスケジューリング

FreeRTOSはプリエンプティブスケジューラを採用しており,各タスクの優先度に基づいてCPUリソースを動的に割り当てます.代表的なスケジューリング方式は以下のとおりです.

  1. 優先度ベース:優先度の高いタスクが先に実行される.
  2. タイム・スライス:同じ優先度のタスクは一定時間ごとに切り替え.
  3. イベント駆動:特定のイベント発生時にだけ実行.

講義動画のシステムでは,センサ読み取りやキー入力監視は一定周期で動作するため,タイマ割り込みを活用した設計が適しています.〈著:ZEPマガジン〉

動画を見る,または記事を読む

著者紹介

  • 2002年より業務用映像音声機器メーカに勤務.システムアーキテクチャ設計やファームウェア開発業務に携わる.2020年にリベラルロジック株式会社を設立.

著書

  1. [VOD/KIT]ARM Cortex-A9&FPGA内蔵SoC Zynqで初体験!オリジナル・プロセッサ開発入門,ZEPエンジニアリング株式会社.
  2. アプリはスクリプトで柔軟に!マイコン用MicroPythonプログラミング,Interface 2016年10月号,CQ出版社.
  3. シンプル・便利・基本的!フリー・ソフトで高品質プログラミング,Interface 2015年11月号,CQ出版社.
  4. 音遊び!Blackfin DSP基板でディジタル信号処理初体験,Interface 2015年2月号,CQ出版社.
  5. ROM 10Kバイト/RAM 1Kバイトでヒストリ機能付き! コマンド入力ライブラリNT-Shell,Interface 2013年1月号,CQ出版社.
  6. SDメモリーカード対応のポータブルFPGA書き込み器,トランジスタ技術2011年9月号,CQ出版社.
  7. 世界温度計 コラム イーサネット通信用のライブラリが充実,トランジスタ技術2011年5月号,CQ出版社.

参考文献

  1. FPGA/Zynqで作るカスタム・コンピュータ・チップ,ZEPエンジニアリング株式会社.
  2. Zynq FPGA入門 コンピュータ・チップの自作,ZEPエンジニアリング株式会社.
  3. Zynq FPGA入門 自作回路とCPUの通信,ZEPエンジニアリング株式会社.
  4. Zynq FPGA入門 独自のコンピュータ・チップ,ZEPエンジニアリング株式会社.
  5. Zynq FPGA入門 2つのチップ内CPU構成法,ZEPエンジニアリング株式会社.
  6. Zynq FPGA入門 各社FPGAと利用できるCPU,ZEPエンジニアリング株式会社.
  7. Lチカ入門!ソフトウェア屋のためのHDL事はじめ,ZEPエンジニアリング株式会社.
  8. HDL超入門!スイッチ読み取り回路とLED駆動回路のHDLソースコード,ZEPエンジニアリング株式会社.
  9. 超入門!スイッチ読み取り回路とLED駆動回路のHDLソースコード,ZEPエンジニアリング株式会社.
  10. FPGAキット DE10入門 PWM信号生成回路IP,ZEPエンジニアリング株式会社.
  11. FPGAキット DE10入門 論理合成前の動作確認,ZEPエンジニアリング株式会社.
  12. FPGAキット DE10入門 正しく動かない乗算器,ZEPエンジニアリング株式会社.
  13. Artix-7 FPGA入門 A-D変換回路の実験,ZEPエンジニアリング株式会社.
  14. FPGA×HDL超入門 2種類のリセット回路,ZEPエンジニアリング株式会社.
  15. FPGA×HDL超入門 2種類のリセット回路,ZEPエンジニアリング株式会社.
  16. FPGA×HDL入門 レジスタの同期運転,ZEPエンジニアリング株式会社.
  17. FPGA×HDL超入門 4桁の7segLED制御,ZEPエンジニアリング株式会社.
  18. Xilinx FPGA入門 回路バイナリの合成,ZEPエンジニアリング株式会社.
  19. Xilinx FPGA入門3 重要な2つのファイル,ZEPエンジニアリング株式会社.
  20. Xilinx FPGA入門2 回路データ・バイナリを転送,ZEPエンジニアリング株式会社.
  21. Xilinx FPGA入門1 スイッチONでLED点灯,ZEPエンジニアリング株式会社.
  22. FPGA入門 演算回路の動作テスト
  23. 自作CPU入門:コンピュータの頭脳を理解する,ZEPエンジニアリング株式会社.
  24. 自作CPU入門2:部品どうしをつなぐ「バス」,ZEPエンジニアリング株式会社.