TOPPERS 活用アイデア・アプリケーション開発
コンテスト

部門

：活用アイデア部門

アプリケーション開発部門

作品のタイトル：

SWORDS プラットフォームの TOPPERS 対応

作成者：

京都大学高木研究室 （代表：畑山拓也・学生）

対象者：

組込みシステム開発者

使用する開発成果物： TOPPERS/FMP カーネル

目的・狙い
近年，CPU と FPGA を搭載したデバイスであるプログラマブル SoC が注目されている．プログラマブル SoC 上のシステムにおいて，リアルタイム OS を利用してソフトウェア（SW）タスクとハードウェア（HW）タスクを管理することでリアルタイム性の確保が容易となる．しかし，プログラマブル SoC 上でのシステム設計にはSW 設計と HW 設計の両方の知識が必要となり困難である．そこでソフトウェア設
計 の 知 識 の み で 設 計 を 行 な う こ と が 出 来 る SWORDS プ ラ ッ ト フ ォ ー ム を
TOPPERS カーネルに対応することでシステム設計を容易にすることができる．

アイデア/アプリケーションの概要
入力として，C 言語で記述されたシステム設計と XML 形式で記述された構成情報を与えることで，システム設計を SW タスクと HW タスクに切り分けて，プログラマブル SoC 上で実行可能なモジュールを生成する．タスクは関数単位とし，HW 化するタスクを構成情報ファイル内に記述する．SW 上に HW タスクのためのラッパーを作成することで，TOPPERS のサービスコールに対応する．

1എ‫ܠ‬ۙ೥ͷ૊ࠐΈγεςϜͰ͸ɼϓϩηοαͱ FPGA Λ 1 νοϓ্ʹࠞࡌ͠ɼϔςϩδχΞεߏ੒ΛऔΔσόΠεͰ͋ΔϓϩάϥϚϒϧ SoC ͕஫໨͞Ε͍ͯΔɽैདྷͷϔςϩδχΞεγεςϜͱ
ൺֱ͢Δͱɼϓϩηοαͱ FPGA ͕ผνοϓʹͳͬͨγεςϜʹରͯ͠͸ϓϩηοα/FPGA ؒͷ௨৴଎౓͕ૣ͍ͱ͍͏ར఺͕‫͛ڍ‬ΒΕΔɽ·ͨɼFPGA ্ͰιϑτίΞͱϋʔυ΢ΣΞΛར༻͢ΔϔςϩδχΞεγεςϜʹରͯ͠͸ɼϓϩηοαͷੑೳ͕ߴ͍ͱ͍͏ར఺͕‫͛ڍ‬ΒΕΔɽϓϩάϥϚϒϧ SoC Λ༻͍ͨγεςϜͰ͸ɼෛՙ͕େ͖͍ॲཧ͸ FPGA ্ͷϋʔυ΢ΣΞʢHW) Ͱ࣮ߦ͠ɼॊೈੑͷ‫ٻ‬ΊΒΕΔॲཧ͸ϓϩηοα্ͷιϑτ΢ΣΞʢSW) Ͱ࣮ߦ͢Δ͜ͱʹΑΓɼγεςϜͷߴੑೳԽͱ௿ফඅΤωϧΪʔԽ͕࣮‫͖Ͱݱ‬Δɽ͞Βʹɼ͜ͷ HW λεΫͱ SW λεΫͷ྆ํΛ‫ؚ‬ΉγεςϜશମͷ؅ཧΛΛ RTOS ʹΑͬͯߦͳ͏͜ͱͰɼϦΞϧλΠϜੑͷ֬อ΍ࢿ‫ݯ‬ͷ؅ཧ͕༰қͱͳΔɽ͔͠͠ɼϓϩηοαͱ FPGA ͷͦΕͧΕͷར఺Λे෼ʹ‫͢༻׆‬ΔͨΊʹ͸ɼSW ։ൃͷ஌ࣝͱ

