• 検索結果がありません。

XMOS プログラミング入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

N/A
N/A
Protected

Academic year: 2021

シェア "XMOS プログラミング入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです."

Copied!
20
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

「XMOS プログラミング入門」

サンプルページ

この本の定価・判型などは,以下の URL からご覧いただけます.

http://www.morikita.co.jp/books/mid/085251

(3)
(4)

まえがき

 マイクロプロセッサが世に出てから久しく,かれこれ 40 年近くになる.当時のプ ロセッサは,現在のパソコンに搭載されているものと比較すると桁違いに小規模であ り,かつ処理スピードも比較にならないほど遅かった.しかし,どこか新鮮で光り輝 いていたように思う.筆者も初めてマイコンのプログラムを作成し,おそるおそる実 行キーを押した途端,LED が見事に点滅したときの感動をいまでも思い起こすこと がある.  この間を振り返ると,プロセッサの高速化と高密度化とともに,組込みシステムの 設計・開発方法も大きく変貌した.当初の手作業で作成した複雑で面倒なコードは,コ ンパイラやリアルタイム OS に任せて高級言語で記述する方式へと大きく舵を切った.  以来,組込みソフトウェア開発では,リアルタイム性を実現するための割り込みや スケジューリングといった組込み OS 特有の処理が常につきまとい,組込みプログラ マをおおいに悩ませることになった.最近では,さらに処理能力を高めるためにマル チコア化したプロセッサが出現し,安全なプログラムの開発を一段と難しくしている.  ここで紹介する XMOS プロセッサも,32 ビットのマルチコアプロセッサである. ただし,これまでのプロセッサと違い,XMOS プロセッサには割り込みやスケジュー リングの概念がない.また,リアルタイム OS も必要としない.その理由は,XMOS プロセッサのコアがイベント駆動型のマルチコアであり,複数のイベントを複数のコ アで同時に処理してしまうからである.さらに,コア間の同期や情報交換は,チャネ ル通信により自動的に行われる.そのため,プログラマは割り込み処理やスケジュー リングなどのような悩ましいプログラミングから解放され,「思ったとおり,考えた とおり」にプログラムを記述することができる.事実,筆者は XMOS プロセッサを 用いて割り込み処理のない,見通しのよいプログラムを知ったとき,マイクロプロセッ サが初めて世に出現したときと同じような感覚に襲われた.  このような従来のプロセッサと異なる動作原理の XMOS プロセッサは,下記のよ うな多くのメリットを生み出す.  ・リアルタイム OS を必要としないので,設計開発の過程が簡素化される  ・応答が速く,FPGA や ASIC の領域にも利用できる  ・安全なプログラム開発ができる  ・柔軟性や拡張性に富む  ・システム開発の期間が大幅に短縮される  ・開発コストが激減する

(5)

ii  まえがき

 いずれのメリットも,今後の組込みシステムのあり方を示唆するように思われる.  本書は,このようなイベント駆動型プロセッサである XMOS のプログラミングに すぐに取り組めるように構成されており,組込み技術者向けの解説書としてはもちろ んのこと,次世代を担う大学・高専の実習用の教科書としても利用できる.

 まず,前半の Chapter 1 と Chapter 2 で,XMOS プロセッサの基本的な構成やプ ログラムの設計図に相当するデータフローダイアグラムを概説したのち,Chapter 3 で XMOS の開発環境を事例とともに紹介する.そして,Chapter 4 では,XMOS 特 有のプログラムを厳選して平易に紹介する.言語には一般的な C 言語を拡張した XC 言語を用いるので,ほとんど違和感はない.本書では,評価ボードとして,シンプル な(株)北斗電子製の XMOS 学習キットを使用している.前半だけでも「思ったと おり,考えたとおり」にプログラムが記述できることを体感できるであろう.なお, この XMOS 学習キットに関する URL 情報などは,巻末の「参考文献など」に一括 記載している.  後半では,具体的な外部信号の入出力やリアルタイム性の確保を事例とともに紹介 する.評価ボードは Chapter 4 と同様に,(株)北斗電子製の XMOS 学習キットを 用いているが,ほかの評価ボードでも同様の実験が可能な事例をとりあげている.い ずれの事例も目的を見失わないように,できるだけシンプルなテーマを選定している. たとえば,「Example A パルスの発生とパルスカウンタ」のように,ジャンパ線 1 本 のシンプルな事例に XMOS プロセッサの凄さが凝縮されている.  全事例に共通していることは,インターフェース回路をほとんど必要とせず,簡単 に実験ができることである.これは,ほかの一般的なプロセッサにはない特長であり, XMOSプロセッサがイベント駆動型のプロセッサであることの証でもある.  XMOS プログラミングは,従来の定番である割り込み処理,スケジューリングあ るいはリアルタイム OS などとは無縁で簡単明瞭であるといわれても,なかなか納得 できないかもしれない,しかし,ぜひ XMOS プロセッサのプログラムを 1 行でも 2 行でもよいから実際に実行して,イベント駆動を体感してほしい.きっと,カルチャー ショックを受けるに違いない.そして,これを機会に組込み技術者は原点に帰って, 組込みプロセッサのあり方をいま一度考えてほしい.筆者の胸中は,「XMOS を語ら ずして組込みを語るべからず」である.  2014 年 2 月 中原博史 

