Figure 3. PAC Duo SoC 架構圖
PAC Duo SoC 晶片整合 ARM 926EJ-S 處理器和 PAC DSP 處理器。ARM9 RISC 處理器在嵌入式系統被廣泛使用。由圖 Figure 3.為 PAC Duo SoC 晶片系統架構圖,其 主要整合三個子系統:ARM 子系統、DSP 子系統和慢速 I/O 子系統,慢速 I/O 子系統 主要是由 APB BUS 連接開發板上週邊 I/O 裝置如:timer、GPIO、UART…等,將相 對慢速 I/O 裝置放在這子系統可避免整個系統因為慢速 I/O 裝置佔用頻寬而降低整體 效能。ARM 子系統 AHB-lite BUS 上有 ARM 926EJ-S 處理器,目前 PAC Duo 平台利 用 ARM 處理器可以執行 Android 和 Linux 的嵌入式熱門的作業系統。DSP 子系統設 計目的是在數位訊號、多媒體影音加解碼方面能展現高效能處理,最主要由 AXI BUS 連接兩個 PAC DSP 處理器(數位訊號處理核心)和增強型多媒體直接記憶體存取器 EMDMA(Enhanced Multimedia Direct Memory Access),EMDMA 會在稍後章節介紹,
這些全部接在 AXI BUS 上稱作 DSP 子系統。更多的 PAC DSP 處理器的細節將在下 章節介紹。
資料來源:工研院
9
Table 1.為 PAC Duo 平台上記憶體的整理,為了區別接在不同 BUS 上的記憶體會 在面加上 BUS 名稱:
Memory Size Address On/Off SoC chip
AXI-SRAM 128KB 0x2100_0000~0x2101_FFFF On chip AHB-SRAM 256KB 0x2000_0000~0x2003_FFFF On chip AXI-SDRAM 128MB 0x3000_0000~0x37FF_FFFF Off chip AHB-SDRAM 128MB 0x3800_0000~0x3FFF_FFFF Off chip AHB-Flash 128MB 0x1000_0000~0x1FFF_FFFF Off chip DSP1-SRAM 64KB 0xB00A_0000 ~ 0xB00A_FFFF On chip DSP2-SRAM 64KB 0xD00A_0000 ~ 0xD00A_FFFF On chip
Table 1.PAC 開發板記憶體整理 ARM 926EJ-S RISC 處理器如下:
32/16-bit RISC architecture
32-bit ARM instruction set for maximum performance and flexibility
16-bit Thumb instruction set for increased code density
DSP instruction extensions and single cycle MAC
Flexible instruction and data cache sizes
16K instruction cache
16K data cache
MMU which supports operating systems including Symbian OS, Windows CE and Linux
Embedded ICE-RT logic for real-time debug
PAC DSP 處理器如下:
Architecture:5-way VLIW; 9-stage pipeline
Datapath:32-bit fixed-point with 16-/8-bit (subword) support
SIMD Operation:16-bit×2; 8-bit×4
32K instruction cache
64K data memory
Support dynamic power management
Developing Tools:C compiler, assembler/linker, cycle-accurate ISS, and debugger
10
Figure 4 列出 PAC Duo 平台上的記憶體配置:
Figure 4. System Memory Map
資料來源:工研院
11
在 PAC Duo 平 台 上 任 何 的 硬 體 裝 置 的 暫 存 器 都 是 透 過 記 憶 體 映 射 到 0x0000_0000~0xFFFF_FFFF 記憶體空間,上表列出 PAC Duo 平台所有的記憶體對應 關係(mapping),以下列表是以 Android 作業系統來解釋各記憶體空間:
0x1000_0000~0x1FFF_FFFF :為記憶體 Flash 部份,主要放 U-BOOT、Linux Kernel、Android Root File System 和 Android Data。
0x2000_0000~0x2003_FFFF :為 AHB-SRAM 大小為 256KB,目前並沒有使用。
0x2100_0000~0x2101_FFFF :為 AXI-SRAM 大小為 128KB,主要是放 PAC DSP 要執行程式的二元檔案 。
0x3000_0000~0x37FF_FFFF :為 AHB-SDRAM 大小為 128MB,這段記憶體空 間在 AHB-lite BUS 上(ARM 子系統),為 Linux Kernel 運行的地方。
0x3800_0000~0x3FFF_FFFF :為 AXI-SDRAM 大小為 128MB,這段記憶體空間 為在 AXI BUS 上(DSP 子系統),主要放 PAC DSP 要解碼的 Bit-Stream 和解完影 片後的 Raw Data。
0x5000_0000~0x5FFF_FFFF :可對 APB BUS(慢速 I/O 子系統)上的裝置做設定,
如:timer、GPIO、UART…等。
0x7000_0000~0x7FFF_FFFF:可對 AHB-lite BUS(ARM 子系統)上的裝置做設定,
如:Mailbox、Ethernet、LCD…等。
0xA000_0000~0xAFFF_FFFF:可對 AXI BUS(DSP 子系統)上的裝置做設定,如:
AXI-SDRAM、EMDMA…等。
0xB000_0000~0xBFFF_FFFF :為 PAC DSP1 的記憶體空間,在這段記憶體空間 可對 PAC DSP1 和 PAC DSP1 的 DMA 進行設定,另外 0xB00A_0000 ~
0xB00A_FFFF (64K)為 PAC DSP1 內部自己的 SRAM。
0xD000_0000~0xDFFF_FFFF :為 PAC DSP2 的記憶體空間,在這段記憶體空間 可對 PAC DSP2 和 PAC DSP2 的 DMA 進行設定,另外 0xD00A_0000 ~
0xD00A_FFFF (64K)為 PAC DSP2 內部自己的 SRAM。
以上為 PAC Duo 平台各段記憶體空間的介紹,若要針對各裝置更詳細的設定資訊 可參考 http://pac.itri.org.tw/ 網站中的文件”V3.3_S0001_Processor_Architecture.pdf”和 文件”PAC_Duo_programmer_reference.pdf”。
12 Cluster 包涵 Load/Store Unit 和 Arithmetic Unit,共有五個運算單元,可有效 提昇運算能力。
Variable instruction word/packet length : 這樣機制有助於減少 Code size。
Heterogeneous Register Files : 每個運算單元都有自己獨立的暫存器,對於每 個暫存器可直接拉線到各自運算單元,這樣可減少能量的損失,也可減少硬 體的面積。
Constant Register File : 在這些暫存器中可儲存固定不常變動的常數,可減少 資料的搬運降低能源的消耗。
Inter-cluster communication (ICC) by memory controller : 透過特殊指令集 (ICC),可使兩個 Cluster 之間互相溝通,可互相提昇兩個 Cluster 合作的效能。
Optimized interrupt design with fast interrupt response time : 使用硬體來幫助 PAC DSP 的 Context Switch,可減少發生中斷時的處理時間。
Hierarchical encoding scheme : 透過使用階乘管理方法減少指令之間的相依 關係,可減少分配指令單元的反應時間。
Dynamic power management : 可動態調整 PAC DSP 的頻率以減少能源的消 耗。
Customized functional unit interface : 可自訂硬體加速器透過這個界面與 PAC DSP 溝通並提昇 PAC DSP 的運算能力。
Figure 5.是 PAC DSP 架構圖,在 DSP Kernel 中最主要有幾個部份 Program Sequence Control Unit(PSCU)、Scalar Unit 和兩個 Cluster,PSCU 用來控制執行中程式 的流程,主要功能是更新 Program Counter 、Fetch address 和處理中斷程序。Scalar Unit 可 以 當 作 一 個 簡 單 的 32-bit RISC 處 理 器 , 可 有 效 增 加 指 令 間 的 平 行 度 (ILP, Instruction-level parallelism)。每一個 Cluster 包括 Arithmetic Unit 和 Load/Store Unit,