盡窺FPGA內部運作 核心輔助式除錯法增強探查能力

2006-08-17
FPGA晶片經常用於複雜的系統設計,為了進行除錯,必須查看FPGA內部運作狀況,但可用來探查內部訊號的接腳數卻相當有限,導致除錯工作困難重重。核心輔助式除錯法藉由在晶片插入除錯核心,只須花少許功夫,就可放入FPGA中,且可在開發過程的後期加入,輔以外部量測儀器,可大幅縮短量測時間,並且更容易找出問題。
FPGA晶片經常用於複雜的系統設計,為了進行除錯,必須查看FPGA內部運作狀況,但可用來探查內部訊號的接腳數卻相當有限,導致除錯工作困難重重。核心輔助式除錯法藉由在晶片插入除錯核心,只須花少許功夫,就可放入FPGA中,且可在開發過程的後期加入,輔以外部量測儀器,可大幅縮短量測時間,並且更容易找出問題。  

對全球無數設計團隊來說,現場可編程閘陣列(FPGA)已經成為硬體設計的主軸。FPGA可提供的元件密度愈來愈高,而且具有許多其他功能,例如可支援多種輸出入標準、記憶體、處理器和高速序列匯流排等。由於能提供高階功能,加上整合度高,使FPGA成為設計複雜的系統或子系統時極具吸引力的選擇。  

然而,由於關鍵的硬體和軟體交互運行全都在FPGA內部進行,因此亟須查看FPGA內部運作狀況,但一般可用來探查內部訊號的接腳數卻相當有限。在接腳數有限、無法盡窺內部運作的情況下,除錯工作困難重重。缺乏量測引導,全憑直覺與猜測,往往難以找出問題所在,也會延誤專案完成時間。  

從事FPGA除錯時面臨的一個主要問題是,如何透過固定的接腳數提高探查內部狀況的能力。核心輔助式除錯法(Core-assisted Debug)可提供快速驗證所需的深入資訊,對設計人員來說相當具有吸引力,這項技術的發展可追溯至2002年。以安捷倫科技為例,運用核心輔助式除錯技術的量測設備已具備可量測晶片內部訊號的能力。2004年,安捷倫針對邏輯分析儀和MSO混合訊號示波器,推出FPGA動態探棒產品。2005年與賽靈思(Xilinx)合作,加入自動設定功能,2006年進一步將賽靈思Virtex 5系列納入支援。本文比較不同核心輔助式除錯方法的差異,並提供一個範例,說明運用FPGA動態探棒為記憶體子系統除錯的過程。  

內部電路測試節省模擬時間  

對於特殊應用積體電路(ASIC)設計團隊來說,模擬是極為重要的步驟,但是採用FPGA進行設計卻能跳過模擬,直接做出原型。由於這項技術可以重新燒錄,而且可因應規格改變,因此FPGA往往成為最後一個硬體設計區塊。如此一來,完成FPGA設計並在系統中進行測試的壓力就變得相當高。如果可以進行值得信賴的量測,那麼只須執行幾秒鐘的內部電路測試,就可得到與數天或數週的模擬結果同樣多的深入資訊。  

遺憾的是,雖然FPGA中可容納的電路數量已經巨幅增加,但可用的接腳數卻未相對增加。接腳仍然是相當珍貴的資源,設計團隊通常會預留幾支接腳(一般為0~32個)專為除錯之用,這些量測埠是極為重要的管道,可將內部訊號繞接出來量測。設計團隊可透過每一個專門用來除錯的接腳,探量單一訊號。若要新增須量測的訊號,就必須變更設計、重新合成,以及重新進行擺放和繞接,這樣一來不僅耗時,而且也可能改變元件的時序。  

核心輔助式的除錯方法須將額外的量測電路加入FPGA中,以利進行更好、更快速的量測。一直以來,率先採用這種方法的許多設計團隊,都是自行加入多工器,透過固定的接腳數來探量更多的訊號,今天仍有相當比例的設計團隊使用這種方法。雖然這種做法可透過固定的接腳數探量到更多的訊號,但在設定外部儀器(如示波器或邏輯分析儀)的相關參數上,則無法提供任何幫助。  

