-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
207 lines (185 loc) · 8.49 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
<HTML>
<HEAD>
<TITLE>micro proceccor</TITLE>
</HEAD>
<BODY BGCOLOR="white" TEXT="black" LINK="#0000FF" VLINK="#00FF00" ALINK="red">
<H1><B>新アーキテクチャ?propeller マイコン</B></H1>
<IMG SRC="main.jpg" ALIGN="top" WIDTH=400 HEIGHT=220>
<BR CLEAR="left">
<H3><B>はじめに</B></H3><BR>
propeller とはPARALLAX 社が開発した32bit マイコンのことです。<BR>
8つの32bitCPU を持ち、他社のマイコンとは大きく構造が異なります。<BR>
つい最近知ったばかりですが勉強のため、この特殊なマイコンを<BR>
わかりやすく解説しようと思います。<BR><BR>
<BR>
<HR SIZE=2 WIDTH=100%>
<BR>
<H2><B>特有の構造・機能</B></H2>
<BR>
<IMG SRC="figure1.jpg" ALIGN="middle" WIDTH=760 HEIGHT=500>
<DIV ALIGN="CENTER">図1・ブロック図</DIV>
<BR><BR>
新手のCPLDの類に見えるかもしれません。あたかもCPLDのマクロセルのように<FONT SIZE="3" COLOR="#FF0000">Cog0からCog7と書かれた
ブロック</FONT>のひとつひとつが実はワンチップマイコンなのです。それぞれのCogには最高20MIPSの32Bitプロセッサと4KbyteのRAM、二つのカウンタ、そしてビデオ信号ジェネレータが付いており、せれらがIOピンやシステムバスを共有する形で接続されています。
<BR><BR><BR>
<BIG><B>各Cogの出力がORされる</B></BIG><BR>
1/Oピンは図1にあるようにCogO~Cog7の出力が
ORされる形になっています.いずれか一つのマイコ
ンが出カモードに指定したピンが出カピンになり,い
ずれか一つが`1'を書いていれば`1'が出力されます。
<BR><BR><BR>
<BIG><B>ラウンド・ロビ</B>ン</BIG><BR>
ー方,メインROM/RAMなどの共有リソース,マ
ニュアルでは mutually―exclusive resources(直訳す
ると相互排他リソース)と呼ばれているものはリング
状の中央にあって,これが各Cogと接続されていま
す.Cogという名称は,何かの略称との断りは出てこ
ないので,おそらく,英語そのままの「歯車」という
意味ではないかと思います。噛み合いながらくるくる
回るというイメージからきているのかもしれません。<BR>
一般的なマルチ・プロセッサの場合,共有リソース
ヘのアクセスはバスヘのアクセス権を調停回路によっ
て制御し,1度に一つのプロセッサだけがバスを利用
します。これに対してPrOpellerの場合には,共有リ
ソースが^定周期で各Cogを巡回するラウンド・ロ
ビン方式を採用しています.PrOpellerという名称は
<FONT COLOR="#FF0000">共有リソースが一定周期で各Cogを
巡回するらラウンド・ロビン方式</FONT>を採用しています。
Propellerという名称もこの巡回動作にちなんだものなのでしよう。
<BR><BR><BR>
<BIG><B>2システム・クロックごとに共有リソースが各Cogを巡回する</B></BIG><BR>
バスのアクセス権移動は2システム・クロックごと
に行われますので,1周するのに16システム・クロッ
クかかります。共有リソースにアクセスしようとした
とき,自分の権利が移動してしまった直後であれば
最長で15クロツク待つことになります。<BR>
<FONT COLOR="#FF0000">スケジューリングは,COgが共有リソースを必要と
するか否かに関係なく行われる</FONT>ため,使用効率の面で
は不利です.しかしハードウェアが単純になることや
他のCogの動作状況によって平均アクセス・タイム
の変動が起きないというのは利点です。
<BR><BR><BR>
<BIG><B>DIPパッケージで最高.. 160 MiPS</B></BIG><BR>
Propellerは44ピンのLQFPパッケージ、
QFNパッケージに加えて40ピンのDIPパッケージもあります。<BR>
1/Oピンの数などは同じなので,DIPパッケージで
もPropelerの全機能を試すことができます.外部か
ら与えるクロックは最高で80 MHzで,各Cog内の
CPUは最大20 MIPSで動作するので,チップ全体で
の処理能力は単純計算で最大160 MIPSとなります。<BR>
もっともこれは計算上の話で,Cogが共有リソース
をアクセスするときにはアクセス権が回ってくるまでウェイトします。
<BR><BR><BR>
<IMG SRC="word.jpg" ALIGN="middle" WIDTH=700 HEIGHT=400>
<DIV ALIGN="CENTER">図2・フォント</DIV>
<BR><BR><BR>
<BIG><B>各Cogがビデオ・コントローラを内蔵する</B></BIG><BR>
ビデオ・ジェネレータ(ビデオ・コントローラ)が内
蔵されているのも,PrOpellerの一風変わったところ
です。ビデオ・コントローラはVGA準拠信号,また
はコンポジット・ビデオ信号を生成します。<BR>
しかも<FONT COLOR="#FF0000">ビデオ・コントローラは共有リソースではな
く, 各Cogが持っています。</FONT>
各Cogがビデオ・コントローラを持っているため
対戦型のゲームのように複数のデイスプレイを利用し
たアプリケーションを作成したり,表示画面と設定画
面を分離するような使い方もできることでしよう。<BR>
また,ビデオ表示機能をサポートするため,共有
ROMには<B>図2</B>に示すキャラクタ・フオント・データ
が入っています。一般的な半角英数字のほかに回路図
用やタイミング図用のシンボルが含まれているのはお
もしろいところです。
<BR><BR>
<IMG SRC="RAMmap.jpg" WIDTH="608" HEIGHT="403"><BR>
<DIV ALIGN="CENTER">図3・RAMマップ</DIV>
<BR><BR><BR>
<BIG><B>プログラムはRAM上で動作する</B></BIG><BR>
<B>図3</B>はPropellerのメイン・メモリ(共有メモリ・マ
ップ)です.Propcller内蔵のROMには,文字フォン
ト・データやSINテーブルやLOGテーブル,ブート
ローダのほか,Propeller専用のアプリケーシヨン
記述言語であるSpin用のインタプリタなどが書き込まれ
ています。フラッシユ・メモリではないので,書きかえは行えません。<BR>
Propellerのアプリケーシヨン・プログラムはホス
PCや外部の12c_EEPROMからメインRAM(共有
RAM)にダウンロードされて動作します。
<BR><BR>
<IMG SRC="CogRAM.jpg" WIDTH="787" HEIGHT="393"><BR>
<DIV ALIGN="CENTER">図4・CogRAMマップ</DIV>
<BIG><B>各Cogが専用に持つCogRAM</B></BIG>
各Cogが持っている512ワード(4Kバイト)の
RAM(CogRAM)の割り当ては<B>図4</B>のようになってい
ます.512ワードのうち最後の16ワードぶんが1/O関係の
レジスタに割り付けられています。<BR>
それ以外の部分は汎用レジスタと名づけられていますが,実態は
RAMそのものです。
<BR><BR><BR>
<HR>
<BR><BR><BR>
<H2><B>Propeller専用プログラミング言語Spinとアッセンブリ言語</B></H2>
Propellerは独立したワンチップ・マイコンによる
マルチ・プロセッサ構造であり,I/OやメインROM/
RAMを共有する構造になっています。プログラミン
グもマルチ・プロセッサ構造に対応したものになります。<BR>
このためPropellerでは<FONT COLOR="#0000FF">Spinという専用言語</FONT>を用意
しています。Spinで書かれたプログラムはバイナリ
形式の中間コードにコンパイルされてSpinインタプリタで実行されます。<BR>
通常,PropellerのアプリケーシヨンはSpinコード
のみ,あるいはSpinコードとアセンブリ言語で記述されます。
Spinコードとアセンブリ言語のソースコ―ドは一つのファイルの中に同時に記述することが
できます。
<BR><BR><BR>
サンプルプログラムを使った用例は<A HREF="example.html" ><B>こちらへ</B></A>
<BR><BR>
<BIG><B>Propellerの特徴・割り込み機能がない</B></BIG><BR>
Propellerには割り込みという考えがありません。
割り込みの考え方は,プログラムの実行中に急ぎの対
応を要する処理が発生した場合に,現在の処理をいっ
たん中断して緊急性の高い処理を先に行うものです。<BR>
Propellerには8個のCog(CPU)があります。それ
ぞれのCogは独立して動作するので,このうちの一
つを緊急性の高い処理に対応させれば,他のCogは元の処理に専念できます。<BR>
なので通常のCPUが一個しかないマイコンと違い、<FONT COLOR="#0000FF">割り込み
を使わなくても作業を分担できる</FONT>のです。通常の割り込み処理中は当然メインの処理は止まっ
てしまいますが,Propellerの場合はメインの処理を
途切れさせることなく他の処理も行えるのです。<BR>
通常はマルチタスク・モニタを利用するなどして時
分割処理をしていた作業も,Propelerならば各Cog
にそれぞれのタスクを割り振るだけで並列に処理でき
るということに気づきます。<BR>
<FONT COLOR="#0000FF">めんどうなタスク・スイ
ッチングの処理やタスクの動作状態管理なども必要な
い</FONT>わけで「時分割」ならぬ「非分割」マルチタスクと
なるわけです。
<BR><BR><BR>
<HR><BR><BR>
<BIG><B>Propellerの開発・評価キット</B></BIG><BR>
Parallax社のサイトには,Propeller用のデモキット
や, Propellerを使った<FONT COLOR="#FF0000">ゲームの
開発セット(HYDRAGame Development Kit)</FONT>などが用意されています。<BR>
Propeller Starter Kit(メーカ型番 :32300)
と,ブレッドボード・ベースの Propeller Education
Kit(メーカ型番:32305)がおすすめです。40ピンの
DIPパッケージ品に実験用の部品セット,ブレッドボ
ードという構成なので,EducationKit相当品を自分
で用意することも難しいことではありません。<FONT SIZE="1"><FONT COLOR="#3366FF">(私は自分で用意しました)</FONT></FONT>
<BR><BR>
<HR>
<H2>まとめ</H2><BR>
私が初めてPropellerマイコンを知ったのは秋月通商です。多々あるマイコンの内の一つで、周りに使っている人が
おらず興味を持っていませんでした。ある時、映像出力機能を内蔵しているということで資料を見た時、あまりのユニーク
さに笑ってしまいました。<BR>
今まではワンチップ・マイコンの表示装置として一
般的に扱えたのはキャラクタ液晶程度で,グラフイ
ク表示は簡単ではありませんでしたが,Propellerを
利用すれば、ほとんど外付け部品を必要とせずVGAやコンポジット・ビデオ出力が行え, さらに複数画面表示
も簡単にできるのです。<BR>
ただ、あまりに独特なアーキテクチャを使用しているため、手に取りずらいと思われますので、さまざまな手段を
用いて紹介することにしました。このページを読んで、是非Propellerで遊んでみてほしいです。
<BR><BR><BR>
<H2><B>おまけ</B></H2><BR>
<IMG SRC="IMG_0033.JPG" WIDTH="50%" HEIGHT="65%">
これは私の飼い猫です。いつもキリッ!っとした顔をしてます。
<BR><BR>
</BODY>
</HTML>