HW ։ൃͷ஌ࣝͷ૒ํ͕ඞཁͱͳΔɽ͞ΒʹɼSW ͱ HW ؒͰλεΫ‫ͼݺ‬ग़͠ͳͲͷ௨৴Λߦͳ͏ͨΊʹ͸ɼઐ༻ͷ௨৴ΠϯλϑΣʔεʹ͍ͭͯͷ஌͕ࣝඞཁͱͳΔɽ͜ͷͨΊɼSW ͱ HW ͷ‫ڠ‬ௐઃ‫ܭ‬Λ࣮‫͢ݱ‬Δ͜ͱ͸೉қ౓͕ߴ͍΋ͷͱͳ͍ͬͯΔɽզʑ͸ɼϓϩάϥϚϒϧ SoC ͷͨΊͷ SW ࢤ޲ͷγεςϜઃ‫͋Ͱڥ؀ܭ‬ΔɼSWORDS(SoftWare
ORiented Design and Synthesis) ϓϥοτϑΥʔϜΛ։ൃதͰ͋ΔɽSWORDS ϓϥοτϑΥʔϜʹΑΓɼઃ‫ऀܭ‬͸ HW ͷ஌ࣝΛඞཁͱͤͣʹϓϩάϥϚϒϧ SoC Λ‫͢༻׆‬ΔγεςϜΛઃ‫͢ܭ‬Δ͜ͱ͕ՄೳͱͳΔɽຊߘͰ͸ɼSWORDS ϓϥοτϑΥʔϜΛ TOPPERS ʹରԠ͢ΔΞΠσΞΛ‫ݕ‬౼͢ΔɽSWORDSϓϥοτϑΥʔϜΛ TOPPERS ʹରԠ͢Δ͜ͱͰɼTOPPERS Λར༻͢Δ‫ط‬ଘͷγεςϜͷҰ෦Λ HW Խ͢Δ͜ͱ͕ग़དྷΔΑ͏ʹͳΓɼߴੑೳԽ΍௿ফඅΤωϧΪʔԽͷԸ‫ࠐݟ͕ܙ‬ΊΔɽ‫ࡏݱ‬ɼ

SWORDS ϓϥοτϑΥʔϜ͸ϓϩάϥϚϒϧ SoC ͱͯ͠ Zynq Λର৅ͱ͓ͯ͠ΓɼZedboard ରԠͷύοέʔδ͕ଘࡏ͢Δ͜ͱ͔Β TOPPERS/FMP ΧʔωϧʹରԠ͢Δɽ2༧උධՁ·ͣ͸ΞΠσΟΞͰ͋Δ SWORDS ϓϥοτϑΥʔϜͷ TOPPERS ରԠͷ༗ޮੑΛ֬ೝ͢ΔͨΊɼZynq Λ౥ࡌͨ͠ධՁϘʔυͰ͋Δ Zedboard Λ༻͍ͯ༧උධՁΛߦͳͬͨɽઃ‫ܭ‬ର৅ͱͯ͠ɼߴҐ߹੒༻ϕϯνϚʔΫͰ͋Δ CHStoneʢhttp://www.ertl.jp/chstone/ʣΑΓ SHA Λ༻͍ͨɽSHAͷϝΠϯॲཧΛɼ༩͑ΒΕͨೖྗίϚϯυʹԠͯ͡ SW λεΫ΋͘͠͸ HW λεΫͰ࣮ߦ͢ΔγεςϜΛ SWORDS Λར༻ͯ͠ઃ‫ͨ͠ܭ‬ɽ͜ͷγεςϜΛ༻͍ͯɼSW λεΫͱ HW λεΫͦΕͧΕͷ࣮ߦ࣌ؒΛଌఆͨ͠ʢਤ 1)ɽද 1 ʹ SW λεΫͱ HW λεΫͦΕͧΕͷ࣮ߦ࣌ؒΛ 10 ճଌఆͨ࣌͠ͷฏ‫ۉ‬஋Λࣔ͢ɽද 1 ΑΓɼλεΫΛ HW Խ͢Δ͜ͱʹΑΓ࣮ߦ࣌ؒΛ୹ॖͰ͖Δ͜ͱ͕֬ೝͰ͖ͨɽ
͕ͨͬͯ͠ɼSWORDS ϓϥοτϑΥʔϜΛར༻ͯ͠ɼSW λεΫΛ HW λεΫԽ͢Δ͜ͱͰγεςϜͷߴੑೳԽ͕ߦ͑Δ͜ͱ͕֬ೝͰ͖ͨɽ͔͠͠ɼ‫ ࡏݱ‬HW λεΫԽ͸ख࡞‫͓ͯͬͳߦͰۀ‬Γɼ͜ͷ࡞‫ۀ‬ΛࣗಈԽ͢Δ͜ͱ͕ຊΞΠσΞͷ໨తͰ͋Δɽ1ਤ 1: ༧උධՁΠϝʔδද 1: ࣮ߦ࣌ؒSW λεΫ 3.996 [ms]HW λεΫ

