Propeller始めました(6) 演算用レジスタが存在しない
Propeller のデータシートを読んでいて演算用レジスタが無いことに衝撃を受けました。
8コアのそれぞれにあるRAM(2kバイト)領域において、
mov アドレス1, アドレス2
add アドレス1, 5
・・・・
といった具合に、レジスタを介さずに領域間で処理できます。
実際にはアセンブラではラベルを利用するので、
実際にはアセンブラではラベルを利用するので、
mov my_value, your_value
add my_value, 5
add my_value, 5
・・・・
my_value res 1
my_value res 1
your_value res 1
と可読性が良くなります。
と可読性が良くなります。
発想を変えると無いのではなく、各コア上のRAM領域が全てレジスタとも言えます。
32ビットCPUなので512個がレジスタとなります。
32ビットCPUなので512個がレジスタとなります。
メインRAM間での直接演算や転送は出来ず、必ずコア上のRAMを経由しないと
いけないようです。
レジスタが512個もあるので、値を退避する必要がなく、POP/PUSH命令が存在しません。
レジスタを意識する必要もなしです。
では、割り込み処理等はどんな挙動になるのか(通常ならレジスタ退避とかやるので)
疑問に思い調べてみると、なんと、このプロセッサは割り込み機構を持っていません。
いけないようです。
レジスタが512個もあるので、値を退避する必要がなく、POP/PUSH命令が存在しません。
レジスタを意識する必要もなしです。
では、割り込み処理等はどんな挙動になるのか(通常ならレジスタ退避とかやるので)
疑問に思い調べてみると、なんと、このプロセッサは割り込み機構を持っていません。
その変わり異常に高機能なwait命令群や、同期をとる命令やレジスタが存在します。
まだ勉強不足ですが割り込みのようなイベント処理は、高度な条件付きwaitを使って
別コアの実行の停止・再開を制御して実装しているのだと思われます。
精度の高いwait命令使ってループさせればインターバル処理や、ポーリングによる
データ受信や変化の検出が可能ですね。処理は別コアに振れば分けですし。
まだ勉強不足ですが割り込みのようなイベント処理は、高度な条件付きwaitを使って
別コアの実行の停止・再開を制御して実装しているのだと思われます。
精度の高いwait命令使ってループさせればインターバル処理や、ポーリングによる
データ受信や変化の検出が可能ですね。処理は別コアに振れば分けですし。
他のコアにイベントを発生させられますね。
色々と斬新なプロセッサです。
« Propeller始めました(5) Parallax社純正ボードを購入 | トップページ | Propeller始めました(7) DIP版 最小構成の実装 »
「Propeller」カテゴリの記事
- プロペラ2の評価ボード(2019.03.12)
- プロペラでVT100端末の実装(2018.07.25)
- Propeller始めました(22) ポータブルゲーム機の実装 7(2016.02.19)
- Propeller始めました(21) ポータブルゲーム機の実装 6(2016.02.17)
- SPI接続のカラー液晶モジュールの動作確認(2016.02.14)
« Propeller始めました(5) Parallax社純正ボードを購入 | トップページ | Propeller始めました(7) DIP版 最小構成の実装 »
コメント