NXPのLPC4300シリーズについて考える

11月1日、NXPからLPC4300シリーズ・マイコンが発表されました。待望のCORTEX-M4Fマイコンです。
発表されたLPC4300シリーズは、LPC1700シリーズよりも高負荷のアプリケーションをねらっているようで、CORTEX-M4Fに加えてCORTEX-M0コアも実装されています。想定している使い方としては、ファイル・システムやプロトコル・スタックといったハード・リアルタイム性の低い仕事からCORTEX-M4Fを解放するような形でしょう。
まだユーザーズ・マニュアルは公開されておらず、データシートから概略をつかめるだけですが、いくつか見えてきたことがありますのでそれをメモしておきます。

コアクロック150MHz

これは最近発表されたNXPのLPC1800シリーズと同じ周波数です。外部に数個のバイパスキャパシタを接続して3Vを供給するだけで150MHzのコンピュータが動作する時代になりました。結構なことです。
古典的なDhrystone*1テストによると、CORTEX-M3は1.25DMIPS/MHzとのことなので*2、150MHzのLPC4300シリーズは180DMIPS程度になります。初代MacintoshMC68000は7.8MHzで、0.9DMIPS*3だったそうですから、200倍の速度です。我々はよほどのものを作らないと先人に顔向けができない時代に生きています。
ところで、内蔵RC発振器は12MHzとなりました。LPC1768とは違いますから、下回りのプログラミングをする人は注意が必要です。

オフローディングは機能するか

CORTEX-M0はCORTEX-M4を雑務から解放するためだと思われます。一方で、二つのコアはメモリを共有しています。ということは、フォン・ノイマンボトルネックが重くのしかかってくることになります。
NXPはLPC1768において速度の遅いFlashCORTEX-M3コアの足を引っ張らないようにFlashアクセラレータを強化しています。しかしながら、LPC4300では一段高い技術を導入しない限り、Flash, SRAM双方でバスが重い足枷になるでしょう。
おそらくは、プレスリリースでもふれられている「デュアルバンク・アーキテクチャ」がその問題への解答だと思いますが、セレクション・テーブルによると、デュアル・バンクをもっていない製品もありますので注意が必要です。

最大級のM0マイコン

ところで、CORTEX-M0は小規模マイコンに使われることが多いのですが、LPC4300のM0コアは全メモリにアクセス可能です。そういうわけで、ひょっとすると史上最大規模のM0マイコンということになります。
CORTEX-M0を用いたLPC1100などはメモリ制約が強いのでTOPPERS/ASPの移植対象としては考えていませんでしたが、LCP4300を見越してくんでおいた方がいいかもしれません。

例外ベクトルはどうなる

CORTEX-M3コアでは例外ベクトルの初期値を0番地において使っていますが、CORTEX-M4FとCORTEX-M0コアが同じ例外ベクトルを使うと、とんでもないことになります。おそらくは双方のベクトルの初期アドレスが異なるか、片方が他方のベクトルを変更したあとに起動できるような仕掛けがあるのでしょう。デュアル・コアDSPのADSP-BF561では、CORE Aが明示的に許可するまでCORE-Bは起動しないようになっています。

JTAGは内部接続されている

M4FとM0のJTAG回路はチップ内部で接続されている模様です。外部にはJTAG信号は1系統しか出ていません。
OpenOCDはチェーン接続されたARMコアのデバッグに対応しているようです。この場合、コンフィギュレーション・ファイルにはそれ相当の変更が必要になります。

シリアルはUSART

シリアル0,2,3はUARTではなく、USARTです。ただし、データシートを見る限りでは「16C550互換」を謳っています。注意が必要です。

全部入り

LPC4300はSDRAMコントローラ、LCDコントローラ、USB OTG + PHY、Ethernet MAC、SDIOインターエース、など豊富なペリフェラルを搭載しており、ボンディング・オプションで機能削減版を作り出しています。性能を除けばたいていのことはこれ一つで解決しそうです。
日経エレクトロニクスでも取り上げられたように、CORTEX-Mxシリーズのマイコンは特色を出すのが難しくなっています。NXPは全部盛りマイコントップランナーとなることで、先行逃げ切りを図っているのかもしれません。
Uzumeのようなオーディオ・プラットホームの場合は、下から二番目のLPC4312でも全く問題ないと思われます。

まとめ

まだユーザーズマニュアルが公開されているため、不明な点もありますが、LPC4300はこれ一つ覚えれば、しばらくいろいろなことに使える便利な石になりそうです。

*1:古すぎるという声もあるが、キャッシュをもたない汎用CPUの固定小数点性能としては、それほど的外れでもない

*2:http://www.arm.com/products/processors/cortex-m/cortex-m3.php

*3:http://www2.in.tu-clausthal.de/~zach/benchmarks/R10000/dhrystone.c