Column コラム

組み込みシステム開発とは?設計の流れから開発環境の動向を紹介

#DX

#IoT

#スマートフォン

#ハードウエア設計

#家電製品

#組み込みシステム開発

#自動車

#電子回路設計

DXやIoTが進む世の中、スマートフォン、自動車、家電など組み込みシステム開発の必要性は日に日に高まっていると言えます。そこで、この記事では組み込みシステム開発の基礎知識から設計の流れ、ノウハウについて解説します。

組み込みシステム開発とは?

組み込みシステムとは、スマートフォン、自動車、家電などの機械・機器の内部に組み込まれたシステムのことです。その機械や機器全体を制御するために必要なセンサーやモーターといった入出力デバイスの制御も伴います。
そのような組み込みシステムはどのように開発されているのか、組込みシステムのノウハウや近年の開発環境の変化について紹介します。

組み込みシステム開発の流れ

組み込みシステム開発の流れはおおまかに下記のとおりです。

1. 要求分析(システムの目的を明確にする)
2. 要件定義(システムの機能を明確にする)
3. 基本設計(システムの全体機能を設計する)
4. 詳細設計(システムの単体機能を設計する)
5. 開発(コーディング作業)
6. 単体テスト(単体機能のテスト)
7. 結合テスト(単体機能の組み合わせテスト)
8. システムテスト(システム全体で仕様通りに作られているかの開発テスト)
9. 受け入れテスト(依頼側の要求を満たしているか実環境でのテスト)

要望されたシステムを満たすためにどのような動作が必要か、その動作を行うためには何の機能が必要かといった仕様検討を行います。そしてシステム全体から各機能を細分化して開発していきます。
開発モデルには「ウォーターフォールモデル」や「V字モデル」などがあります。

ウォーターフォールモデル

ウォーターフォールモデルは水が上から下に流れ落ちるように上流工程から一つひとつの工程を順番に進めていく開発モデルで、進捗管理がしやすいという反面、一つひとつの工程を順番に進めていくため、途中からの仕様変更や前工程の修正が難しいという側面があります。

組み込みシステム開発はモーターやソレノイドといった駆動制御を行うこともあり、安全性を考慮してテストを念入りに行う必要があります。

V字モデル

そこで開発工程とテスト工程との関係性を分かりやすく模した開発モデルにV字モデルがあります。
上記工程の「5.開発」を境に、「4.詳細設計⇔6.単体テスト」「3.基本設計⇔7.結合テスト」のように開発工程とテスト工程とが左右で対となる開発手法で、開発工程に対するテスト工程を明確でウオーターフォールモデルの進化版とも言われています。

組み込みシステム開発のノウハウと注意点

組み込みシステムのソフトウェア開発は基板に搭載されたMCUやMPUに書き込むファームウェアや組み込みOSなどがあります。映像のみで完結するようなアプリケーションはソフトウェアのみで完結する場合もありますが、組込みシステム開発においてはハードウェア制御を伴うプログラムが必要になり、ハードウェアに関する知識も必要になります。
そこでこの章では組込みシステム開発におけるハードウェア設計とソフトウェア設計のノウハウや注意点について紹介します。

組み込みシステム開発は、「システムはいつか壊れる」ということを想定して開発することを推奨します。具体的な例をいくつか説明します。
安全を考慮した設計思想に「機能安全」があります。機能安全とはシステムが壊れたときを想定し、システムがシステムに機能を追加することにより安全を確保することを言います。
組込みシステムにおいては、モーターやソレノイドなど動作を伴う制御も多く、システムが故障や暴走すると人体に損傷を与えかねません。そこで、システムの安定動作が不可能と判断したときには安全な状態へ移行するというものです。
安全設計にはフェイルセーフやフールプルーフなどがあります。システムに異常が発生したときに安全に停止または安全な状態へ移行することをフェイルセーフといい、踏切の遮断器は停電や故障したときには遮断桿が自重で落下し、人が立ち入れないように設計されています。
フールプルーフは使用者が誤った使い方をした場合に動作しないような仕組みで、例えば洗濯機のドアが開いている場合には洗濯槽のドラムが回転しないといった例が挙げられます。

近年の組み込みシステム開発環境の変化

これまでの組み込みシステムの言語はアセンブリやC言語が使われることが多く、現在においてもC言語は主流です。組み込みシステム開発にC言語が使われる理由の1つとして、組み込みシステムの環境にあります。

組み込み開発ではモーターなどリアルタイム制御が求められることが多く、アセンブリやC言語で開発したコードは軽く、実行速度も速いためリアルタイム性が求められる組み込みシステムに適しています。
組み込み開発においては8bitや16bit MCUでも要件を満たすこともあり、開発環境としては性能が限られる場合もあります。そのような限られた環境においてもコードが軽いという点がメリットして挙げられます。

しかし、近年の組み込みシステム開発ではAIやIoTなどの普及に伴い、開発環境にも変化が生じています。AIシステムで求められる高度な数値計算やIoT化におけるインターネットへ接続といったことが求められるようになり、システムの規模も大きく、高性能になっています。
大規模なシステムでもコードの共有や再利用がしやすいオブジェクト指向型言語のC++、機械学習や画像認識といった専用ライブラリが豊富なPythonが使われるようになってきています。
オブジェクト指向とは、例えば人の名前や年齢など同じ役割を持ったモノを一つのかたまりとして扱うことで、コードの共有や再利用がしやすくなるというメリットがあります。
PythonにはAIの開発に必要な数値解析や機械学習のライブラリが豊富で、これらのライブラリを読み込んで使用することで効率的に開発できます。
また、ソースコード管理としてGitやSubversionといったバージョン管理ツールが導入されるようになり、複数名での開発やレビューがしやすい環境へ移行しています。

まとめ

組み込みシステム開発はその特性上、ハードウェアとソフトウェアの両方の知識が必要です。近年のAIやIoTの普及にともない、組み込みシステム開発の需要はますます高まっていますので、最新の動向にアンテナを張りながら知識を蓄えていきましょう。

執筆者プロフィール
芦ヶ谷 宏樹
大手メーカーで電気設計エンジニアとして15年従事しながら、電気設計や製造業に関する記事を執筆。身近な存在でありながら実はよく分からない電気について、誰にでも分かりやすい記事を書くよう心がけている。

コラム一覧へ