周春良,樊文杰,王連成,馮 曦,周芝梅,唐曉柯
(1. 北京智芯微電子科技有限公司 國家電網(wǎng)公司重點實驗室 電力芯片設計分析實驗室,北京 100192;2. 北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設計工程技術研究中心,北京 100192)
實時操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植
周春良1,2,樊文杰1,2,王連成1,2,馮 曦1,2,周芝梅1,2,唐曉柯1,2
(1. 北京智芯微電子科技有限公司 國家電網(wǎng)公司重點實驗室 電力芯片設計分析實驗室,北京 100192;2. 北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設計工程技術研究中心,北京 100192)
在介紹實時操作系統(tǒng)Nucleus Plus和LTE230芯片及硬件平臺的基礎上,詳細論述了Nucleus Plus移植過程中的系統(tǒng)啟動、系統(tǒng)初始化、內(nèi)存管理、中斷管理、高級中斷和任務管理以及操作系統(tǒng)的測試,指出了Nucleus Plus在LTE230芯片上移植的重點和難點。目前移植的操作系統(tǒng)已成功應用于LTE230通信模塊中,操作系統(tǒng)的實時性、任務及中斷管理完全滿足系統(tǒng)需求。
Nucleus Plus操作系統(tǒng);CEVA-X1643 DSP;移植;中斷;任務
圖1 芯片整體結(jié)構(gòu)
LTE230芯片是針對230M電力無線通信專網(wǎng)推出的終端基帶芯片,芯片采用軟件無線電技術,除物理層時域部分用中頻電路實現(xiàn),物理層頻域和比特符號級處理、協(xié)議層媒體訪問和無線資源控制、網(wǎng)絡層協(xié)議以及芯片內(nèi)外大量設備管理都是用CEAV-X1643 DSP(簡稱X1643)軟件來實現(xiàn)[1],因此軟件非常復雜,涉及到很多實時性要求較高的中斷和任務,傳統(tǒng)的基于中斷觸發(fā)的軟件架構(gòu)已不能滿足芯片基帶處理的需要,須將實時操作系統(tǒng)及其多任務調(diào)度機制引入進來,通過多任務管理來完成系統(tǒng)的多種功能及功能的擴展與更新,達到簡化DSP軟件設計、提高開發(fā)效率的目的。
目前主流的商用實時操作系統(tǒng)都不支持X1643,同時使用CEVA DSP的芯片廠商所需支持操作系統(tǒng)皆是自行購買后進行移植,故可借鑒的經(jīng)驗很少。經(jīng)詳細評估,考慮到實時性、內(nèi)核大小、用戶數(shù)等諸多因素,最終選定Mentor Graphics的Nucleus Plus操作系統(tǒng)(簡稱Nucleus)作為移植對象。Nucleus是為實時嵌入式應用而設計的一款基于優(yōu)先級的搶先式多任務操作系統(tǒng),支持ARM等主流處理器,最新版本接近99%的代碼是用ANSI C編寫的,非常便于移植。在典型的目標環(huán)境中,核心代碼不超過20 KB。Nucleus采用軟件組件的方法,易于替換和復用,常用組件包括任務控制、內(nèi)存管理、中斷管理及定時器管理等[2]。
芯片是一個以DSP為核心的SoC,整體結(jié)構(gòu)如圖1所示,片內(nèi)集成了高性能的X1643處理器、大容量的eDRAM存儲器、具有載波聚合功能的中頻模塊以及通用的UART、SPI、I2C、Timer、WDT、GPIO、PWM等外設。
圖2 LCM硬件平臺
基于芯片的通信模塊采用基帶芯片+射頻芯片的方案,如圖2所示?;鶐酒c射頻芯片之間的控制接口為SPI,數(shù)據(jù)接口為JESD207;與電力終端之間的控制與數(shù)據(jù)接口皆為串口。
Nucleus暫不支持X1643,在芯片上進行移植涉及到系統(tǒng)啟動、系統(tǒng)初始化、內(nèi)存管理、中斷管理和任務管理等工作。X1643采用單指令多數(shù)據(jù)SIMD和超長指令字VLIW相結(jié)合的架構(gòu),其核心寄存器約有100多個,包括累加寄存器ACF、尋址寄存器ARF、程序寄存器SRF、模式和狀態(tài)寄存器MSR、斷定寄存器PR以及存儲子系統(tǒng)寄存器MSSR幾大類[3],相比于ARM處理器,寄存器的分類及功能有較大的不同,移植時有些寄存器的使用須特別注意。
2.1 系統(tǒng)啟動
芯片通過BootStrap Pin來控制啟動方式??山?jīng)BootROM引導,通過串口或SPI Flash把操作系統(tǒng)和應用程序加載到TCM和eDRAM中執(zhí)行;因X1643支持從指定的地址啟動,也可通過SPI控制器的memory mode直接從SPI Flash啟動程序;在早期的調(diào)試過程中,可使用JTAG仿真器把程序直接下載到TCM和eDRAM后開始執(zhí)行。與ARM等處理器稍有不同的是,Program TCM不能通過X1643內(nèi)部數(shù)據(jù)總線和芯片系統(tǒng)總線訪問,只能通過JTAG或使用Program DMA進行程序加載。
2.2 系統(tǒng)初始化
系統(tǒng)正常啟動后,PC指針將跳到零地址,即Program TCM中,開始系統(tǒng)的初始化。首先進行板級初始化,主要過程如圖3所示。
圖3 板級初始化
BootROM中會對時鐘復位及存儲器控制等進行基本的初始化,在板級初始化時主要進行操作系統(tǒng)本身及X1643核的初始化操作。操作系統(tǒng)的啟動棧放在系統(tǒng)的內(nèi)存池中,在切換到系統(tǒng)棧后,啟動棧占用的空間將會被回收到內(nèi)存池中。X1643提供的“飽和”、“乘移位”、“?!钡炔僮魇轻槍μ囟ǖ臄?shù)字信號運算的,操作系統(tǒng)不會使用,在初始化中須關掉,以防誤觸發(fā)引起程序行為異常,匯編代碼如下:
;Clear all saturation mechanisms
mov moda, a0
or #0x1F, a0
;Disable multiplier post shift mechanisms
mov #0xFFFF1FFF, a1
and a1, a0
mov a0, moda
;Disable the modulo mechanisms
mov mod0, r0
ands r0, #0xffffff00, r0
mov r0, mod0
X1643采用編譯器驅(qū)動的架構(gòu),指令流水線的數(shù)據(jù)、資源及控制相關是通過編譯器來解決的,但編譯器對匯編代碼不做處理,故在編寫初始化及其他匯編代碼時,需手工加nop指令來隔離相關操作,這一點須特別注意。
板級初始化后的操作系統(tǒng)軟件組件初始化和應用程序初始化都是用C代碼實現(xiàn)的,其過程與在ARM處理器上相似,在此不再詳述。
2.3 內(nèi)存管理
Nucleus提供分區(qū)內(nèi)存管理和動態(tài)內(nèi)存管理兩種方式,前者具有非常好的確定性,但不夠靈活;后者非常靈活,但內(nèi)存分配與回收的時延不夠確定。考慮到芯片基帶處理的內(nèi)存需求很明確,故選用分區(qū)內(nèi)存管理的方式。具體的內(nèi)存分配如圖4所示。
圖4 內(nèi)存分配示意圖
圖4中,Code Segment0使用Program TCM, Data Segment0使用Data TCM, X1643是哈佛結(jié)構(gòu),兩個TCM使用相同的地址空間。eDRAM起始地址為0x400000,總?cè)萘? MB,前一部分分配給代碼段,后一部分分配給數(shù)據(jù)段。內(nèi)存池起始地址在BSS段之后,結(jié)束地址為eDRAM末尾。Nucleus要求BSS段是鏈接時的最后的數(shù)據(jù)段,BSS后的空間保留給內(nèi)存池,不能被占用,但鏈接器在鏈接基帶處理中調(diào)用CEVA庫函數(shù)時看不到這個區(qū)域,須加鏈接約束,確保其位于BSS之前。
2.4 中斷管理
X1643有5個中斷源,其中INT0、INT1和INT2分別來自中頻、外設(所有外設中斷經(jīng)中斷控制器合成一個中斷源)和OS Tick Timer,INT3和INT4保留給X1643內(nèi)部Program和Data DMA,僅在啟動時使用,可采用查詢方式。在操作系統(tǒng)中只對INT0、INT1和INT2進行處理,且這三個中斷使用統(tǒng)一的通用中斷處理程序,通過ID來區(qū)分。在操作系統(tǒng)中,可調(diào)用NU_Register_LISR把每個低級中斷服務程序LISR注冊到中斷函數(shù)指針數(shù)組中。LISR耗時極短,僅能調(diào)用極少的系統(tǒng)服務,復雜的數(shù)據(jù)處理及系統(tǒng)調(diào)用可激活高級中斷服務程序HISR來完成。
當中斷發(fā)生時,處理流程如下:
(1)進入中斷入口,關中斷(硬件) ;
(2)設置中斷ID到a0,并保存a0原先的值到棧中,進入通用中斷處理程序;
(3)保存X1643寄存器到棧中(push);
(4)保存棧指針,切換棧指針到系統(tǒng)棧;
(5)跳轉(zhuǎn)到操作系統(tǒng)中斷服務入口,進行中斷處理(LISR);
(6)恢復棧指針;
(7)如中斷服務程序要求上下文切換,進行上下文切換(context switch,HISR);
(8)從棧中恢復X1643寄存器(pop);
(9)恢復中斷ID占用的a0寄存器;
(10)開中斷,中斷返回。
編譯器把X1643內(nèi)部寄存器分為兩類:Call-Used寄存器和Call-Saved寄存器[4]。為提高中斷處理效率、降低處理延遲,在步驟(3)、(8)中僅保存和恢復Call-Used寄存器。Call-Used寄存器主要有:
ACF(40-bit register):a0~a7,a16~a23
ARF:r0~r3,g1~g3,s0~s1,modu0,modu1
SRF :lcstep0,lcstep1, lci0~lci3
MSR和PR: mod0,moda
2.5 高級中斷和任務管理
Nucleus高級中斷可認為是一種優(yōu)先級較高的任務,兩者都有各自的堆??臻g,在創(chuàng)建時進行堆棧初始化,在調(diào)用之前要保存上下文(堆棧),在調(diào)用之后要恢復上下文(堆棧)。在移植操作系統(tǒng)時,重點關注的是高級中斷和任務與X1643體系結(jié)構(gòu)及編譯器密切相關的堆棧結(jié)構(gòu)及初始化、堆棧保存及恢復的實現(xiàn)過程。
Nucleus堆棧有兩種:Solicited Stack和Unsolicited Stack。堆棧初始值僅在第1次調(diào)用時會用到,此時真正需要通過堆棧得到的值是高級中斷和任務運行的地址及傳遞的參數(shù),大多數(shù)寄存器初值只要不影響運行,可不初始化。
Solicited Stack用于高級中斷,是一種minmum stack。在進入LISR時,已保存了Call-Used寄存器,Solicited Stack只須保存Call-Saved寄存器。Solicited Stack數(shù)據(jù)結(jié)構(gòu)是在C語言中聲明的。需要注意的是,X1643 ACF a8~a15是40 bit的寄存器,為使push/pop處理方便,高8位按“UINT32 a8e”方式聲明。此外,針對數(shù)字信號處理中大量運算都集中在循環(huán)執(zhí)行少量核心代碼上,為省去循環(huán)計數(shù)測試指令,X1643設置了最大4級嵌套的零消耗循環(huán)控制專門硬件(Block-Repeat Mechanism Register[3])來提高代碼執(zhí)行效率。用匯編語言編寫高性能循環(huán)代碼或用C語言編寫,且在加高級優(yōu)化選項編譯時會用到循環(huán)控制硬件寄存器,為確保程序運行正常,須初始化這4組寄存器為0。同樣在進行上下文切換時,須對這4組寄存器進行保存和恢復,這4組寄存器使用相同的名字,其保存匯編代碼如下:
bkst ;第1組
push{dw}bknest1 || push{dw} bknest0
;第2/3組與第1組操作類似,此處省略
bkst ;第4組
push{dw} bknest1 ||push{dw} bknest0
Unsolicited Stack用于任務,須保存當前所有寄存器,其初始化、保存及恢復操作與Solicited Stack類似,但因其包含了用于“飽和”、“?!钡炔僮鞯募拇嫫?,故須對MSR的mod0和moda進行初始化。
操作系統(tǒng)移植后的測試分兩步:首先應用Kernel Demo[2]進行基本功能測試;然后應用LTE230附著過程進行典型場景測試。
Kernel Demo創(chuàng)建了7個任務、1個消息隊列、1個信號量和1個事件組。Task_0是一個定時器任務,每隔1 s產(chǎn)生一個事件;Task_1是一個生產(chǎn)者任務,向隊列中發(fā)送消息;Task_2是一個消費者任務,從隊列中獲取消息;Task_3和Task_4使用相同的任務入口函數(shù)來競爭一個信號量;Task_5等待Task_0產(chǎn)生的事件,并對事件進行計數(shù);Task_6檢測串口按鍵輸入,輸出Task_0到Task_5的狀態(tài)信息。
LTE230附著是終端開機后與網(wǎng)絡建立連接的必要過程,包括小區(qū)搜索、隨機接入、MIB/SIB接收等步驟。在附著過程中,除OS Tick中斷外,還須處理中頻模塊收發(fā)相關的4個中斷、1個物理層定時中斷、發(fā)送和接收2個任務以及中斷與任務之間的信號量通信。
Kernel Demo和LTE230附著過程正常工作,表明操作系統(tǒng)的多任務調(diào)度、中斷處理及通信機制功能正常,在此基礎上,可進行完整的芯片驅(qū)動、LTE協(xié)議棧、TCP協(xié)議棧、業(yè)務通道處理等整個軟件系統(tǒng)的移植和測試。
本文詳細介紹了Nucleus在LTE230芯片上的移植過程和注意事項,目前移植的操作系統(tǒng)已在試點項目的通信模塊中穩(wěn)定運行了一年多,充分表明操作系統(tǒng)移植是很成功的。因操作系統(tǒng)移植是基于LTE230芯片的X1643進行的,故在移植過程中需對X1643內(nèi)核寄存器有深刻的理解,用匯編語言完成板級初始化及任務調(diào)度和中斷處理時對內(nèi)核寄存器的保存和恢復等操作,這是針對一款新的處理器進行操作系統(tǒng)移植的重點和難點。本文論述的方法對其他嵌入式實時操作系統(tǒng)在CEVA系列DSP核上進行移植也有重要的參考意義。
[1] 周春良,張峰,程倫,等. LTE230無線通信基帶芯片的設計與應用[J].電子技術應用,2015,41(12):48-50
[2]Mentor Graphics,Inc.. Nucleus Kernel Guide[Z].2013.
[3] CEVA,INC.. CEVA-X1643 Architecture Specification[Z].2012.
[4]CEAV,INC.. SmartNcode SDT Users Guides V9.2[Z].2011.
Porting of real time operating system Nucleus Plus on LTE230 chip
Zhou Chunliang1,2, Fan Wenjie1,2, Wang Liancheng1,2, Feng Xi1,2, Zhou Zhimei1,2,Tang Xiaoke1,2
(1. State Grid Key Laboratory of Power Industrial Chip Design and Analysis Technology, Beijing Smart-Chip Microelectronics Technology Co., Ltd., Beijing 100192, China; 2. Beijing Engineering Research Center of High-Reliability IC with Power Industrial Grade, Beijing Smart-Chip Microelectronics Technology Co., Ltd., Beijing 100192, China)
Based on the introduction of RTOS Nucleus Plus and LTE230 chip and its hardware platform, this paper discusses the transplantation process of Nucleus Plus in system startup, system initialization, memory management, interrupt management, high level interrupt and task management and testing in detail, and presents the important and difficult points in the course of Nucleus Plus porting. Currently the porting OS has been applied to LTE230 communication module successfully, and the performances of real time, task and interrupt management of the OS can meet the full requirements of system.
operating system of Nucleus Plus ; CEVA-X1643 DSP; porting; interrupt; task
TP316.2
A
10.19358/j.issn.1674- 7720.2017.01.007
周春良,樊文杰,王連成,等. 實時操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植[J].微型機與應用,2017,36(1):22-24,31.
2016-09-30)
周春良(1977-),男,碩士,高級工程師,主要研究方向:通信芯片與系統(tǒng)實現(xiàn)。
樊文杰(1982-),男,本科,工程師,主要研究方向:無線通信算法與芯片設計。
王連成(1968-),男,碩士,工程師,主要研究方向:集成電路設計。