• 沒有找到結果。

PAC 上開發多核心程式的流程細節

在目前 PAC 平台上目前支援的作業系統有 Linux 和 Android,在工研院的網站上 [16]有提供 Android 和 Linux 編好的影像檔,可直接下載使用,整個燒錄過程在 3.6.1 小節詳細說明,另外要如何編譯 Android 作業系統、Linux 作業系統和 PAC DSP 程 式,在 3.6.2 小節中說明,在 3.6.3 小節中會說明如何將程式放到板子上跑。

3.6.1. 燒錄過程

在燒錄過程中,首先我們要配置主機跟 PAC 開發板間的連線設定,主機和 PAC 開發板間連線主要有 UART、Ethernet 和 JTAG,在這邊我們只有介紹 UART 和 Ethernet,在 UART 方面我們使用 Tera Term 程式跟 PAC 開發板溝通,在使用 Tera Term 程 式 之 前 在 主 機 端 需 要 安 裝 驅 動 程 式 PACDUO driver ( PL2303_Prolific_DriverInstaller_v1210.exe )程式,並設定 Baud rate:115200、Data:8 bit、Parity : none、Stop: 1bit、Flow control : none。接下來配置 Ethernet,在需要傳輸 資料到板子上我們使用 Ethernet,我們用網路線將 PAC 板子跟電腦主機對接,將跟 PAC 板子對接的網卡設置 IP 為 192.168.91.100,並且開啟 Tftp 程式將資料夾選至影像檔的 資料夾,Service interface 選 192.168.91.100 即可,以上是 UART 和 Ethernet 的配置。

在燒錄前要對燒錄方法和 Flash 記憶體中的配置要詳細了解,而這些資料可參考 工研院提供的文件 PACDUO_Embedded_OS_Setup_Guide_v2_2.pdf。我們有寫好幾個 Script 可自動將影像檔燒錄到正確的位子上,下表就是各腳本的對應。

Name of Script 燒錄的影像檔

dl-kernel-img.ttl Linux kernel dl-linux_pure.ttl Linux file system dl-fs-android-1050-91m.ttl Android kernel dl-data-android-1620-30m.ttl Android file system

Table 5. Script 對應表

36

首先打開 PAC 開發板的電源,在 Tera Term 程式中會看到 Uboot 倒數,並按任何 按鍵進入 Uboot 程式中,選 Control 和 Macro 載入 Script,燒錄 Linux 作業系統,只 要依次載入 Linux kernel 和 Linux file system 的 Script,之後輸入 setenv bootargs mem=120M console=ttyS0,115200n8 root=/dev/mtdblock5 rw rootfstype=jffs2 和 saveenv 指令即可。

3.6.2. 編譯環境

編譯環境需要 Linux-like 的作業系統,這邊我們是使用 Ubuntu 10.04 LTS,要編 譯 Uboot 和 Android 使用 Sourcery G++ Lite 2007q3-51 for ARM EABI,若要編譯 Linux Kernel 使用 Sourcery G++ Lite 2009q3-67 for ARM EAB,而 Source Code 和更多細節在 工研院網站上找到。

在 PAC 開發板上開發 DSP 程式的方法有分兩種,第一種是沒有作業系統使用 JTAG 直接對板子的暫存器做操作,第二種是在 ARM 處理器上跑作業系統,利用 ARM 對 DSP 處理器做操作,在這邊我們介紹後者。實驗中在 ARM 處理器上執行 Linux 作 業系統,首先要先開發 ARM 上執行的程式,編譯的工具使用 Sourcery G++ Lite 2009q3-67 for ARM EABI,另外就是 DSP 上執行的程式,編譯的工具使用工研院提供 的 pacdsp-elf-as、pacdsp-elf-ld 和 pacdsp-elf-objcopy。

3.6.3. 執行流程