(6)

Contents

Chapter 1 XMOS プロセッサ

1 

1.1 デバイスの構成単位 − xCORE Tile −  1 1.2 イベント駆動型マルチコア − xCORE −  3 1.3 リンクによる通信と同期 − xCONNECT −  5 1.4 割り込み処理とイベント駆動  8 1.5 開発言語  10 1.6 開発環境  12

Chapter 2 XMOS プログラミングとデータフローダイアグラム 15 

2.1 データフローダイアグラム  15 2.2 CSP モデルの基本  16 2.3 プロセス表記の拡張  16 2.4 拡張プロセス表記の例  18

Chapter 3 統合開発環境のインストールとその基本操作

21 

3.1 統合開発環境のインストール  21 3.2 XN ファイルの準備  23 3.3 テストプログラムの作成とコンパイル  24 3.4 XMOS ボードの接続  28 3.5 プログラムの実行  28 3.6 フラッシュメモリへの書き込み  31 3.7 フラッシュメモリからのブート  33

Chapter 4 XMOS プログラミングの基本

35 

4.1 最初のプログラム  35 4.2 並列プログラミングの基本  37 4.3 ボタンスイッチの状態取得  41 4.4 チャネルの取扱い  43 4.5 サンプリング  52 4.6 ゲート  54 4.7 タイムアウト  56

(7)

iv  Contents 4.8 ガード  59 4.9 ボタンスイッチのイベント処理  62

XMOS プロセッサの応用事例

Example A パルスの発生とパルスカウンタ

73 

A.1 PulseGen プロセス  74 A.2 PulseCounter プロセス  75 A.3 StartButton プロセス  76 A.4 メインプログラムと動作原理  77

Example B UART によるシリアル通信

79 

B.1 Send_UART プロセス  80 B.2 Read_UART プロセス  81

Example C 模型用 RC サーボモータの駆動

85 

C.1 模型用 RC サーボモータの特徴  85 C.2 プロセスの設計  86 C.3 ServoPulseGen プロセス  87 C.4 ServoPos プロセス  88 C.5 メインプログラム  89 C.6 実際の動作  90

Example D インクリメンタル型ロータリエンコーダ

91 

D.1 ロータリエンコーダと XMOS プロセッサ  91 D.2 全体のプログラム構成  92 D.3 RotaryInc プロセス  93 D.4 ServoPos2 プロセス  94 D.5 メインプログラム  95

Example E アブソリュート型ロータリエンコーダ

97 

E.1 アブソリュート型ロータリエンコーダの特徴  97 E.2 全体のプログラム構成  98 E.3 RotaryAbs プロセス  98

(8)

E.4 ServoPos3 プロセス  99 E.5 メインプログラム  100

Example F AD コンバータと傾斜センサ

103 

F.1 SPI 内蔵 AD コンバータと XMOS チップの接続  103 F.2 タイミングシーケンス  104 F.3 インターフェースプログラム  104 F.4 傾斜センサのデータ取得  106

Example G XMOS チップと Windows PC を結ぶ

      RS232 チャネル

109 

