定製整合系統單晶片(SoC)設計是代替多個單晶片及支援電路(以及PCB空間和走線)的一種良好途徑。這樣做的好處包括:節省空間、節省功率、節省費用。不過還有一個問題需要考慮。傳統的非SoC設計可以在設計階段隨時進行測試、探查和監視,不需要提前規劃。即使電路板上沒有露出需要的測試點,但幾乎任何一個技術人員都能在需要的地方焊一根測試接腳出來。但當設計是高度整合的SoC時,情況就不是這樣了,在設計晚期進行的除錯和最佳化將變得異常痛苦,除非你有很好的策略和內建支援功能。
IC製造商面臨這樣的問題已經很久了,當我們設計自己的定製晶片時可借鑒他們的做法。通常可使用以下三種方法:內建測試向量、內建命令驅動的監視器(command-driven supervisor)或背景除錯器(background debugger)。內建測試向量的問題在於向量設計。為了定義合適的向量,你必須十分熟悉所期望的行為,因此這種方法更適合底層功能測試,不適合用於整個系統的最佳化。對SoC來說,內建命令主導的監視器是更好的一種方式,因為它支援特殊的測試和除錯作業,也即意味著在開始之前你不需要完全瞭解你要測試的內容。內建命令為主導的監視器也有缺點,因為這種除錯是插入式的,你無法獲得真實、即時的特性。
採用背景除錯器似乎是最簡單也是最好的方法。執行、除錯和最佳化設計完全在實際環境中進行,你可以即興地調整,並隨時修改方法。本文將詳細介紹專門為SoC最佳化而開發的背景除錯器,我們稱之為調整器(Tuner)。其中的一個用例是電容式觸控感應SoC。硬體採用Cypress公司的CY8C21434。這是一款SoC元件,包含電容檢測、I2C通訊、通用I/O以及具有快閃記憶體和SRAM的一個8位元微控制器。我們的示例系統是由一個電容式按鍵、一個16段電容性線性滑條(採用雙工方式以便單個接腳可連接到兩個不同段)和一個用於結果通訊的400KHz I2C從介面。該介面也作為背景除錯器的傳送層。
背景除錯器由一個I2C從通訊模組組成,該模組用於存取一組雙映射(dual-mapped)SRAM暫存器和快閃記憶體常數(flash constant)。I2C從介面只存取那些已經指定可存取的I2C主設備。具體來說,I2C從設備只能讀取指定的SRAM暫存器,且使用基於標準暫存器的子尋址SRAM存取機制(I2C主設備向從設備寫入第一個位元組以設置偏移指針,然後從偏移指針指示的暫存器開始讀回一個或多個位元組)。在快閃記憶體常數方面,I2C從介面有額外的命令用於存取快閃記憶體常數,將常數拷貝到SRAM並將常數從SRAM寫到快閃記憶體。當常數在SRAM中時,它們被當作SRAM暫存器使用,並採用相同的基於暫存器的子尋址(sub-addressing)機制。
SRAM暫存器中的值是系統的動態值,像滑條位置和按鍵狀態‘結果’以及較低層值都有助於我們的系統判斷按下了哪個鍵或哪段滑條段。透過讓外部得到或讀取所有動態值,因此我們可以設計一個外部調整器來實現系統的可視化,並提供一個窗口來觀察內部正在產生的實際情況。另外,任何標準I2C主設備都能讀取這些暫存器,並記錄這些數據用於進一步分析。
而常數則可用來控制系統行為的一些屬性。例如,‘手指閾值’(FingerThreshold)值控制著某個閾值電平,在此電平點的電容或手指觸控被認為足夠觸發按鍵按下檢測。一旦將SoC放進硬體電路,我們就可以透過動態值觀察系統性能和調整常數屬性,直到我們的系統得到最佳的性能。
現在我們擁有了一個完整的SoC,擁有了一個內建的背景除錯器,設立了動態值用於讀取存取(保護我們的系統免於外部干擾),並且開發了行為屬性常數以及用於存取和更新屬性的協議。雖然我們還沒有瞭解協議的細節,但值得一提的是,它包含了關鍵的密鑰和特殊編碼的命令標記,可防止來自外部的無意或錯誤更改。下面再讓我們透過調整過程瞭解SoC內設立背景除錯器的實際值。
圖1a是我們已經設計好的CapSense按鍵調整GUI,它執行於標準的Windows電腦上。順便提一下,這是Cypress開發工具PSoC Designer的一種內建特性,它利用一片便宜的USB-I2C主介面板來實現與SoC設計通訊。在調整窗口的左上端是一個標記有‘按鍵屬性’標籤的區塊,它包含有4個源自我們常數表的特殊按鍵屬性。下方是標記為‘全局屬性’的一個區塊,它所含的屬性可以被所有容性函數共享。每個屬性都有一個下拉和/或輸入框,因此它的值可以改變。左邊最後一個區塊的標記是‘變量觀察’,它有4個動態值,這些值可以根據與容性按鍵相關的SRAM暫存器進行即時更新。
在圖1a中,我們用一片服務卡覆蓋了裸露的PCB,並且所有其它屬性處於它們默認的狀態。如果我們現在開始調整屬性,並將之應用於系統,調整GUI就會以數位方式顯示出我們作業的結果。在圖1b中,參考值(Ref Value)從4增加到了6,因而減少了按鍵靈敏度。在用與圖1a相同的手指觸控時,你會發現訊號電平低得多,而且低於手指閾值。根據我們想要按鍵在系統中有多大的靈敏度,我們可以設置‘Ref Value’值,並快速驗證硬體會如何工作。其它屬性同樣可以用這種按鍵調整GUI進行即時瞭解和調整。
從上述調整過程例子中我們可以發現,背景除錯器與電腦上的可視化GUI能夠幫助我們在實際硬體上快速評估和最佳化系統中容性按鍵的性能。可視化調整GUI的好處是你可以針對不同的應用以不同的方式表達可用數據。圖2提供了滑條的調整GUI,這是一個雙工16段電容線性滑條,它將兩個段以不同的順序連接到了相同接腳。對於雙向滑條來說,不高不低正好合適的訊號電平對確定真正的手指位置來說至關重要,並有助於區分滑條另外一半上的雙工訊號擴展。
因此大家可以看到,由於在單個SoC中整合了大量電路,隱藏了探測中間訊號的所有可能性,因此你不必盲目地進行設計。透過插入背景除錯器(包含必要的保護措施以防止對感應值的無意或惡意存取)和使用調整與可視化工具,即使是整合度最高的元件,也能高效地除錯和最佳化。
 圖1a:覆蓋PCB,Ref Value =4。圖1b:覆蓋後的PCB,Ref Value=6。
 圖2:16段雙向滑條,裸露PCB,手指在第5段上。
|