DM816x,C6A816x,AM389x是TI新一代高性能SOC,系統集成度高,系統控制模塊化,架構與以往TI SOC平臺有所不同,本文針對最小系統的時鐘配置,電源管理,內存映射,內存配置的區別做深入解釋。
DM816x,C6A816x,AM389x引腳兼容(為方便討論,下面統稱DM816x),資源配置主要區別如下表所示,這種兼容系列產品便于用戶基于同一平臺,根據不同的產品需求選擇合適的型號,可以節省大量的硬件、系統軟件開發時間。
表1. DM816x, C6A816x, AM389x比較表
?
1.時鐘配置
DM816x內部有4個FAPLL(Flying Adder PLL,結構見圖1.1),分別負責不同模塊的時鐘配置,系統時鐘框圖見圖1.2。
?
圖1.1 Flying-Adder PLL框圖
?
圖1.2 DM816x系統時鐘結構圖
FAPLL相對于傳統的PLL具有精度高,響應快,減少模擬電路復雜度等優點,更適合于音視頻應用。從使用者的角度在DM816x上最直接的體現是它支持小數分頻系數,方便于產生需要的頻率。
每個FAPLL結構由兩部分組成:
1. Multiphase PLL。
2. Flying Adder Synthesizer.(可能有多個為不同模塊提供不同頻率的時鐘)
FAPLL的配置屬于Control Module的PLL部分。
Multiphase PLL的配置寄存器為相應的FAPLL控制寄存器,對應四個FAPLL分別為:MAINPLL_CTRL,DDRPLL_CTRL,VIDEOPLL_CTRL,AUDIOPLL_CTRL.Multiphase PLL的輸出時鐘頻率為:
?
Flying Adder Synthesizer的配置寄存器為相應FAPLL的PLL_FREQ和PLL_DIV寄存器,可能有多組對應多個Synthesizer.對應圖1.1中Fs和Fo的輸出頻率計算公式為:
?
FAPLL的配置參數不能任意選擇,在根據上述公式計算頻率的基礎上需要滿足下面公式的條件:
?
● A = 169 (如果AUDIOPLL的輸入源是從MAINPLL輸出的,則AUDIOPLL的A=218)。
● H = 10 (如果M*FREQ是8的倍數,否則H=0)。
●800MHz≤PLL_CLKIN*N/P≤1600MHz?? 10MHz≤PLL_CLKIN/P≤60MHz
● MIN CYCLE見表2
表2 PLL時鐘頻率
?
針對視頻應用,系統輸入時鐘CLKIN=27MHz,在EVM板提供的gel文件,UBOOT代碼里有提供合適的FAPLL配置參數。對于其它的輸入時鐘頻率,需要根據上面的條件計算合適的配置值。
CLKIN時鐘經過FAPLL后,送到PRCM進行選擇控制,給各模塊提供時鐘。以圖2.3Main PLL為例,框內部分由PRCM(Power Reset Control Module)控制,參考后面的PRCM部分。
?
圖2.3 MAIN PLL框圖
下面以MainPLL的Main PLL clock 1輸出為例說明時鐘的配置方法,MAINPLL_FREQ1寄存器定義見表3,MAINPLL_DIV1寄存器定義見表4.
表3 MAINPLL_FREQ1寄存器
?
表4 MAINPLL_DIV1寄存器
?
Main PLL clock 1輸出頻率計算公式如下:
?
PLL_FREQ寄存器小數分頻系數MAIN_FRACFREQ1部分的計算方法是:
DecToHex(Fraction * 2 24),如0.5的16進制小數=(0.5*224)= 0x800000。
同時需要注意的是PLL_FREQ的整數系數INTFREQ必須大于或等于8。
SYSCLK1的時鐘輸出為:
?
E為PRCM的CM_SYSCLK1_CLKSEL[CLKSEL]分頻系數選擇。
2.電源,復位,控制模塊配置
PRCM(Power Reset Control Module)是系統控制的樞紐。一方面控制系統模塊的正常供電,一方面可以將不用的模塊關閉達到省電的目的。
2.1 電源管理
電源管理模塊控制電源域的使能與關閉,共有的四個電源域為: Always On,Default, Active,SGX,視頻協處理器電源域IVAHD0,IVAHD1,IVAHD2是DM816x特有的。Always On電源域不能關閉,其它電源域由相應的PRCM.PM__PWRSTCTRL[POWERSTAT]寄存器控制電源的開關:
● PM_ACTIVE_PWRSTCTRL控制GEM,HDMI,HDD_SS.
● PM_DEFAULT_PWRSTCTRL控制TPDMA,DMM,DDR0/1,USB0/1,SATA,PCI,TPPSS,M3.
● PM_SGX_PWRSTCTRL控制3D圖形模塊。
● 三個視頻協處理分別由PM_IVAHD0_PWRSTCTRL,PM_IVAHD1_PWRSTCTRL,PM_IVAHD2_PWRSTCTRL控制。
通常一個電源域下包含多個模塊,如果同一電源域的某模塊需要繼續使用,則只能關閉其它不用的模塊的時鐘來達到省電的目的,而不能關閉整個電源域。
為了進一步達到省電的目的,對于使能的模塊,可以通過_SYSCONFIG. MIDLEMODE 或者 >Module>_SYSCONFIG寄存器的STANDBYMODE設置將其配置為smart-standby模式,在其沒有操作的時候,模塊自動關閉時鐘進入省電狀態,在有操作的時候,自動打開時鐘。不是每個模塊都可配置STANDYMODE,需要檢查相應的模塊是否有上述兩個寄存器之一。
2.2復位管理
芯片的復位分為兩大類:系統級復位和模塊級Local Reset。
2.2.1 系統級復位
表5列出了系統級復位的不同復位信號源分類,以及對芯片的不同影響。
表5 系統級復位分類
?
芯片的硬件復位分為上電復位(POR)和熱復位(WARM Reset),區別是Warm Reset不會復位仿真器的狀態,如果仿真器處于連接狀態則不會斷連。這兩種硬件復位都會讓芯片重新Boot.
PRCM的PRM_RSTCTRL寄存器控制用來設置以下兩種軟件全局復位:
● 軟件全局冷復位(Software Cold Global Reset)。
●軟件全局熱復位(Software Warm Global Reset) .
這兩種復位都不會使芯片重新Boot,區別同樣是軟件全局熱復位不會復位仿真邏輯。
仿真器復位,看門狗復位與PRCM的Software Warm Global Reset的作用是一樣的。
TRST復位是通過仿真器對芯片JTAG電路的復位控制,不會復位芯片的狀態。
2.2.2 局部復位Local Reset
局部子系統可以通過軟件控制復位狀態,一共有六個RM__RSTCTRL寄存器分別控制Always On之外的六個電源域下的局部子系統的復位:
● RM_ACTIVE_RSTCTRL控制DSP的復位;
●RM_DEFAULT_RSTCTRL控制PCIe,MMU和兩個M3的復位。
● RM_SGX_RSTCTRL控制SGX的復位。
● RM_IVAHD0_RSTCTRL,RM_IVAHD1_RSTCTRL,RM_IVAHD2_RSTCTRL控制視頻協處理的復位。
2.3 時鐘管理
時鐘經FAPLL(Flying Adder PLL)倍頻后輸入PRCM,PRCM對時鐘的控制管理分為三個方面:
● 模塊時鐘頻率的配置由CM__CLKSEL[CLKSEL]控制;
●時鐘域的開關由CM___CLKSTCTRL控制;
● 模塊時鐘開關由CM___CLKCTRL控制;
由上可以看出系統架構的劃分,首先是按電源域,然后按時鐘域,最后才是對模塊獨立的時鐘控制。為達到省電的目的,在不能對整個電源域關閉的情況下,要看時鐘域是否有模塊被使用,如果沒有,則可將時鐘域關閉,否則,就只能將相應的模塊時鐘關閉。
以系統中用到EMIF0,但不用EMIF1為例說明如何配置PRCM控制電源域,時鐘域,以及模塊時鐘。
● EMIF屬于Default電源域,PM_DEFAULT_PWRSTCTRL寄存器只有一個控制位控制整個default電源域的開關,因為EMIF0要使能,所以這個寄存器必需使能,也就是不能關閉整個default電源域。
WR_MEM_32(PM_DEFAULT_PWRSTCTR, 0x2);
while((RD_MEM_32(PM_DEFAULT_PWRSTCTR) & 0x3000)!=0x3000);
● 配置EMIF的時鐘域,EMIF時鐘屬于L3_FAST_DEFAULT_GCLK時鐘域,由寄存器CM_DEFAULT_L3_FAST_CLKSTCTRL 控制,DMM,EMIF_FW也屬于這個時鐘域,所以這個時鐘域需要使能。
WR_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL, 0x2);
while((RD_MEM_32(CM_DEFAULT_L3_FAST_CLKSTCTRL) & 0x300)!=0x300);
● 配置EMIF模塊時鐘,EMIF0,EMIF1的模塊時鐘分別由CM_DEFAULT_EMIF_0_CLKCTRL和CM_DEFAULT_EMIF_1_CLKCTRL單獨控制。
WR_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL, 0x2); // Enable EMIF0 Clock
while(RD_MEM_32(CM_DEFAULT_EMIF_0_CLKCTRL)!=0x2);
WR_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL, 0x0); // Disable EMIF1 Clock
while((RD_MEM_32(CM_DEFAULT_EMIF_1_CLKCTRL) & 0x3000)!=0x3000);
3.DSP MMU配置
DM816x DSP上首次使用了MMU,MMU(Memory Management Unit)的作用是:
● 提供硬件機制的虛擬地址與物理地址轉換;
● 提供硬件機制的內存訪問權限授權。
對于支持多進程的HLOS(High Level Operation System),OS利用MMU的地址轉換功能可以為每個進程提供獨立的地址空間。但對于DSP來說,通常不運行HLOS, 這種功能得不到體現。
在ARM+DSP的雙核SOC架構上,所有外設包括內存空間都是共享的,平等訪問,這樣的架構有很多好處,比如在兩個核間共享數據很高效,只需要傳遞數據的指針,不需要做數據的拷貝;但是帶來的問題是需要用戶程序保證不會非法改寫另一個核的程序數據空間,否則會導致系統崩潰,而且這種問題導致的現象不確定,通常難以精確定位。
ARM上的HLOS如Linux的內存管理,可以保證不會非法訪問系統管理之外的空間。在以往的DaVinci系列芯片上DSP沒有MMU,需要用戶保證DSP程序不會非法訪問ARM的程序和數據空間。DM8168的DSP上使用MMU以硬件方式提供了內存訪問授權,使內存訪問越界問題的定位變得格外容易, MMU的錯誤狀態寄存器會記錄越界訪問,并且MMU_FAULT_AD會記錄最近通過MMU的訪問地址。
MMU可以工作在旁通模式,即不對地址做映射,但是在DM816x上GPMC的系統地址空間于0x0地址開始,與DSP的片內地址空間重疊,如果DSP需要訪問GPMC,必需要通過MMU將GPMC的空間映射到虛擬空間。
MMU的TLB(Translation Look-aside Buffer)配置分為兩種:TWL(Table Walking Logic)模式,和靜態TLB模式;TWL模式功能靈活,靜態TLB模式轉換效率高[5].
通常DSP上不運行HLOS,建議采用靜態TLB模式。一張超級映射表可以映射16MByte空間,TLB共可容納32張表,最多可以映射512MByte空間。由于外設通常由ARM控制,DSP訪問部分GPMC和部分DDR空間,以及部分外設,所以512MByte空間能滿足絕大多數應用的DSP訪問空間需求。目前UBoot中沒有DSP MMU的配置,用戶在DSP訪問片外空間之前完成MMU的配置即可。
4 DDR配置
DM816x的DDR控制器兼容支持DDR2和DDR3;有兩個獨立的控制器,各有兩個片選;每個DDR控制器的地址空間為1GByte;與TI以往處理器不同的是在DM816x上片選與地址空間的映射是可配置的,每個片選上的地址空間大小也是可配置的。所以在DM816x上的DDR配置分為三部分:
●DDR時鐘配置
●DDR地址空間映射,
●DDR時序配置
4.1 DDR時鐘配置
DDR時鐘FAPLL配置計算方法參見前面時鐘配置部分。DDR時鐘包括兩部分:接口時鐘,模塊功能時鐘。
接口時鐘即FDDR_CLK由DDR FAPLL的Fvco經DDRPLL_DIV1分頻輸出。
DDR模塊功能時鐘FSYSCLK8固定為400MHz以與內部總線L3時鐘同步, 無論DDR接口時鐘多少,都將SYSCLK8配置為400MHz.
DDR時鐘計算公式:
?
4.2 DDR地址空間映射
DDR空間尋址范圍共2GB,最多可分為4段,通過DMM的DMM_LISA_MAP0~3分別配置EMIF0的CS0,CS1和EMIF1的CS0和CS1的首地址映射,及兩個DDR控制器之間的尋址方式。兩個DDR控制器之間的尋址方式有兩種模式:非交織訪問,交織訪問。
非交織訪問,即兩個控制器的尋址在各自的映射范圍內線性遞增。如果希望將ARM與DSP的內存空間在物理上分開,可以選擇這種模式。當只使用一個控制器時,只能使用非交織的線性尋址模式。
交織訪問,即雙通道內存技術,當訪問在控制器A上進行時,控制器B為下一次訪問做準備,數據訪問在兩個控制器上交替進行,從而提高DDR吞吐率。支持128byte,256byte,512byte的交織模式。如果要使用交織模式,要保證兩個控制器上有對稱的物理內存:即兩塊內存大小一致;在各自的控制器上的地址映射一致。
以兩個控制器上的CS0,CS1各接512MByte內存,共2GByte內存為例,非交織線性訪問模式的配置為:
/*Program the DMM to Access EMIF0*/
WR_MEM_32(DMM_LISA_MAP__0, 0x80500100);
WR_MEM_32(DMM_LISA_MAP__1, 0xA0500120);
/*Program the DMM to Access EMIF1*/
WR_MEM_32(DMM_LISA_MAP__2, 0xC0500200);
WR_MEM_32(DMM_LISA_MAP__3, 0xE0500220);
示意圖見4.1.
?
圖4.1 線性訪問模式
在線性訪問模式下,系統送出的物理地址在控制器上線性遞增尋址,圖4.2為線性模式的物理尋址示意圖。
?
圖4.2 線性訪問物理地址尋址。
128-byte交織訪問模式的配置為:
/*Program the DMM to Access EMIF0 and 1*/
// Interleaved 1GB section from 0x80000000 on EMIF0 CS0 and EMIF1 CS0
WR_MEM_32(DMM_LISA_MAP__0, 0x80640300);
// Interleaved 1GB section from 0xC0000000 on EMIF0 CS1 and EMIF1 CS1
WR_MEM_32(DMM_LISA_MAP__1, 0xC0640320);
WR_MEM_32(DMM_LISA_MAP__2, 0x80640300);
WR_MEM_32(DMM_LISA_MAP__3, 0xC0640320);
圖4.3為交織訪問模式下系統地址在控制器尋址訪問的示意圖。
?
圖4.3 交織訪問模式
在交織訪問模式下,系統送出的物理地址在兩個控制器上交替訪問,圖4.4為128Byte交織模式的物理尋址示意圖。
?
圖4.4 交織訪問物理地址尋址
4.3 DDR時序配置
DM816x 目前版本的DDR3控制器不支持硬件自動 Leveling,支持軟件leveling,運用參考文獻[3]的工具,根據DDR布線計算出leveling種子,將計算結果更新到UBoot的ddr_def.h文件中。每次重新布板后,都需要重新計算leveling.工具中提供的配置基于4*8bit的,如果是用2x16bit的配置,那么在RatioSeed.xls中DQS0=DQS1,DQS2=DQS3;CK0=CK1,CK2=CK3.
結束語
閱讀本文請結合EVM板的gel文件,DM8168 EZSDK[7] UBoot源碼的board\ti\ti8168\evm.c文件的s_init()函數。
評論
查看更多