在晶心平臺運(yùn)行具 OSC 的 FreeRTOS
晶心科技設(shè)計 IP 的目的,是滿足客戶實際需求,提供低功耗高效率的產(chǎn)品 給客戶,讓客戶可以做出極具競爭力的 SoC,達(dá)到客戶與晶心科技雙贏的目的, 本文介紹具 OSC 的 FreeRTOS 產(chǎn)品,巧妙地與 AndesCore?結(jié)合,客戶導(dǎo)入產(chǎn)品 后,具競爭力與實用性,本文的目的是期望能夠讓更多的讀者清楚這個產(chǎn)品的特 性與優(yōu)勢進(jìn)而使用此產(chǎn)品。
本文引用地址:http://www.ex-cimer.com/article/201601/285497.htm某些電子產(chǎn)品的應(yīng)用是不同的時間需要運(yùn)行不同的功能,這時需要大空間的 ROM 與 RAM 來存放在運(yùn)行時會用到的各式各樣的功能。因為 CPU 同時間只 會運(yùn)行一種功能。所以在務(wù)實與經(jīng)濟(jì)的考慮下可以使用 overlay 的方式來滿足此 類型產(chǎn)品的需求,將大幅降低 RAM 空間的使用,讓硬件成本降低,使得產(chǎn)品競 爭力大大的提升。達(dá)成 overlay 的方式有兩種,純軟件 overlay 與硬件加速 overlay。 純軟件的 overlay 不需增加硬件,但軟件工程師寫程序時需自己配置 functions 擺 放的位置,容易出錯;呼叫 functions 時需要經(jīng)過額外的處理,降低程序效能。 因此純軟件的方法多用于只需偶爾更換 overlay 的應(yīng)用。例如 audio player,一條 歌播完,下一條開始前,才需要檢查是否要用不同 decoder。我們有另一篇文章 針對軟件 overlay 做介紹,本文不多加探討。
硬件加速的 overlay 使用少許硬 件 , gate count < 2K (OSC, Overlay SRAM Controller),提供軟件透明的 overlay 處理。軟件工程師寫程序時,可以假設(shè)有一 個很大的連續(xù)程序空間,完全不需配置 functions 擺放的位置,這大大增加開發(fā) 程序的效率;同時,呼叫 functions 時完全沒有任何純軟件方式的 overhead。上 述之 OSC 優(yōu)點(diǎn)可以符合客戶這類的需求,如果客戶系統(tǒng)復(fù)雜,要做的事比較多, 需要用到多任務(wù)(Multi-tasking),則晶心科技「支援 OSC 的 FreeRTOS 產(chǎn)品」 就是最佳解方案。
1. Andes OSC 工作原理
先設(shè)定AndesCore? NCEOSC100 IP中寄存器,再與運(yùn)行軟件做整合搭配, 即可執(zhí)行OSC的功能。
1.1 設(shè)定 OSC IP 的寄存器與動作解說
■ OSC Control Register, OSCCTRL (+0x00)
■ OVL_SZ: 3’h4 (16KB) RO/WI
■ OVL_VALID: 0
■ Fixed Region Size Register, OVLFS (+0x04)
■ OVL_FSZ: 8’h18 (96KB) RW
■ Overlay Region Base Register, OVLBASE (+0x08)
■ Overlay Region End Register, OVLEND (+0x0C)
在OSC設(shè)計中SRAM分為兩個區(qū)域,一個是”fixed region” ,另一個是 “overlay region”,fixed region 為低地址的 SRAM ,其大小由OVLFS 寄存器設(shè) 定。 overlay region 是一個動態(tài)的區(qū)域,其地址由OVLBASE寄存器設(shè)定,大小 由 OVL_SZ 設(shè)定。當(dāng)CPU運(yùn)行時存取地址落在寄存器 OVLBASE與OVLEND之 間時OSC將自動轉(zhuǎn)址到SRAM的overlay region內(nèi),如圖1所示。
因應(yīng)實際需求設(shè)定多個Overlay 區(qū)域,當(dāng)發(fā) 生 ”O(jiān)verlay Miss” 時 ,經(jīng)由 Overlay Exception的機(jī)制與軟件的搭配,可以將storage 中的 overlay page N 復(fù) 制到 SRAM 中的Overlay Region,如圖1所示。關(guān)于overlay page 置換的工作原 理將于下兩個章節(jié)中做說明。
圖 1. Overlay 范例說明
CPU運(yùn)行時存取地址不在fixed region 或是當(dāng)時有效的 overlay page 時,會 發(fā)生 Overlay Miss 。當(dāng) Overlay Miss 發(fā) 生時 OSC 會產(chǎn) 生 illegal instruction (32’hcoddcodd)造成general exception。因為也有其他原因會產(chǎn)生general exception, 如何區(qū)分出overlay miss 與其他general exception,將于下個章節(jié)說明。
1.2 Overlay Exception 偵測
當(dāng)進(jìn)入 general exception 時可透過軟件檢驗下列程序來判斷是否為overlay miss:
Step 1 如果 interrupt level 已經(jīng)到達(dá)最大值 (PSW.INTL == Max INTL) ,這是 fetal error 不是overlay miss。
Step 2 必須是ITYPE.EYPE==1,才有機(jī)會是overlay miss。
Step 3 檢查IPC值,如果是落在fixed region 或是當(dāng)時有效的 overlay page 時 這是真 正的 illegal exception case. 如果 不 是在這 兩個 區(qū)域 則是 overlay miss。
經(jīng)過前面3步驟驗證,如果確定是overlay miss ,則可進(jìn)行Overlay exception handling 的動作。
1.3 執(zhí)行 Overlay Exception Handling 的動作
確定 overlay miss 后,做更新overlay region的動作。
Step 1 得到新的overlay region 地址:
- 從IPC得到更新overlay page的起始位置。
- 更新OVLBASE 寄存器。
Step 2 更新的overlay page內(nèi)容復(fù)制到 SRAM 中的overlay region
Step 3 最后執(zhí)行iret返回overlay miss發(fā)生時的地址。
2. 具 OSC 的 FreeRTOS 介紹
Andes 結(jié)合OSC 與 FreeRTOS設(shè)計出具 OSC的FreeRTOS ,OSC的功能與 原理已經(jīng)于上個章節(jié)介紹,本章節(jié)將說明具 OSC的FreeRTOS與一般FreeRTOS 的差異處,并列舉范例程序的運(yùn)行,展現(xiàn)OSC與FreeRTOS的功能。
2.1 具OSC的FreeRTOS內(nèi)存配置
具OSC的FreeRTOS其內(nèi)存配置如圖2,范例程序的linker script設(shè)定了LMA(系 統(tǒng)image)的內(nèi)存配置模式,其中l(wèi)overlay0, overlay1 與 overlay2是仿真 storage 的 地址。linker script 設(shè)定VMA(系統(tǒng)執(zhí)行時)的內(nèi)存配置模式,當(dāng)系統(tǒng)運(yùn)行進(jìn)入 overlay1, 2... 時產(chǎn)生overlay miss 觸發(fā) exception 將overlayN 內(nèi)的 數(shù)據(jù)復(fù)制到 overlay region 中,這樣的設(shè)計達(dá)到一份Overlay Region 的SRAM空間可以在不同 時間執(zhí)行對應(yīng)不同的overlayN程序代碼的目的。
圖 2.具 OSC 的 FreeRTOS 內(nèi)存配置圖
2.2 osc_hisr task
從圖2的overlay0, 1, 2 中可以發(fā)現(xiàn)系統(tǒng)會運(yùn)行task1與task2。說明FreeRTOS 做overlay region置換時也會執(zhí)行scheduler 做置換task 的工作。本范例程序設(shè)計 是在standard FreeRTOS 中增加一個 osc_hisr task 做overlay region 置換與管理 的工作。如何達(dá)到OSC 與 osc_hisr task的結(jié)合需從Overlay Exception Handling的 動作開始研討:
● 當(dāng) overlay exception 被觸發(fā)時,送 message 給 queue 啟動 osc_hisr task。
● 因為 osc_hisr task 做 overlay region 資料的置換,所以 osc_hisr task 尚未執(zhí) 行完成前,不可以執(zhí)行 Overlay Exception Handling 的 iret.
osc_hisr task 的主要工作在:
● Map overlay region
● overlay region 數(shù)據(jù)的復(fù)制。
osc_hisr task 設(shè)計的原則:
● 此 task 必須是最高 priority task.
● 此 task 必須放在 fixed region.
2.3 范例程序運(yùn)行
具 OSC 的 FreeRTOS 在 Andes EVB 上直接運(yùn)行得到的結(jié)果如圖 3,范例程 序中鍵入 3 時,是進(jìn)行 task 轉(zhuǎn)換,因為不同 task 運(yùn)行相對應(yīng)的 overlay function 從 console task 轉(zhuǎn)成 task1 再轉(zhuǎn)成 task2 也會產(chǎn)生相對應(yīng)的 page fault 執(zhí)行 osc_hisr task。由圖 3 紅色箭頭與數(shù)字轉(zhuǎn)變可以得知 task 轉(zhuǎn)換啟動 function overlay 運(yùn)作, 從此范例程序中可同時驗證 OSC 與 FreeRTOS 兩者的功能。
圖 3.范例程序執(zhí)行結(jié)果
3. 結(jié)語
本文第一章說明 Andes OSC 的工作原理與功能,第二章說明 FreeRTOS 如何 與 Andes OSC 整合運(yùn)作,在 OSC 的 FreeROTS 中也增加一個最高 priority task “osc_hisr” 來執(zhí)行 OSC 相對應(yīng)的功能,進(jìn)而說明了具 OSC 的 FreeRTOS 需注意 的設(shè)計原則,具 OSC 之 FreeRTOS 是由軟件與硬件單元所組成,兼具硬件的效 能與軟件的彈性。
已經(jīng)有業(yè)界客戶取得 Andes 具 OSC 之 FreeRTOS,開發(fā)出具競爭力產(chǎn)品在市 面上銷售,由此可知具 OSC 之 FreeRTOS 具有經(jīng)濟(jì)實用的價值,可以協(xié)助客戶 在使用 AndesCore?時,設(shè)計出具有彈性且高附加價值之產(chǎn)品。
評論