晶片內建除錯核心加速測試  

此外,每一個團隊都必須自行設計一種控制多工器的方法,這項額外增加的設計工作無助於提升設計價值,反而會因為必須設計除錯方法,而耗掉一些原本可以用來設計FPGA本身的資源。目前已有廠商提供商用版晶片內建除錯核心(On-chip Debug Core),只需少許功夫,就可放入FPGA中,且可以在開發過程的後期加入。  

為了說明晶片內建除錯核心,本文以安捷倫第二代追蹤核心(ATC2)為範例說明。透過賽靈思ChipScope Pro核心插入器(Core Inserter),可將ATC2核心加入晶片中。核心插入器可將選取的輸入訊號名稱存入可被邏輯分析儀讀取的檔案中,以自動匯入訊號的名稱。ATC2核心可讓設計人員在三秒或更短時間內,切換欲連接的接腳上進行訊號量測。每一個ATC2核心都可透過參數設定為最少一個訊號組(Bank)或最多64個訊號組。  

商用的晶片內建除錯核心有兩種,皆使用JTAG做為主要通訊工具(表1)。第一種不須增加接腳數,即可提供內部訊號量測能力,因為這種量測是在FPGA內部執行,結果也是儲存在內部。例如可使用FPGA內部資源,建構出邏輯分析儀和訊號軌跡記憶體。這類除錯核心最常見的是內建的邏輯分析儀,所有主要FPGA廠商都提供這種除錯核心。第二種除錯核心則透過一些接腳和少量的FPGA資源來提供內部訊號量測能力,內部訊號會繞接到外部量測設備上加以擷取。這兩種方式各自適合特定類型的問題和量測需求採用。  

FPGA廠商提供的商用邏輯分析核心可透過參數設定,快速產生特定量測所需的量測電路。使用者可在設計的環境中,選擇所要量測的訊號,通常是在網表(Netlist)層級上進行。設計團隊如須針對很多訊號進行觸發或量測,這種做法相當有效。而且如果沒有多餘接腳可供除錯之用,那麼這也是唯一可量測內部訊號的方法。由於量測結果儲存在晶片上,因此該核心可提供狀態分析(不含時序),並使用晶片內建記憶體。但因設計本身可能已耗用大量晶片內建記憶體,使得可用於除錯的容量有限,會影響可量測的訊號數目,以及量測資料的儲存深度。  

運用外部儀器量測 耗用晶片資源最少  

FPGA廠商也可提供外部儀器,以便進行量測,但用以控制核心的軟體通常來自量測設備廠商。只需幾分鐘,即可設定好除錯核心的各項參數,包括接腳數、速度、輸出入標準等,而輸入訊號的選擇通常也是在網表的層級上進行。如果想透過固定的接腳數,探量到最多內部訊號,採用這種方法最有效。由於量測是在晶片外的儀器上進行,因此核心建置所耗用的晶片內部資源最少。此外,所能記錄的量測結果也較多,可涵蓋更長的量測時間。  

商用的除錯核心有試用版,不須額外花費即可取得。例如賽靈思ChipScope Pro提供30天試用期,可在網站下載。該工具包含的核心可經過參數設定後,加入原有的FPGA設計中。之後,設計人員可以檢閱時序報告,看看加入除錯核心後,原來的設計會受到什麼影響。這是一種快速又簡單的方法,可在實際投資購買工具或測試設備之前,先評估加入除錯核心可能帶來的影響。  

除錯核心可能影響元件時序  