G.1 ハードウェアとシステムの全体構成  109 G.2 RS232_ChannelEnd クラス  111 G.3 RS232_X32 プロセス  114 G.4 RS232 チャネルの利用  115

Example H リンク接続によるマルチタイルシステム

121 

H.1 XTAG2 拡張ボードの設定  122 H.2 学習ボードの準備  123 H.3 リンクケーブルの作成  123 H.4 XMOS ボードの設定  124 H.5 システム構成と XN ファイル  125 H.6 サンプルプログラム  126 H.7 外部電源による起動  128 H.8 XTAG2 拡張ボードの増設  129 H.9 リンクスピードの設定  129

Appendix XMOS 学習キットの構成

133 

1. 基本構成  133 2. 学習ボードのレイアウト  134

参考文献など

139 

索 引

141 

(9)
(10)

Chapter

1

XMOS プロセッサ

 XMOS プロセッサは,「使いやすい」,「応答が早い」,「汎用性・柔軟性 に富む」,「組込みに最適」,「リアルタイム性が確保される」などの多く の特長をもつ.これらの特長がどのようにして生まれるのか,その機能 的な側面に注目して解説しよう.

1.1

 デバイスの構成単位 ― xCORE Tile ―

 XMOS プロセッサは,近年開発された新しいタイプのマルチコアのマイクロコン トローラである.組込み用途に特化されたプロセッサであり,従来のプロセッサと比 較して多くの特長をもつが,もっとも重要な特長として以下の 5 点を挙げることがで きる.  ①リアルタイム OS を必要としないシンプルな設計開発  ②イベント駆動による速い応答  ③チャネル通信による安全なプログラム開発  ④ソフトウェアによる柔軟なインターフェース  ⑤リンクによる容易な拡張  これらの特長は,XMOS プロセッサの基本的なアーキテクチャから生まれるもの であり,特に,コアの構成とその動作原理,およびコア間の通信機能に依存する.そ のユニークなコアは xCORE とよばれ,複数の論理コアから構成されている.そして 各論理コアは,xCONNECT とよばれる通信機能により相互に接続されている.各論 理コアは,1.2 節で詳しく解説するように,必要なときにのみに起動するイベント駆 動型であり,通信しながら同期して並列動作できる.しかも,各論理コアの起動/停 止はハードウェアで瞬時に切り替えられるのできわめて高速である(これらの動作は, 1.3節,1.4 節で詳しく解説する).  たとえば汎用的な L シリーズの XS1-L8 デバイスのコアは,図 1.1 に示すように, 8個の論理コア(Logical Core)から構成されている.このコアにメモリや通信機能(図 中の xCONNECT)あるいは I/O ポートなどを付加した“xCORE Tile”が,XMOS デバイスの基本的な構成単位になっている.そして,このタイルどうしはその通信機 能により相互に接続することができ,必要に応じてコア数を増大したデバイスやシス テムを容易に実現できるように構成されている.

(11)

2  Chapter 1 XMOS プロセッサ 図 1.1 xCORE Tile  現在,処理能力に応じて,論理コア数が,4,6,8,10,12,16 の各デバイスが供 給されているが,これらの異なるデバイス上の任意のコア間でも,同じタイル上の場 合と同様に通信することが可能であり,非常に拡張性に富んだプロセッサとなってい る.  この L シリーズのほかに,AD コンバータ部を付加した A シリーズや,USB2.0 PHYを搭載した U シリーズがある.図 1.2 は,2 タイルで構成されている 8 論理コ アの A シリーズの例(XS1-A8)である.図 1.3 は U シリーズの 12 論理コアの例 (XS1-U12)であり,3 タイルで構成されている.各シリーズとも,処理能力に応じ て論理コア数を選択できるように複数のバリエーションがある. 図 1.2 XS1-A8 デバイス

(12)

図 1.3 XS1-U12 デバイス  以下では,この xCORE アーキテクチャを,もっとも基本的な 1 タイル構成の汎用 デバイス XS1-L8 を例に解説しよう.

