Pico三昧(30) ラズパイPico2:RP2350、Pico:RP2040、内部バス比較

Joseph Halfmoon

前回はPico2のBoot ROM/RAMを調べました。今回はRP2350、RP2040に「似通った形」で実装されている内部バス。遠くからみると同じに見えるけれども、近寄ってみると細かく違う部分。ただし、ユーザーがその差を感じるのは処理スループットくらいか。気にしなければ知らんでも済む?いいのかそんなことで?

※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。

※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。

Pico-series Microcontrollers

AMBA、AHBとAPB

AMBA、Advanced Microcontroller Bus Architectureは、御本家Arm社が提唱するオンチップバスの規格です。仕様の入口となるホームページ(日本語、どうせ中身は英語だけれども)が以下に。

AMBA

以下のように規定されているので、いまやほぼほぼ「業界標準的な」オンチップバスでないかと。

    • オープンスタンダード
    • ロイヤリティフリー
    • プラットフォーム非依存

Armをコアに頂くシステムでは勿論、RISC-Vなどでも皆さんお使いのようです。なお、ロイヤリティフリーで誰でも使えるとはいいつつ、元の権利はArm社のものであると理解しとります。

昔から(老人にとってはつい最近ですが)存在し、現在は「5」がつく仕様が最新版みたいです。なお以下は最新版のPDFファイルをダウンロードしただけで満足し、読んでいない年寄の戯言デス。

RP2040とRP2350のBus Fabric

遠くから見るとRP2040とRP2350のバス構成は似ています。なおAMBAバス規格の中にAHBとかAPBとか、AXIとか用途に応じて「いろいろ」あるという理解です。

    1. 一番上にいるのがバスマスタになるコアとDMAコントローラ
    2. その下にある高速バスがAHB規格のバス(クロスバ構造)
    3. 上記の高速バスに接続する高速なメモリと周辺回路
    4. 上記の高速バスから低速なAPBバスへのバスブリッジ
    5. APB規格のバス
    6. 上記の低速なAPBバスに接続する周辺回路群

このくらいホンワカしたレベルだと、RP2040とRP2350は変りませぬ。

まずは上の方にある高速バス、AHB規格のものですが、クロスバ構造だそうな。クロスバといった場合に当然想起されるのは、複数のバスマスタが、同時にバスアクセスをしたいと動いたときに、行先が異なっていたら並行動作できる筈という点です。まあ、当然、同じ行先を操作したいということだとアービトレーションということで順番つけることになる筈ですが。

ここでバスマスタになるものを調べるとRP2040もRP2350も以下の3つです。

    • コア0
    • コア1
    • DMAコントローラ

しかし、RP2040とRP2350ではこいつらとクロスバの接続ポート数が異なるのです。RP2040では、コア0とコア1に各1本(R/W兼用。)DMAコントローラだけはReadとWriteで異なるポートがあるので2本、合計4本でした。一方RP2350では、コア0とコア1は、命令フェッチ(RO)とデータアクセス(R/W)で各2ポート持つようです。合計6本ね。つまりRP2040ではフェッチしている最中にデータアクセスは待たされるけれども、RP2350ではフェッチとデータは無関係に動けると。スループットがあがりそうですなあ。

ここでその高速なAHBバスにぶら下がっているものどもを調べると、ここでもハイアラーキがあることが分かります。

    1. RAM、Flashインタフェース、Boot ROMなどのメモリ群
    2. PIO、USBなどの高速な周辺回路
    3. I2C、UARTといった低速な周辺回路

第1のカテゴリはコア速度を律速するので速くしておきたい部分です。ここでクロスバが大活躍してます。例えばRAMは、

    • RP2040、6ポート
    • RP2350、10ポート

でクロスバに接続してます。つまり異なるRAMブロック(アドレスが大きく異なる)へのアクセスであれば並行動作が可能になるかも、ということだと思われます。この辺もRP2350の方がゴージャス。

また、Flashとのインタフェース(XIP)もRP2040では AHBと直結1、他と共用のスプリッタを介するもの1と実質1.5くらいじゃん、という感じが、RP2350では2ポート、フル接続です。勿論途中にキャッシュもハマってます。

PIO(プログラマブルIOね、他のマイコンではパラレルIOの意味だったりするけれど)やUSBといった高速であってほしいけど、メモリほどいつもでない奴らはAHB接続ですが、共用のAHBスプリッタ経由になってます。

なお、RP2040では AHB-Lite と書かれており、RP2350では AHB5 と書かれているのでバスそのものも何やら高度化していることが分かります。ただ、スペック読んでないので違いは分からんけど。読めよ、自分。

さて他の「ゆっくり」なものどもは、AHBからAPBバスへのブリッジを介して接続してます。この辺にぶら下がっている部分はあまり変わらんような気がしないでもないです。個別に周辺調べるときに「もっと詳しく」かね。

Pico三昧(29) ラズパイPico2:RP2350、Boot ROMとBoot RAM へ戻る

Pico三昧(31) ラズパイPico2:RP2350、Pico:RP2040、DMAC へ進む