最主要的衝擊應該是加入除錯核心時,對元件時序造成的影響。還有一個考量是,加入除錯核心後,問題可能會隱匿不見。設計團隊可詢問供應商有關其置入方法對元件時序的影響程度。舉例來說,安捷倫ATC2核心採用的是多階式管線處理(Multi-stage Pipelining)方法,以減輕對元件時序造成的影響。靠近所要量測的訊號之處會放置一個正反器(Flop),讓該訊號在一個時脈週期中,只須前進這一小段的距離即可。在下一個時脈週期中,該訊號會被儲存在下一個正反器內。ATC2核心在訊號離開晶片之前,會經過四個管線處理階段,如此可減少對元件時序造成的改變,讓除錯核心可以成功置入各種設計中。  

大部分的商用解決方案在設計時都假定:除錯的需求通常不會事先規畫。舉例來說,如果設計團隊預留了專供除錯之用的接腳,這就是唯一規畫好的需求,可以放入一個除錯核心,方便外部儀器進行量測。雖然可以在硬體描述語言(HDL)的層級加入核心,但設計團隊通常會選擇在網表的層級上,於合成完成後才加入。這樣做有一個很大的好處,就是不須修改原來的HDL設計,即可加入或移除核心。設計人員不須深入了解核心建構方式,就可快速將核心加入,只需10~20分鐘即可完成。而且,接著將除錯核心與設計互相結合的時候,擺放與繞接方式也會符合原始設計的限制條件。  

雖然能夠探查大量的內部訊號仍然是一個主要訴求,但方便進行快速的儀器設定,則是核心輔助式除錯法的另一項特點。在此舉例說明在設定外部邏輯分析量測作業時須完成的事項。  

以下是將單一個訊號繞接出來,並完成邏輯分析量測設定須採取的步驟:第一步,修改設計,將內部訊號繞接到接腳上;第二步,合成設計;第三步,進行擺放和繞接;第四步,決定該接腳要繞接到印刷電路板上的哪個地方;第五步,決定要將哪個邏輯分析儀頻道連接到印刷電路板上的這個點;第六步,在邏輯分析儀中輸入訊號名稱,以便將它指定到該特定的頻道進行量測。這一連串工作既容易出錯,也很耗時,且對量測或量測分析本身沒有特別的價值。  

核心輔助式的儀器設定功能,可將啟始設定時間從大約一小時縮短為一分鐘。舉例來說,在分析儀應用軟體中按一下滑鼠鍵,就可告訴安捷倫ATC2核心以一次一支接腳的方式,送出一個訓練碼型(Training Pattern)到每一支接腳上。邏輯分析儀會在所有的頻道上搜尋此訓練碼型,當找到該訓練碼型時,會將送出該碼型的接腳與找到該碼型的邏輯分析儀頻道關聯在一起。這樣的對應過程會針對每一支接腳反覆執行,而每一支接腳的對應時間大約為一秒鐘。  

晶片除錯核心增加自動化設定功能  

各廠商已開始將自動化設定功能設計在晶片內建的除錯核心中,舉例來說,安捷倫ATC2核心可將FPGA內部訊號的邏輯分析量測設定作業自動化,消除出錯的可能性,而且可將設定時間從一小時縮短為不到一分鐘。前面所列的多個步驟可精簡成兩個自動化步驟,邏輯分析儀透過JTAG送一個命令給ATC2核心,告訴它以一次一支接腳的方式,送出一個訓練碼型到每一支接腳上。當邏輯分析儀在其中一個頻道上看到此訓練碼型時,會將該頻道與送出該訓練碼型的接腳關聯在一起,只需幾秒鐘,就可完全確定每一個邏輯分析儀頻道與對應之FPGA接腳之間的實體路徑。  

此外,邏輯分析儀也可讀取包含所有ATC2輸入訊號名稱的檔案,這樣一來,就不須在邏輯分析儀中手動輸入訊號名稱。任何團隊成員都能隨意連接邏輯分析儀的頻道與FPGA的除錯接腳,自動化的接腳對應功能和訊號名稱匯入能力可讓邏輯分析儀在幾秒鐘內確定實體連接關係,並且自動完成所有必要的量測設定。  

由於只要做少許的設計流程改變,設計團隊就可準確觀察加入晶片內建的除錯核心對FPGA可用資源和時序有何影響。將量測結果儲存在內部除錯核心,或是儲存在外部除錯核心,這兩者方式是互補的,選擇何種方式,則取決於研發資源的取捨。  

