TOPPERSプロジェクト 設計メモ MPCoreおよびそれを用いたチップ/ボードに関するメモ 作成者: 高田広章(名古屋大学) 最終更新: 2015年8月9日 ○メモの位置づけ このメモは,MPCoreと,それを用いた以下のチップ/ボードに関して, TOPPERSカーネルをポーティングするにあたって必要となる事項をまとめたもの である. ・ARM11 MPCore ・Core Tile for ARM11 MPCore(CT11MPCore) ・RealView Platform Baseboard for ARM11 MPCore ○目次 ・参考文献 ・ARM CT11MPcore with RealView Emulation Baseboard - 用語の整理 - ARM11 MPCoreテストチップの割込み機能 - CoreTile for ARM11 MPcoreの割込み機能 - デバイスレジスタのアドレス ・ARM11 MPCore内蔵タイマ - タイマ - ウォッチドッグ ○参考文献 [1] ARM11 MPCore Processor Technical Reference Manual, 2008 Revision: r2p0 DDI0360F_arm11_mpcore_r2p0_trm.pdf [2] Cortex-A9 MPCore Technical Reference Manual, 2012 Revision: r4p1 DDI0407I_cortex_a9_mpcore_r4p1_trm [3] Core Tile for ARM11 MPCore User Guide HBI-0146 DUI0318F_core_tile_for_arm11_mpcore_ug.pdf [4] Using a CT11MPCore with the RealView Emulation Baseboard, 2008 ARM DAI 0152E DAI0152E_ct11mpcore_on_emulation_baseboard.pdf [5] RealView Platform Baseboard for ARM11 MPCore User Guide, 2011 HBI-0159, HBI-0175, HBI-0176 DUI0351E_realview_platform_baseboard_for_arm11_mpcore_ug.pdf ○ARM CT11MPcore with RealView Emulation Baseboard ●用語の整理 ・Emulation Baseboard(EB) - コアを含まないベースボード - メモリや各種のペリフェラルを搭載する ・Platform Baseboard(PB) - コアを搭載するベースボード - メモリや各種のペリフェラルも搭載する ・CoreTile(CT) - Emulation Baseboard(EB)に載せるためのコアを搭載した小型ボード ・Core Tile for ARM11 MPCore(CT11MPCore) - ARM11 MPCoreのテストチップを搭載したCoreTile + 4プロセッサ構成のARM11 MPCore + L220 レベル2 キャッシュコントローラ ・HDRX,HDRY,HDRZ(何の略か不明) - BaseboardとCoreTileを接続する3つのコネクタの名称 ・DCC(Debug Communications Controller) ●ARM11 MPCoreテストチップの割込み機能([3] 4.3.2節) ・搭載されている割込みコントローラ - DIC(Distributed Interrupt Controller) - GICの前身となる仕様(GICv0に相当) ・チップ外からの割込み要求ライン - nIRQ[3:0] … DICの割込みID31に - nFIQ[3:0] … 各プロセッサのFIQに直結 - INT[15:0] … DICの割込みID32〜47に ・CPSR中のFビットを無効にして,FIQをNMI扱いできる - テストチップ割込み制御レジスタで設定 PERIPHBASE+0x3004U ・DICは32本の割込み要求ラインを持つ - ハードウェア割込み(GICのSPIに相当)の本数のことと思われる ・テストチップのINT[31:16]は,チップ内に閉じて使用 - INT[31:29]:L220からの割込み(3本) - INT[17:28]:各プロセッサおよびSCUからの割込み(12本)PMUIRQ[0:11] - INT[16]:未使用(1本) ●CoreTile for ARM11 MPcoreの割込み機能([3] 3.4.2節) ・3つの割込みモードをサポート - Legacy mode - Normal mode with DCC interrupt routing - Normal mode without DCC interrupt routing … これで使っている - EBシステムFPGAのSYS_PLD_CTL1レジスタのINTMODE[2:0]で設定する ・Normal mode without DCC - Emulation Baseboardからの16本に割込み要求ラインを,そのまま INT[15:0]に接続.nIRQ[3:0]とnFIQ[3:0]は使わない - 割込み番号のアサイン INT[0]:ACCI INT[1]:EB_TIMER0/1 INT[2]:EB_TIMER2/3 INT[3]:USB INT[4]:EB_UART0 INT[5]:EB_UART1 … INT[10]:EB_GIC1_nIRQ INT[11]:EB_GIC2_nIRQ INT[12]:EB_GIC1_nFIQ INT[13]:EB_GIC2_nFIQ … ●デバイスレジスタのアドレス ・ペリフェラルベースアドレス(PERIPHBASE)([3] 3.10.1節) - 以下のレジスタのアドレスを決める + ARM11 MPCoreのレジスタ Snoop Control Unit(SCU)の制御レジスタ + L220キャッシュコントローラのレジスタ + ARM11 MPCoreテストチップのレジスタ Test chip PLL control register Test chip interrupt control register Test chip cluster ID register Test chip power status register Test chip way map register Test chip clock divider register - CT11MPCoreでは,CoreTile上のジャンパスイッチで設定可能 + デフォルトは,0x1F000000 - QEMUでは,0x10100000に設定されている(qemu-2.1.0/hw/arm/realview.c) ・Emulation Baseboard上のリソースのアドレス([4] 5.2節,[5] 4章) - ベースアドレスは,0x10000000 - レジスタをアンロックする方法 + base+0x20に,0xA05Fを書き込む - メモリマップ 0x10000000〜0x10000fff システムレジスタ 0x10001000〜0x10001fff システムコントローラ(SP810) …中略… 0x10009000〜0x10009fff UART0 … ARM UART PL011 r1p3 0x1000a000〜0x1000afff UART1 … ARM UART PL011 r1p3 0x1000b000〜0x1000bfff UART2 … ARM UART PL011 r1p3 0x1000c000〜0x1000cfff UART3 … ARM UART PL011 r1p3 …中略… 0x10010000〜0x10010fff Watchdog … ARM WDOG SP805 r2p0 0x10011000〜0x10011fff Timer 0&1 … ARM Dual-Timer SP804 r1p2 0x10012000〜0x10012fff Timer 2&3 … ARM Dual-Timer SP804 r1p2 …中略… ○ARM11 MPCore内蔵タイマ([1] 9.2節) ARM11 MPCoreは,コア毎に,タイマとウォッチドッグを持つ.ウォッチドッグ は,タイマとして使用することもできる. ●タイマ タイマロードレジスタ(MPCORE_TMR_LR)… 32ビット - カウントレジスタが0になった時にリロードする値を保持するレジスタ. - このレジスタに書き込むと,カウントレジスタにも書き込まれる. タイマカウントレジスタ(MPCORE_TMR_CNT)… 32ビット - ダウンカウンタ. - 0になったら,割込みを要求する. - オートリロードモードでは,0になったら,ロードレジスタの値に戻る. - ロードレジスタかカウンタレジスタに書き込むと,新しい値からカウント. タイマ制御レジスタ(MPCORE_TMR_CTRL)… 32ビット [31:16] 予約(SBZ/RAZ) [15:8] プリスケーラ [7:3] 予約(SBZ/RAZ) [2] 割込みイネーブル [1] オートリロード [0] タイマイネーブル タイマ割込み状態レジスタ(MPCORE_TMR_ISR)… 32ビット [31:1] 予約 [0] イベントフラグ - カウンタレジスタが0になった時にセットされる. - 1を書き込むとクリアされる. ●ウォッチドッグ ウォッチドッグロードレジスタ(MPCORE_WDG_LR)… 32ビット - カウントレジスタが0になった時にリロードする値を保持するレジスタ. - このレジスタに書き込むと,カウントレジスタにも書き込まれる. ウォッチドッグカウントレジスタ(MPCORE_WDG_CNT)… 32ビット - ダウンカウンタ.  + タイマモード - 0になったら,割込みを要求する. - オートリロードモードでは,0になったら,ロードレジスタの値に戻る. - ロードレジスタかカウンタレジスタに書き込むと,新しい値からカウント.  + ウォッチドッグモード - 0になったら,リセットを要求する. - このレジスタへは書き込めない. ウォッチドッグ制御レジスタ(MPCORE_WDG_CTRL)… 32ビット [31:16] 予約(SBZ/RAZ) [15:8] プリスケーラ [7:4] 予約(SBZ/RAZ) [3] ウォッチドッグモード(ここに0を書いても変更できない) [2] 割込みイネーブル [1] オートリロード [0] ウォッチドッグイネーブル ウォッチドッグ割込み状態レジスタ(MPCORE_WDG_ISR)… 32ビット [31:1] 予約 [0] イベントフラグ - タイマモードで,カウンタレジスタが0になった時にセット. - 1を書き込むとクリア. ウォッチドッグリセット状態レジスタ(MPCORE_WDG_RST)… 32ビット [31:1] 予約 [0] リセットフラグ - ウォッチドッグモードで,カウンタレジスタが0になった時に セット. - 1を書き込むとクリア. ウォッチドッグディスエーブルレジスタ(MPCORE_WDG_DIS)… 32ビット 0x12345678と0x87654321をこの順で書くと,ウォッチドッグがディスエー ブルされる(制御レジスタ中のウォッチドッグモードビットが0になる). 以上