30.423 [ms]SWORD ϓϥοτϑΥʔϜ
ਤ 2 ʹ SWORDS ϓϥοτϑΥʔϜΛࣔ͢ɽSWORDS Ͱ͸ɼXML ‫هͰࣜܗ‬ड़͞Εͨߏ੒৘ใϑΝΠϧͱ C ‫هͰޠݴ‬ड़͞ΕͨγεςϜઃ‫ܭ‬ϑΝΠϧΛೖྗͱ͠ɼHW Ϟδϡʔϧͱ SW ࣮ߦϑΝΠϧΛग़ྗͱ͢Δɽߏ੒৘ใͷ XML ͷߏ଄Λਤ 3 ʹࣔ͢ɽਤʹࣔ͢Α͏ʹɼߏ੒৘ใϑΝΠϧʹ͸ɼσόΠεͷ৘ใ΍ SW ͱ HW ͦΕͧΕͰ࣮ߦ͢ΔλεΫͱ͍ͬͨ৘ใΛ‫ه‬ड़͢Δɽͭ·Γɼ͜ͷ XML Λॻ͖‫͑׵‬Δ͚ͩͰγεςϜͷ SW/HW ߏ੒Λมߋ͢Δ͜ͱ͕ՄೳͱͳΔɽ·ͨɼ͜͜Ͱ͸λεΫ͸ؔ਺୯ҐͰࢦఆ͢Δɽ‫ ࡏݱ‬SWORDS Ͱ͸ϓϩάϥϚϒϧ SoC ͱͯ͠ Zynq Λର৅ͱ͍ͯ͠Δɽ

SWORDS ϓϥοτϑΥʔϜͷϫʔΫϑϩʔΛઆ໌͢Δɽ• ɹλεΫղੳߏ੒৘ใʹ‫͖ͮج‬ೖྗͷ C ιʔεϑΝΠϧΛղੳ͠ɼSW λεΫͱ HW λεΫʹ෼ׂ͢Δɽ͞ΒʹɼSW ͱ HW ؒͷΠϯλϑΣʔεੜ੒ͷͨΊͷ৘ใΛੜ੒͢Δɽ• ɹλεΫɾΠϯλϑΣʔε߹੒HW λεΫͱΠϯλϑΣʔεͷ߹੒Λߦ͏ɽHW λεΫͷੜ੒ʹ͸ɼSW ͔Β HDL Λ߹੒͢Δٕ
2

HWタスクIF情報高 HWタスク
位合成タス
ク解析
IF情報・切り分 SWタスク
IFけ生
成SWORDS

構成情報
XML

設計記述
CSWタスク論理合
成HWモジュール

コン
パイル

SW実行
ファイル

