データシートを読む(6) STM32F401xD/xE その6

JosephHalfmoon
JosephHalfmoon

前回かなり「飛ばした」お陰でようやく

Functional overview

に到達いたしました。ここからいよいよ面白くなる、かと言えばそうでもないと思います(個人的な感想です。)以前に書かせていただいた通り、データシートのコアな部分は、無味乾燥に見える表やら図の方です。データシートの中では珍しく読むところがあるFunctional overviewは、そこへ至るためのお膳立て、くらいなものでしょう。

「お膳立て」と言って軽くみているわけではありませんよ。必須ではあるのです。「何がどのように搭載されているのか」規定するために。「何がどのように」が説明されていないと、表やら図やらが突然出てきてもサッパリですから。しかし、その記述は必要最小限。先にも引用しましたが、「別途、マニュアル読んでね」的な部分です。ハードウエア機能や、それをどうソフトウエアで制御するか、など具体的な説明はデータシートとは別な文書で懇切に説明されます。勢いあまってハードマニュアルの厚みだけでも千ページ超えるようなマイクロコントローラもあります(インテルのx86のマニュアルに比べたら可愛いものですが。)その点データシートは、ともかく機能を列挙するだけ(踏み込んだ説明はしない)です。

どこの会社のマイクロコントローラも、大体、記述の順番は大から小へ、真ん中から外側へ、という順番です。このF401マイコンにおいても例外なく、最初に登場するのはまたもやArm Cortex-M4です。最初のページから読んでいるので既に何度も登場しているのでもういいよ、という感じなのですが、我慢して読みます。するとちょっと目を引くのが

DSP instructions

という記述ですね。何も具体的な説明はここには書いてないですが、業界的にはこれだけで暗黙の了解が成立します。

毎サイクル(最高速の84MHzで)、積和演算1回は最低できる筈

DSPというと何かいろいろありそうですが、突き詰めると毎クロック掛け算やった結果を加算(積算)していける、これにつきます。信号処理のアルゴリズムはほぼ全てこの計算によるからです。

後もう一つ、FPUに関してソフトウエア開発上は気になることも書いてあります。1文引用させていたっだきましょう。

Its single precision FPU (floating point unit) speeds up software development by using metalanguage development tools, while avoiding saturation.

Saturation(飽和演算)というのは、信号処理をやるとよくお世話になる演算です。要はレンジを振り切れるような大きな数や小さな数がでてきた場合に、大きなものは最大、小さなものは最小に張り付かせるための演算です。簡単なことに見えますが、計算した結果をみて振り切れた!と分かったところで始末する必要があるので、メンドイ(遅くなる)計算でもあります。しなくて済ませられる(つまり事前にデータの幅を調整して振り切れないようにしておく)のならその方が良い筈。どうもそのためのお道具があると言っているようです。ま、気になったら「別途」調べてね、の世界。どうせデータシートでは説明していないのだし。いつもいつもそんなにうまく行くわけじゃないんだし。蛇足ですが、MATLABなどはその手の調整がお得意(別料金だった筈、確か。)

続いて登場するのが、ST社のTMである

ART Accelerator

です。最初の方でも出てきましたが、そこでは何かカッコイイ名前だよね、凄そう、というだけで終わっていました。ここでようやく何なのか明らかになります。

プリフェッチ・キューと分岐キャッシュ

であることがわかりました。なーんだ。でもま、そのお陰で(早くはない)フラッシュ上のプログラムを84MHzで実行できるように(見える)というわけです。何分「マイクロコントローラ」というくらいで、コントロールしてナンボのMCUです。分岐多いのが普通。プリフェッチだけでは、毎度の分岐の度にフラッシュメモリの遅さが見えてしまうので、分岐先もキャッシュするようにしたのでしょう。また、プリフェッチも命令単位(Armの場合、32ビットか16ビット)ではなく128ビット単位でゴッソリ自模ってきます。このクラスのMCUであれば当然か。フラッシュメモリはアクセスが遅い分、幅を広くしたのでバンド幅的にはバランスしております、という感じ。

その次はMemory protection unitです。これはパソコンのプロセッサのMMUみたいなものを想像してはいけませんな。ある決めた範囲の大事なタスクの大事なメモリをおバカな暴走タスク(バグなのかセキュリティなのかは知りません)から守るというもの。当然その保護はRTOS(リアルタイムOS)との連携あってのもの。誰かが作ってくれたRTOSを使っている限り、RTOSに保護をお願いするだけなので、直接操作することは普通の人にはまずない部分かも。

あれれ、1ページで予定数終了してしまった。次回は急がないと。

データシートを読む(5) STM32F401xD/xE その5 へ戻る

データシートを読む(7) MCUの非対称性 へ進む