DDR2 SDRAM子系統除錯範例參考  

以下是採用核心輔助式除錯方法的一個實例:某個工程團隊須針對資料路徑很密集的應用,開發合適的記憶體子系統。在競爭壓力下,該團隊必須以最快速度開發出高速記憶體系統。這樣的設計目標促使該團隊必須使用高速且大型的賽靈思FPGA做為記憶體控制器。這個FPGA被設計成ASIC和記憶體間的SDRAM記憶體控制器,必須能驅動266MHz的雙倍速(DDR)記憶體。第一次啟動記憶體系統時,發現無法從記憶體讀取資料或寫入記憶體。  

面對一個功能尚未完整的系統時,須使用碼型產生器來提供激發訊號,以便引發記憶體寫入動作,這樣可讓設計團隊將已知的激發訊號輸入記憶體子系統中進行測試。由於輸入記憶體的訊號具有快速的訊號緣,因而會有訊號完整性的問題,因此直接探量記憶體並不可行。於是,設計團隊選擇採取另一種較合適的做法,那就是從FPGA內部探量輸入記憶體的資料,再將這些訊號繞接到外部的邏輯分析儀上。  

設計師將除錯工作分成兩個部分:對記憶體的讀取和寫入。設計團隊只分配FPGA上的8支接腳,做為探查內部訊號的除錯埠。直覺認為寫入的問題可能與內部的狀態機(State Machine)以及此狀態機與資料路徑間的關係有關。可惜的是,由於可以用來除錯的接腳數有限,因此設計團隊無法繞接出足夠的訊號,以利判斷問題所在。  

設計團隊的下一種做法,是在晶片中插入邏輯分析儀,以追蹤大量的訊號。雖然如此可看到較多訊號,但內建的邏輯分析儀核心只能進行同步資料追蹤,而且只能重製出症狀而已。  

設計團隊運用碼型產生器,將一個已知的碼型饋入記憶體子系統的輸入端,再從FPGA內部擷取量測結果後發現,寫入記憶體的資料與原始的激發訊號並不相符。不過,只憑藉此狀態資料,可以確定寫入動作並不正確,卻無法得知原因何在。  

設計團隊決定產生一個ATC2的時序核心,並將它加到FPGA中。ATC2時序核心對元件的時序幾乎沒有影響,因為每一個被探量的訊號只會增加一個額外的接線負載,如此一來,該設計的擺放和繞接方式幾乎與不含時序核心時的情況完全一樣。設計人員可由賽靈思ISE的時序報告得知,欲量測的8個訊號間所計算出的時序不對稱(Skew)程度如何。  

時序核心的主要優點在於可以運用外部的邏輯分析儀,以250微微秒(ps)的解析度對內部訊號進行非同步取樣。團隊成員很快就確定寫入的問題導因於時脈和所關聯之資料間的相位延遲,時脈與資料在同一個時間點進行轉態,如圖1所示。解決方式則是藉由修改FPGA中一個暫存器的值,試著讓資料時間對齊,當時間正確對齊後,資料毀損的問題迎刃而解(圖2)。  

接下來,要努力的是讓記憶體的讀取動作也能正確執行。由ATC2時序核心著手,很快發現該設計有其他問題,與違反設定/維持時間(Setup/Hold Time)有關。  

運用含多個輸入訊號組的時序核心,可以快速探量輸入的資料串,以及驗證記憶體的寫入是否正確。只需幾秒,就可量測出內部的狀態機出了什麼問題,也可切換到另一個訊號組,以驗證記憶體的讀取動作是否正確。  

每一個訊號組通常包含幾個狀態機的訊號和一些資料路徑的訊號。運用核心輔助式的除錯方法,可成功縮短數個月的開發時間,且推出既穩定又可靠的產品。  

(本文作者任職於安捷倫科技)  

(詳細圖表請見新通訊元件雜誌66期8月號)  

 

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!