Global Sources
電子工程專輯
 
電子工程專輯 > 嵌入式技術
 
 
嵌入式技術  

用於SoC設計的晶片上ROM代碼實現要點

上網時間: 2001年11月11日     打印版  Bookmark and Share  字型大小:  

關鍵字:on-chip ROM  SoC  bootstrap code  Flash loading process  code 

單晶片系統(SoC)越來越高的整合度給設計工程師帶來了極大的挑戰。在設計中必正確處理系統初始化、系統配置以及Flash編程算法等晶片上ROM代碼,要實現這些系統功能,軟體設計工程師必須充分了解硬體配置,軟體和硬體設計必須協調工作才能實現系統的最佳性能。

現在的單晶片系統一般在單個封裝內整合了微控制器、數位信號處理器、記憶體、周邊元件和連接外部元件的物理介面。在元件正常執行時還可以使用用於測試和驗証這些內部元件的部份韌體,設計工程師在用外部元件實現該韌體時需要考慮元件的功能作業及如何與其他可執行程式代碼介面。外部元件功能類型包括記憶體存取、晶片上周邊元件驅動、自舉和系統啟動。由於降低功耗是SoC設計的一個目標,因而減少外存存取都將降低設計的功耗。藉由在晶片上ROM中放置部份韌體,能加快記憶體存取並降低功耗。

本文將介紹在SoC設計中對系統啟動代碼的要求和挑戰,並討論如何配置不同的處理器設計以及在加電時如何啟動引導程式,其中很重要的一點是代碼在啟動時的執行。系統啟動代碼必須能檢測到是否需要執行Flash加載、是否執行診斷程式或執行正常系統初始化。本文還將介紹如何在晶片上ROM內實現啟動代碼以及如何處理未知的系統配置,文章中將重點介紹Flash記憶體的加載處理。Flash加載處理必須實現許多類型元件的Flash編程算法,當然代碼要很短。另外,Flash加載處理必須能與一個外部元件通訊以接收程式設計需要的數據。本文的目的是確定用於晶片上代碼的一些候選韌體並深入了解完成這一任務的要求。

電源與外部連接

假定本文所考慮的元件內包含一個微控制器、內部匯流排控制器、外部匯流排控制器、內部RAM/ROM、串列I/O埠、IrDA埠和外部Flash記憶體。當然,首先的設計考慮因素是當電源打開和復位時該元件需要做什麼。在加電復位時,元件必須檢查串列埠的外部元件連接,執行系統初始化和作業韌體(可以是驗証、診斷或功能代碼)。另外,在被測試單元的串列埠還連接了一個外部元件以加載韌體、執行測試、執行診斷處理程式並加載配置數據。這需要兩個條件:在加電復位時檢測元件連接並將執行權交給作業代碼。

首先,啟動代碼必須能夠檢測元件連接狀態,硬體設計必須向代碼提供這個狀態資訊。例如,外部元件可以使輸入設定在一個非缺省狀態。當被測試單元加電時,啟動代碼將讀取輸入管腳的狀態。當輸入管腳不是缺省狀態時,顯示連接了外部元件,該狀態顯示啟動代碼可以藉由串列埠傳輸資訊,這種狀態資訊將是可執行代碼。在設計階段必須確定使用哪一種通訊協議。

數據傳送完成後,啟動代碼(例如自舉碼)將執行控制權轉交給下載代碼。如果顯示沒有外部元件連接,韌體將執行控制權轉交給作業碼。

系統初始化代碼將設置系統的作業環境,包括硬體配置、RAM初始化、變量設置以及任何在作業碼之前需要執行的其他任務。作業韌體可能用於測試和驗証、診斷、功能作業或產品代碼。作為功能作業代碼的一個例子,本文中將討論Flash程式設計模組。

晶片上ROM代碼

晶片上ROM代碼中包含了啟動代碼,因此,在加電復位時,硬體必須存取內部ROM的第一條指令。由於啟動代碼在元件內是不能改變的,在設計時必須考慮到將來的變化,最關鍵的是代碼要盡可能簡捷。晶片上ROM代碼包括自舉、診斷、算法和函數等程式代碼。

如所上述,自舉碼負責檢查外部連接並將控制轉給下載代碼或作業代碼。例如,將串列埠設計成帶有一個發送暫存器、接收暫存器和一個控制/狀態暫存器。該控制埠的一位用來表示外部元件的連接狀態、TX暫存器空標誌位以及一個RX暫存器溢出標誌位。硬體在加電復位時必須將自舉碼的第一條指令地址放在地址匯流排上,首先要設置處理器和硬體以使代碼能夠執行。自舉碼將讀取串列埠的控制暫存器,如果外部元件連接狀態位不是處於缺省狀態,則將執行控制傳遞給下載處理。

記住,必須在SoC設計的初期定義通訊協議。藉由輪流檢測RX暫存器溢出標誌位的狀態,下載過程將從串列埠讀取數據。每讀取串列埠RX暫存器一次,RX暫存器溢出位就復位一次,這是由硬體來實現。下載過程使用數據的開頭幾個位元組來設置外部元件的數據傳送,開頭的幾個位元組包含目標地址、數據長度以及任何要求的硬體配置資訊。僅包含配置數據很重要,可以讀取串列埠並在期望的記憶體位置儲存數據。記憶體可以是內部記憶體或外部記憶體。