ਤ 2: SWORDS ϓϥοτϑΥʔϜ!"#$%&!'()*"(&!$/9(&!#+&!"#7(&!+,-./+0&1!$/9(&!>?:&!:;.<=(&3!=#7.&!2,-./+0&3!$/9(&!#45-%6$"&!:;.<=(&!$/9(&!/7869($.&3!:;.<=(&ਤ 3: ߏ੒৘ใज़Ͱ͋ΔߴҐ߹੒Λར༻͢ΔɽλεΫղੳ࣌ʹੜ੒͞Εͨ SW λεΫʹ͸ΠϯλϑΣʔεʹؔ͢Δ৘ใΛ௥Ճ͢ΔɽHW ʹؔ͢ΔΠϯλϑΣʔε৘ใ͸ HDL ‫ه‬ड़ʹ‫·ؚ‬ΕΔɽ• ɹ࣮ߦՄೳϞδϡʔϧੜ੒λʔήοτͱ͢ΔϓϩάϥϚϒϧ SoC ্Ͱ࣮ߦՄೳͳϞδϡʔϧΛੜ੒͢Δɽ

4TOPPERS ରԠ
SWORDS Λ TOPPERS ʹରԠ͢ΔͨΊʹ͸ɼTOPPERS ͷαʔϏείʔϧ͕ຊདྷ࣮‫͢ݱ‬Δಈ࡞ʹԠͯ͡ HW λεΫͷಈ࡞Λ੍‫͢ޚ‬Δ͜ͱ͕ඞཁʹͳΔɽ͜ͷͨΊʹɼຊΞΠσΞͰ͸ɼϓϩηοα্ͷ SW ͱͯ͠ HW λεΫͷͨΊͷϥούʔΛੜ੒͢Δख๏ΛఏҊ͢ΔɽSW ͷϥούʔ͸ɼSWORDS ϓϥοτϑΥʔϜʹΑͬͯࣗಈੜ੒͞ΕΔ͜ͱΛ‫ݕ‬౼͍ͯ͠ΔɽϥούʔΛ༻ҙ͢Δ͜ͱʹΑΓɼTOPPERS Χʔωϧ͸ FPGA ্ͷ HW λεΫΛ௨ৗͷλεΫͱ౳Ձʹѻ͑Δɽ͞ΒʹɼηϚϑΥ౳ͷΧʔωϧࢿ‫ݯ‬ͷૢ࡞΋ಉ༷ʹѻ͑ΔΑ͏ʹͳΔͱߟ͑ΒΕΔɽ

SWORDS ϓϥοτϑΥʔϜʹΑΓϥούʔΛੜ੒͢Δར఺͸ɼҎԼͷ௨ΓͰ͋Δɽ• TOPPRES Λར༻ͨ͠‫ط‬ଘͷγεςϜͷιʔείʔυΛͦͷ··‫͖Ͱ༻׆‬Δ3• ΧʔωϧͷιʔεࣗମʹखΛՃ͑Δඞཁ͕ͳ͍
SWORDS Λ༻͍ͯ TOPPERS/FMP Λ‫ؚ‬ΉγεςϜΛ Zynq ্ʹ࣮૷͢ΔΞΠσΞਤΛਤ 4 ʹࣔ͢ɽਤʹࣔ͢Α͏ʹɼHW λεΫͷ࣮ߦ͸ SW ্ʹ࣮૷͞ΕͨϥούʔΛհ࣮ͯ͠ߦ͞ΕΔɽ͜ΕʹΑΓɼTOPPERS/FMP ͔Β‫ݟ‬Δͱ HW λεΫΛ SW λεΫͱͯ͠ѻ͏͜ͱ͕ग़དྷΔͨΊɼ

act tsk ౳ͷαʔϏείʔϧ͸ SW ্ͷϥούʔΛର৅ͱ࣮ͯ͠ߦͰ͖ɼcfg ϑΝΠϧΛ‫ؚ‬ΉιʔεϑΝΠϧͷେ෯ͳमਖ਼͸ෆཁͱͳΔɽ͔͠͠ɼ‫ࡏݱ‬͸ SW λεΫΛ HW λεΫԽ͢Δ࡞‫ۀ‬ͷࣗಈԽ͕ग़དྷ͓ͯΒͣɼηϚϑΥ΍ϝʔϧϘοΫε౳ͷ OS ࢿ‫ݯ‬ͷ‫༻׆‬΋Ͱ͖͍ͯͳ͍ɽ·ͨɼෳ਺ͷ HW λεΫؒͰ௨৴Λߦ͏৔߹ɼఏҊख๏Ͱ͸Ұ౓ SW Λ‫ܦ‬༝͢ΔͨΊΦʔόʔϔου͕େ͖͘ͳΔͱ͍͏໰୊͕͋Δɽ͜ͷ໰୊ʹରॲ͢ΔͨΊʹɼHW λεΫؒͰͷ௨৴Λߦͳ͏͜ͱ΋‫ݕ‬౼தͰ͋Δɽ·ͨɼηϚϑΥͳͲͷ OSࢿ‫͍ͯͭʹݯ‬ɼSW ্͚ͩͰͳ͘ HW ্ʹੜ੒ͯ͠ར༻͢Δ͜ͱ΋‫ݕ‬౼தͰ͋Δɽ͜ͷͨΊʹ͸ɼ

TOPPERS ΧʔωϧࣗମʹखΛՃ͑Δඞཁ͕͋Δͱߟ͑ΒΕΔɽZynq
HWタスクを
実行

ARM

FPGA

TOPPERS/FMP

wrapper

バス

HW
タスク

SW
タスク
SWタスクを実行ਤ 4: TOPPERS/FMP Λ‫ؚ‬ΉγεςϜ4