執行流程的說明,我們以使用 software pipeline 方法做 H.264 解碼當作例子來說 明,在 ARM 上執行的程式透過 3.6.2 章節介紹的工具編譯成 DSP.bin 執行檔,在兩個 DSP 上執行的程式由工研院提供的工具編譯成 NCTU_h264_decoder_dsp1.bin 和 NCTU_h264_decoder_dsp2.bin 執行檔,將三個執行檔放到 USB 隨身碟上。

在作業系統使用 Linux,首先要將 USB 隨身碟掛載到作業系統中,指令 mount /dev/sda1 /mut , 並 把 USB 隨 身 碟 中 DSP.bin 、 NCTU_h264_decoder_dsp1.bin 和 NCTU_h264_decoder_dsp2.bin 放到 /bin 中,直接執行 DSP.bin 即可。

37

在 DSP.bin 首先要針對 DSP1 和 DSP2 做初始化動作,首先要將兩個 DSP 執行的 檔案 NCTU_h264_decoder_dsp1.bin 和 NCTU_h264_decoder_dsp2.bin 放到 AXI-SRAM 上 , 我 們 規 劃 DSP1 要 執 行 的 程 式 (NCTU_h264_decoder_dsp1.bin) 放 記 憶 體 0x2100_0000 上,而 DSP2 要執行的程式(NCTU_h264_decoder_dsp2.bin)放記憶體 0x2101_0000 上, 接下來要針對 DSP 上的暫存器進行初始化動作如下圖 Figure 24。

Figure 24. 初始化 DSP2

Figure 24 是以 DSP2 為例子,mDSP2_BASE_ADDR 指到的 DSP2 的記憶體地址 0xD000_000,首先第一行設定 DSP 內部的 SRAM 的 addressing mode,0 代表 not interleaved,第二行設定讀取 DSP 內部的 SRAM 的優先權,0 代表 PACDSP > DMA >

BIU >CFU,第三行設定 DSP 分配到的記憶體地址,第四行設定 DSP2 所要執行的程 式(NCTU_h264_decoder_dsp2.bin)的起始地址,第五行設定要提早先讀取幾道指令,

第六行設定 Instruction Memory 的大小,0 代表 32KB,第七行設定 Instruction Memory 的模式,0 代表 cache mode,第八行當 IMFLUSH 設定為 1,Instruction Memory 裡面 資料全部洗掉。可藉由改變第四行切換 DSP 要執行的程式,同理 DSP1 也是一樣的設 定。接下來設定以下指令如圖 Figure 25,DSP 就會開始讀取程式開始執行。更多關於 PAC DSP 的資訊可參考[17][18]。

Figure 25. DSP2 開始執行指令

*(volatile unsigned int *)(mDSP2_BASE_ADDR + PSTART) = 1;

1 *(volatile unsigned int *)(mDSP2_BASE_ADDR + DMCFGI) = 0;

2 *(volatile unsigned int *)(mDSP2_BASE_ADDR + DMCFGP) = 0;

3 *(volatile unsigned int *)(mDSP2_BASE_ADDR + DMBADDR) = (unsigned int) 0xd0000000;

4 *(volatile unsigned int *)(mDSP2_BASE_ADDR + PADDR) = (unsigned int)0x21010000;

5 *(volatile unsigned int *)(mDSP2_BASE_ADDR + IMNPF) = 0;

6 *(volatile unsigned int *)(mDSP2_BASE_ADDR + IMSPACE) = 0;

7 *(volatile unsigned int *)(mDSP2_BASE_ADDR + IMCFG) = 0;

8 *(volatile unsigned int *)(mDSP2_BASE_ADDR + IMFLUSH) = 1;

38

四、Software Pipeline 實作

在這 4.1 節首先會對 software pipeline 做介紹和使用 software pipeline 的三個重 點,在 4.2 節對 PAC 平台上的效能的分析,4.3 節中藉由 4.2 節中數據提出可行的 software pipeline 架構,4.4 節在 macroblock Layer 中實際量測每個 macroblock 在每個 stage 執行時間。

相關文件