1.2

 イベント駆動型マルチコア ― xCORE ―

 汎用デバイス XS1-L8 では,コアのクロック周波数が 400 MHz と 500 MHz の 2 種類のデバイスが供給されている.図 1.1 に示すように,コアを構成する 8 個の論理 コアは,すべて同じ 32 ビット RISC タイプである.メモリは 1 タイル当たり 64 KB の RAM が搭載され,各論理コアに共有されている.同様に,I/O ポートも各論理コ アに共有され,どの論理コアからも任意の I/O ポートにアクセスできる.  各論理コアは,最低でも論理コア数で時分割されたクロックで動作することが保証

(13)

4  Chapter 1 XMOS プロセッサ されている.したがって,通常の利用状況では,たとえばクロック周波数が 400 MHzのデバイスでは,クロック周波数が 50 MHz のプロセッサが 8 個搭載されてい ると考えて差し支えない.もし,利用するコア数が少ない場合は,クロックを有効に 分配することにより論理コアのクロックが上がる.たとえば,500 MHz のデバイス で 4 個の論理コアのみを使用した場合,論理コア 1 個当たり 125 MIPS の処理能力 を発揮する.全体では,125 MIPS × 4 = 500 MIPS になる. I/O ポートの役目  各論理コアが I/O ポートをアクセスする場合,I/O ポートを最小時間 10 ns 単位 で操作できる.XMOS プロセッサの主な役目は,この I/O ポートを各論理コアで操 作して,任意の動作をする IC チップを実現することである.この発想が,一般的な プロセッサと大きく異なる点である.ほかの一般的なプロセッサでは,アドレスバス とデータバスを介してメモリ間でデータをやりとりしながら数値を求めるのに対して, XMOSプロセッサは,I/O ピンの応答を求めることに特化している.事実,図 1.1 に示される xCORE Tile には,専用のアドレスバスやデータバスが存在しない. I/O ポートイベントの入力待ち  さらに,各論理コアは,I/O ポートのイベントを入力待ちできる.すなわち,I/O ポー トピンのハイレベルからローレベルへの遷移,あるいはローレベルからハイレベルへ の遷移が発生するまでプログラムの進行を停止できる.そして,遷移が発生したらコ アが自動的に動作状態になり,プログラムを進行させることができる.このように xCORE は,I/O ポートの変化すなわちプロセッサ外部の信号で直接駆動することが できるイベント駆動型マルチコアである.これらの動作はハードウェアで実現されて おり,一般的なプロセッサに見られるような RTOS を利用した割り込み処理とは異 なり,非常に高速である.各論理コアの処理の大きな流れは,入力ポートピンのイベ ントに対応した処理を論理コアで実行し,所定の出力ポートピンを 10 ns 単位の精度 で操作することになる.つまり,任意に応答する IC をイベント駆動型のマルチコア のプログラムで実現することになる.この点を強調して,XMOS プロセッサは, “software defined silicon”ともよばれている.このように XMOS プロセッサは,組 込み用途に特化したプロセッサであり,FPGA や ASIC に置き換わって利用される ことが期待される.

(14)

 Chapter 4 では,実際の外部信号を取り扱わずに,主に XMOS プロ セッサを利用するための基本的なアーキテクチャやプログラミングモ デルを中心に解説した.ここからは,実際に学習ボードのプロトタイ プ領域に簡単な実験回路を作成し,これらの回路とのインターフェー スの取り方や信号の取扱いを学ぶ.おそらく,XMOS プロセッサのシ ンプルな設計思想や自由度の高い実装能力を実感できることと思う.

XMOS プロセッサの

応用事例

Examples

パルスの発生とパルスカウンタ

UART によるシリアル通信

模型用 RC サーボモータの駆動

インクリメンタル型ロータリエンコーダ

アブソリュート型ロータリエンコーダ

AD コンバータと傾斜センサ

XMOS チップと Windows PC を結ぶ

RS232 チャネル

リンク接続によるマルチタイルシステム

A

B

C

D

E

F

G

H

(15)
(16)

Example

A