在診斷程式中還有另外一個晶片上ROM代碼的例子,如記憶體測試。記憶體測試在元件中使用頻繁,這些測試程式一般比較小,可以設計成使用參數化函數並檢查結果。這些函數放在晶片上ROM內,作為可能用到的函數資源,如測試地址匯流排的Walking Ones函數。另外,一個算法在藉由驗証後也可以成為晶片上ROM代碼的可用資源。

通訊協議

讓我們看一個簡單的通訊協議,該協議可用於自舉碼。由於自舉碼相對簡單,該通訊協議也必須簡單,該協議如表1所示:

(注:ED指外部元件,TD指目標元件)


ED: Driver input pin low


TD: Return ACK char


ED: Send first configuration byte


TD: Return ACK char


ED: Send n-2 configuration byte


TD: Return first configuration byte


ED: Send n-1 configuration byte


TD: Return n-2 configuration byte


ED: Send last configuration byte


TD: Return n-1 configuration byte


ED: Send load address byte n-3


TD: Return last configuration byte


ED: Send load address byte n-2


TD: Return load address byte n-3


ED: Send load address byte n-1


TD: Return load address byte n-2


ED: Send load address byte last


TD: Return load address byte n-1


ED: Send length byte n-1


TD: Return load address byte last


ED: Send length byte n


TD: Return length byte n-1


ED: Send ASCII char 0x7e


TD: Return length byte n


ED: Send data n-length


TD: Return ACK char


TD: ED: Send data n-length+1


TD: Return ACK char


ED: Send data n


TD: Return END char

以這種方式返回的數據能使外部元件檢測到通訊失敗。在所有數據均發送後,自舉程式將控制權傳遞到加載器程式代碼的加載地址。如果出現了一個錯誤,目標元件必須關閉電源,然後再加電,重新啟動該過程。另外還可能採用差錯處理、數據有效性驗証或者其他通訊功能。然而,最重要的是程式代碼要保持盡量簡捷。

加載器代碼將包含一個具備更強魯棒性的通訊協議,藉由該協議與外部元件間實現通訊。在這個加載程式執行期間,加載器可以查詢Flash記憶體來確定其類型。隨後,該資訊被發送給外部元件,外部元件將使用Flash類型標識來選擇適當的Flash程式算法並下載到加載程式。加載程式將該算法保存到內部RAM並用它對Flash編程。通常,Flash類型在產品的使用期內不會有太多的變化。然而,隨著新型Flash的開發,需要一個對加載程式升級的方法。同樣,一旦加載程式開發出來,維護就變成了一個很大的問題。最好的維護方法就是將維護功能在最初就設計到晶片內。

最好在元件外部完成Flash類型和編程算法的選擇過程。提供一個按要求加載的方法可以節省時間和成本,將加載程式模組化可以用在未來產品的開發中,能節省大量的時間。

完成測試後,要將外部元件斷開,關斷目標元件電源。在外部元件斷開後,加電復位時自舉碼將控制權傳送給裝入Flash記憶體的韌體。在這部份的設計上硬體和軟體設計工程師必須保持協調一致。Flash記憶體空間的第一個地址可以不是Flash記憶體。適合設計的創造性記憶體地址映射將非常有用,這也是為什麼SoC開發中協同設計非常重要的一個原因。其它的作業碼用與加載程式代碼一樣的方法加載,這些代碼可能是用於驗証或除錯元件執行的診斷或驗証測試代碼。產品作業韌體可以加載到內部記憶體中用於除錯。

執行並檢驗ROM駐留代碼所需的開發環境必須能存取模擬硬體。用儲存模型、指令集模擬器和硬體匯流排功能模型來加快硬體模擬器的執行。另外,在硬體模擬環境中還需要整合一個原始碼除錯器。當前,一些工具供應商提供能支援這種協同設計/驗証環境的工具。

對開發晶片上代碼而言,對硬體的理解非常關鍵。軟體和硬體設計工程師必須協調工作來實現最佳的設計。同樣,軟體設計工程師必須充分了解硬體配置,確保SoC正常地執行,諸如物理記憶體映射、匯流排時序以及匯流排大小等細節都會影響到韌體。在這段時間的任何調整和變化將會嚴重地影響產品的成敗。

在硬體設計和驗証期間開發的韌體不但允許晶片上編碼,還減少了總開發時間。由於大部份底層代碼工作可以開發、校驗並嵌入到外部元件,因此可以在元件生產後開始進行系統整合和高級軟體開發。





投票數:   加入我的最愛
我來評論 - 用於SoC設計的晶片上ROM代碼實現要點
評論:  
*  您還能輸入[0]個字
*驗證碼:
 
論壇熱門主題 熱門下載
 •   將邁入40歲的你...存款多少了  •  深入電容觸控技術就從這個問題開始
 •  我有一個數位電源的專利...  •  磷酸鋰鐵電池一問
 •   關於設備商公司的工程師(廠商)薪資前景  •  計算諧振轉換器的同步整流MOSFET功耗損失
 •   Touch sensor & MEMS controller  •  針對智慧電表PLC通訊應用的線路驅動器
 •   下週 深圳 llC 2012 關於PCB免費工具的研討會  •  邏輯閘的應用


EE人生人氣排行
 
返回頁首