2015/08/02

[nrf52]Cortex-M4って、どういうものだろう?

nRF52832は、Cortex-M4が載っている。

nRF51822はCortex-M0だった。
私のイメージとしては、Cortex-M3から命令数などを削ったものだ。
BLEが使えればいいや、と思って、あまり調べてないのだな。
そのせいか、あまり思い入れがないのだよなぁ。

それではもったいないので、nRF52832はまだあまり使っていないから、まずはCortex-M4ってものを調べて、もう少し身近に感じられるようにしておこう。


まずは、本家ARMのページを見よう。
http://www.arm.com/ja/products/processors/cortex-m/cortex-m4-processor.php

デジタル信号制御向けらしい。
幅が広いな、デジタル信号って。
無線で飛び交ってる信号も、ある程度はデジタル信号だし、音声だってデジタル化すればデジタル信号だ。
画像だって、2次元のデジタル信号と見なせる。
ああ、なんでもかんでもデジタル信号なのだよ。

Cortex-M4のブロック図が載っていた。

http://www.arm.com/ja/assets/images/processor/Cortex-M4-chip-diagram-LG.png

これを見ると、デジタル信号処理用の機能があるというよりも、命令としてデジタル信号処理で使うものが増えている、ということなのだろう。
Intelのチップも、そういう時代があったよなぁ。
1回の命令で行列計算をするのが得意なSIMD命令とか。

 

こちらは、NXPのページ。
http://www.nxp-lpc.com/lpc_micon/

一番下にCortex-M4が載っている。
Cortex-M4Fのことも書いてあり、M4Fは浮動小数演算ユニットが載ったものとのこと。
整数演算だけで除ければF無し、浮動小数ありならF有り、というところか。

 

ARM Partner Successというサイトがあった。
インスケイプ株式会社、という会社なのかな?
http://www.aps-web.jp/academy/cortex-m/01/g.html

表になっていてわかりやすい。
M3やM4は除算器を持ってるんだねぇ。


そんなわけで、nRF52にも信号処理をさせてあげたいところだ。
とはいえ、「信号処理ユニット」みたいなものがあるわけじゃないので、コードの書き方かコンパイラの機能で対応しないと意味がないと思う。

そういえば、Interface誌にCortex-M4で信号処理する連載が載っていたよな、と思って読み返してみた。
近くにあった2015年4月号では、FFTをやっている。
一部のソースファイルが載っているが、特殊な命令を使っている感じはしない。
ただ、C++でcomplexクラスを使っていたり、その要素がfloatなので、M4Fの浮動小数演算ユニットは使っているだろうし、もしかするとcomplexクラスの中ではすごいことをやってるのかもしれない。

こういう「コンパイラが賢い」というものは、なんとなくGCCなんかは不利で、メーカーが出してるコンパイラが有利な気がしてしまう。
http://stackoverflow.com/questions/16768235/cortex-m4-gcc-float-behavior
FPUの有無でコンパイルオプションが変わってくるけど、対応はしているようですな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。