パルスの発生とパルスカウンタ

 ここでは,I/O ポートの利用法,プロセスのつくり方,プログラムと DFD の関係 およびプログラムの動作原理などを学ぶ.この事例に,XMOS プロセッサの多くの 基本的な事項が含まれている.  プログラムは,図 A.1 の DFD に示すように,パルスを発生させるPulseGen プ ロセス,パルス数をカウントするPulseCounter プロセス,開始ボタンスイッチの 信号を検知するStartButton プロセスから成る.これらのプロセスは XMOS プロ セッサの各論理コアに配置され,ソフトウェアでありながら通常のハードウェアのよ うにはたらく.すなわち,PulseGen プロセスは,実際に I/O ポートピンからパル ス信号を出力するので,あたかもパルス発生回路のように,また,PulseCounter プロセスは,エッジトリガで駆動するパルスカウンタ IC のように動作する.  図 A.2 のように,PulseGen プロセスの出力ポートピンは,PulseCounter プロ セスの入力ポートピンとジャンパ線で実際に接続されている.また,図 A.3 は,各 プロセスのつながりを変えずに,XMOS チップ上に実体配線図のように書き換えた 図である.この図からは,XMOS チップがあたかも FPGA であるかのように見える が,FPGA の場合はこれらのプロセスの機能をハードウェアで実現するのに対して, XMOSチップの場合はソフトウェアで実現する点が大きく異なる. 図 A.1 PulseCounter の DFD

(17)

74  Example A パルスの発生とパルスカウンタ 図 A.2 ジャンパ線による接続 図 A.3 XMOS チップ上に配置したイメージ

A.1

 PulseGen プロセス

 リスト A.1 にPulseGen プロセスのプログラムを示す.まず,リスト中の①で開 始時刻を取得している.そして②では,出力ポートを“1”(High)の状態に設定し, ③と④で 50 単位時間待つ.1 単位時間は 10 ns である.したがって,High の状態が 500 ns維持される.500 ns 経過すると,⑤により“0”(Low)の状態に設定され, Lowの状態も同様に,⑥と⑦により 500 ns 維持される.以下,while ループで繰り 返すので,出力ポートからは 1 MHz のパルス信号が出力される.このように,ソフ トウェアで 1 MHz の周波数を制御できることには驚かされる.実際にプログラムを 実行する場合は,図 A.2 のように,この出力ポートピンとPulseCounter プロセス の入力ポートピンを,学習ボード上でジャンパ線で接続する.

(18)

リスト A.1 PulseGen プロセス

void PulseGen(out port outP){ timer tmr; unsigned time;

tmr :> time; // ① 開始時刻の取得 while(1){

outP <: 0xf; // ② 出力ポートを“1”の状態に設定

time += 50; // ③ 50 × 10 ns = 500 ns tmr when timerafter(time) :> void; // ④

outP <: 0x0; // ⑤

time += 50; // ⑥ 50 × 10 ns = 500 ns tmr when timerafter(time) :> void; // ⑦

} }

A.2

 PulseCounter プロセス

 リスト A.2 は,PulseCounter プロセスのプログラムである.PulseCounter プ ロセスは,最初に①でStartButton プロセスから開始の合図を待つ.ボタンスイッ チが押されて開始の合図が到着すると,②により現在時刻を取得した後,③の while ループで入力ポートピンの状態変化を検知する.入力ポートピンの状態(電圧) が変化した場合は④により検知され,old_P の値は⑤のように新しい状態に更新さ れる.したがって,⑥のカウント値は,High から Low の状態変化と,Low から Highへの状態変化の両方がカウントされるので,周波数の倍の値になる.指定され た計測時間に達した場合は,⑦が選択されるので変数going が 0 に設定され, while ループが終了する.そして,⑧で計測したパルス数(周波数)を StartButton プロセスにチャネル経由で返している.XC 言語のチャネルは,この例のように双方 向(半二重)に通信ができるので,プログラムが簡潔になる. リスト A.2 PulseCounter プロセス

void PulseCounter(chanend St, unsigned MTime_ms, in port inP){ timer tmr; int stcmd;

unsigned going, mt, now; unsigned old_P, new_P, count;

count=0; mt=MTime_ms*100000; old_P=0xf; going=1; while(1){ St :> stcmd; // ① プロセスから開始の合図を待つ count=0; going=1; tmr :> now; // ② 現在時刻の取得 while(going){ // ③ select{

(19)

76  Example A パルスの発生とパルスカウンタ

old_P=new_P; // ⑤ count=count+1;

// ⑥ 立ち上がりと立ち下がりをカウント break;

case tmr when timerafter(now+mt) :> void: // ⑦ going = 0; break; } } St <: count/2; // ⑧ 周波数に換算 } }

A.3

 StartButton プロセス

 次に,開始信号を発信するStartButton プロセスのプログラムをリスト A.3 に 示す.まず最初に,①のように開始ボタンスイッチのクリックを促すメッセージをコ ンソールに表示させ,次の②でボタンスイッチがクリックされるのを待つ.クリック イベントが発生するまで,プログラムの進行はここでブロックされる.なお,②の WaitForClick() などのボタンスイッチのイベント処理は,「4.9 ボタンスイッチ のイベント処理」で詳しく解説している.ボタンスイッチがクリックされた場合,③ および④に示すように LED を点灯させ,開始の合図をチャネルを介してPulse− Counter プロセスへ送信している.開始の合図を受信した PulseCounter プロセ スは,パルス数を 1 秒間カウントし,その値を同じチャネルに返しているので,⑤の ように結果の値が送られてくるまでここで待ち受ける.チャネルから受信した値は, ⑥のようにコンソールに表示される. リスト A.3 StartButton プロセス

void StartButton(chanend St, out port LED, in port Button_A){ int CountData=0;

int cmd=0; while(1){

printstrln("Please click SW1 to start !!"); // ① WaitForClick(Button_A, 200); // ② flash(LED, 0xf); // ③ St <: cmd; // ④ 測定開始の合図 St :> CountData; // ⑤ 結果の取得 printstrln("Finish"); printstr("Count Data = "); printintln(CountData); // ⑥ printstrln(""); } }

(20)

 XMOSプログラミング入門 © 中原博史 2014   2014 年 4 月 10 日 第 1 版第 1 刷発行 【本書の無断転載を禁ず】   著  者 中原博史  発 行 者 森北博巳  発 行 所 森北出版株式会社       東京都千代田区富士見 1-4-11(〒 102-0071)       電話 03-3265-8341/FAX 03-3264-8709       http://www.morikita.co.jp/       日本書籍出版協会・自然科学書協会 会員           <(社)出版者著作権管理機構 委託出版物> 落丁・乱丁本はお取替えいたします. Printed in Japan/ISBN978-4-627-85251-8   1974 年 北海道大学工学部精密工学科 卒業   1976 年 北海道大学大学院工学研究科情報工学専攻修士課程 修了   1976 年 松下電器産業(株)(現 パナソニック(株)) 入社   1986 年 北海道職業訓練短期大学校(現 北海道職業能力開発大学校)勤務   2013 年 北海道職業能力開発大学校電子情報技術科        現在に至る   編集担当 藤原祐介(森北出版)   編集責任 富井 晃(森北出版)   組  版 dignet   印  刷 エーヴィスシステムズ   製  本 協栄製本

図 1.3 XS1-U12 デバイス  以下では,この xCORE アーキテクチャを,もっとも基本的な 1 タイル構成の汎用 デバイス XS1-L8 を例に解説しよう. 1.2 イベント駆動型マルチコア ― xCORE ―  汎用デバイス XS1-L8 では,コアのクロック周波数が 400 MHz と 500 MHz の 2 種類のデバイスが供給されている.図 1.1 に示すように,コアを構成する 8 個の論理 コアは,すべて同じ 32 ビット RISC タイプである.メモリは 1 タイル当たり 64 KB

参照

関連したドキュメント

VMWare Horizon HTMLAccess はこのままログインす ればご利用いただけます。VMWare Horizon Client はク

仏像に対する知識は、これまでの学校教育では必

Bでは両者はだいたい似ているが、Aではだいぶ違っているのが分かるだろう。写真の度数分布と考え

WAV/AIFF ファイルから BR シリーズのデータへの変換(Import)において、サンプリング周波 数が 44.1kHz 以外の WAV ファイルが選択されました。.

この数字は 2021 年末と比較すると約 40%の減少となっています。しかしひと月当たりの攻撃 件数を見てみると、 2022 年 1 月は 149 件であったのが 2022 年 3

ライセンス管理画面とは、ご契約いただいている内容の確認や変更などの手続きがオンラインでできるシステムです。利用者の

賠償請求が認められている︒ 強姦罪の改正をめぐる状況について顕著な変化はない︒

理系の人の発想はなかなかするどいです。「建築