江正斌,周建偉,李德安,彭崇梅,袁國順
(1.河北工業(yè)大學 微電子研究所,天津300130;2.北京中科微電子技術有限公司 研發(fā)部,北京100029;)
隨著片上系統(tǒng)集成度越來越高,嵌入式技術得到廣泛應用,尤其是在消費電子產品中的應用,芯片在線仿真器(In-Circuit Emulator,ICE)的研發(fā)也變得越來越重要,然而市場上的大部分ICE都是適用于幾款或一個系列的芯片,市場中的BD12000、TRACE32等通用仿真器并不能滿足需求,一些提出通用仿真器的方案卻并沒有提出調試模塊的IPcore具體的實現方法[1-4]。使得開發(fā)人員在開發(fā)相應在線仿真器時,周期大幅增長,成本相應增加?;诖耍岢鲆环N具體實現調試模塊IPcore的方法,實現通用性,縮短開發(fā)周期,減少成本。整個過程的開發(fā)選擇了在Xilinx Spartan系列XC3S700AN開發(fā)板套件中進行。
仿真器從應用性角度可分為兩類:(1)特定在線仿真器。包括使用BDM、JTAG等,屬某一類或者某一系列的。(2)通用型仿真器。一類是用硬件搭建程序來實現的,這種仿真器并沒有很好的適用度,但可以作為基本的開發(fā)實驗,另一類則是基于FPGA用IP核來實現[5-9],將要實現ICE的所有IP軟核下載到FPGA中實現,這種方案雖然通用,然而受調試模塊IP的限制,想要針對不同處理器進行ICE開發(fā)需要較長的周期,且沒有固定的方案,可重復率較小,基于此,文中列出實現ICE調試模塊IP的詳細框架,并列出時鐘控制塊的詳細邏輯,使得其重復利用率大幅提高,縮短了開發(fā)周期。
一般通用在線仿真器系統(tǒng)的實現可以分為:PC端軟件部分,USB(Universal Serial Bus)接口部分和以FPGA為主的硬件部分,3個部分缺一不可。從實現功能上來說,以FPGA為主的硬件部分是ICE機制實現的關鍵[10-12]。圖1為在線仿真器實現的系統(tǒng)圖。
圖1 ICE機制實現流程圖
PC端軟件部分和USB的接口部分為在線仿真器提供了方便,而整個ICE硬件電路的實現則需要在FPGA上實現,硬件電路的質量直接決定著在線仿真器的質量,而調試模塊則又是實現ICE機制的關鍵。
圖2中雙向箭頭表示數據經過調試模塊通過USB和電腦端進行雙向通訊,電腦端發(fā)數據到FPGA視為寫數據,FPGA向電腦端發(fā)數據視為讀過程,整個框圖表示的其實是一個讀寫的狀態(tài)機,FPGA等待接收數據,之后按照自定義的協(xié)議將字節(jié)信息進行分類,以識別不同命令,根據命令發(fā)出相應的控制CPU運行的動作,之后對發(fā)出數據進行校驗,如果正確則轉入讀寄存器狀態(tài),將讀完的數據進行校驗,正確后轉入寫等待即等待輸入新的命令,整個狀態(tài)機可以較好地實現和電腦端的交互過程。圖2是實現調試模塊的具體的狀態(tài)圖。
圖2 調試模塊實現狀態(tài)流程圖
下面列出調試模塊端口中比較重要的信號:
debug_k2,//連接mcu,總開關控制對寄存器的操作;
dclkcon,//連接mcu總的時鐘控制線,1有效,有效時MCU時鐘被屏蔽;
debug_wr,//連接mcu表示寫寄存器命令;
debug_rd,//連接mcu表示讀寄存器命令;
debug_addr_w,//地址信息用來表示要讀取或寫入的是哪個寄存器;
debug_k2是總的寄存器讀寫控制端口,當微處理器處于停止狀態(tài)時,通過控制debug_k2來實現對寄存器進行讀寫,當其為1時,可以對微處理器內部寄存器進行讀寫,當進行讀操作時,此時需要將debug_rd置1,當進行寫操作時,將debug_rd置0之后將debug_wr置1即可,對于讀哪些寄存器時需要近似于RAM地址線的debug_addr_w進行控制,定義其為9位的位寬,當其取不同值時定義其對應不同的寄存器即可。
調試模塊中如何正確有效的控制CPU的運行是實現ICE機制的關鍵,定義其為1時CPU停止運行,為0時CPU繼續(xù)運行。然而,斷點運行、單步運行、全速運行3種命令之中都隱含有使微處理器運行的命令。同理,斷點運行、單步運行、停止命令3種命令之中都隱含有使微處理器停止運行的命令。多個命令控制同一個時鐘時,一個觸發(fā)器是不可能實現的,必須對控制同一寄存器時鐘的信號進行邏輯組合,進行優(yōu)先級的劃分,方能實現對整個時鐘的控制,以下是根據情況對應不同命令定義的不同的時鐘控制分量:
reg adlkcon;//停止命令的“?!笨刂菩盘?,當其為1時應讓CPU停止運行
reg ddlkcon;//單步命令時“停”控制信號,當其為1時應讓CPU停止運行
reg edlkcon;//斷點命令時“?!笨刂菩盘?,當其為1時應讓CPU停止運行
reg bdlkcon;//運行命令的控制信號,當其為0時CPU運行
要實現正確的時鐘邏輯,則需要上述四個分量共同決定dclkcon的時序,經過分析可知,當FPGA接收到斷點運行、“單步、“全速運行”命令時,必須將bdlkcon置0,從而使時鐘控制信號dclkcon為0,微處理器開始運行,當運行到指定要求時斷點運行、單步命令對應的時鐘分量必須被置1,使時鐘控制信號dclkcon置1,微處理器停止運行,并且各分量對時鐘信號的控制必須滿足命令循環(huán)重復的情況。
當adlkcon,ddlkcon,edlkcon為1時,微處理器需停止運行,此時時鐘控制信號dclkcon必須被置1,當bdlkcon為0時微處理器需開始運行,此時時鐘控制信號dclkcon必須被置0,然而,當adlkcon,ddlkcon,edlkcon由1變?yōu)?或者是bdlkcon由0變?yōu)?時,并不希望dclkcon的值發(fā)生變化,此時,時鐘信號必須保持不變,也就是使其保持原值即可。
通過時序的驗證,以上時序邏輯控制能夠較好地滿足所需要求。當出現跟運行有關的命令時,bdlkcon由1變?yōu)?,時鐘信號dclkcon被置1,緊接著bdlkcon置1,時序邏輯進入到下一層進行邏輯判斷,當遇到跟停止有關的命令時,adlkcon或ddlkcon或edlkcon由0變1,由于bdlkcon為1,時鐘控制邏輯直接進入到下一層進行判斷,整個時鐘控制邏輯得以實現。
有數據發(fā)送就難免有錯誤,由于USB通訊本身的優(yōu)點,從電腦端發(fā)送到調試模塊總線端口的數據出錯的幾率較小,但為了避免出錯造成對字節(jié)命令的影響,在定義字節(jié)含義時,在每一條命令相關的最后一個字節(jié)都帶有兩字節(jié)的校驗和用來檢驗,當發(fā)生錯誤時會自動重新發(fā)送,從而保證數據傳輸的正確性。
選用EM78P447S的IP軟核并結合調試模塊在Xilinx Spartan系列XC3S700AN開發(fā)板套件中成功進行了驗證。
一般的仿真器斷點實現方法是將斷點地址事先存入斷點寄存器,執(zhí)行時斷點地址與程序地址進行比較,當相等時則CPU停止運行,然而這樣在隨時取消斷點的同時實現起來較麻煩。如果采用軟硬件結合的辦法,無論設多少個斷點,只在點擊斷點運行命令時將離當前運行位置最近的斷點作為地址發(fā)送至內部FPGA,并且每次運行只發(fā)一個地址,這樣就可以保證在設置了多個斷點地址時,在運行了一部分后隨意取消之前設置的斷點,就可實現任意設置和取消斷點,并且每次斷點運行只發(fā)一次地址的簡便實現方法。
單步的實現既可用保存地址而后進行比較的方法實現,最簡單的辦法則是根據處理器的芯片執(zhí)行流水線特性選擇關鍵點,此次選用的EM78P447S為兩級流水線,PC變化時表示上一條指令剛執(zhí)行完成,根據其特性,采樣PC變化,在單步執(zhí)行時每變化一次則停止一次即可實現單步功能
圖3為單步運行邏輯分析儀采樣圖,單步停下的地址為007H,然后讀出相應寄存器的值。t_mfd為雙向數據總線,將“單步”停止后各個寄存器的值傳回電腦端,如圖3所示,dclkcon為總的時鐘控制信號,當其為高時CPU停止運行,為低時CPU運行,bdlkcon為0時CPU運行,ddlkcon為“單步“命令時控制信號,當“單步”時,ddlkcon發(fā)出一個高電平脈沖,由上述總時鐘控制邏輯可以看出,當bdlkcon低電平到來時觸發(fā)dclkcon變低,CPU開始運行,當bdlkcon脈沖結束后,if(adlkcon==1edlkcon==1)并不滿足所以dclkcon繼續(xù)保持邏輯,等到ddlkcon變?yōu)?之后,使得dclkcon變1則CPU停止運行,PC的值增加1,CPU執(zhí)行了一條指令后停止,停止后PC的值為0007H。
圖3 斷點停止
設計的硬件電路能夠較好地實現“全速運行”,“停止”,“斷點運行”,“單步運行”,并且讀寫相應的寄存器,在整個系統(tǒng)中,軟硬件結合設計才能有效地完成在線仿真器的開發(fā)?;诖嗽O計方法,可以廣泛應用于MCU,ARM等芯片的在線仿真器開發(fā)中。本IP核具有如下優(yōu)點:(1)整個程序層次分明、邏輯清晰、可重復利用、易于修改。(2)不受具體器件的限制,根據具體器件的特性稍加改動便可兼容。(3)具有良好的檢驗差錯重發(fā)能力,避免了出錯帶來的錯誤結果。(4)適用性強,為研發(fā)人員提供了方便,大幅節(jié)約了調試的成本。(5)擺脫對某些特定種類在線仿真器的束縛,實現了仿真器的通用化。至此,結合通用仿真器方案,將調試模塊的IP加入,則可在FPGA上實現具體芯片的ICE機制。
[1] 李舸,桑楠,熊光澤.一種通用在線仿真調試器的設計[J].計算機應用,2007,27(4):875-876.
[2] 曹健雄,嚴壯志.基于FPGA的單片機仿真器設計[J].中國醫(yī)療器械雜志,2010,34(6):424-426.
[3] 郭金懷,劉丹非,王誠.嵌入式CPU的設計與仿真[J].現代電子技術,2003,16(增刊):59-62.
[4] 王祖強,張華,李玲.8位RISC MCU IP軟核仿真的新方法[J].計算機工程,2007,33(11):248-249.
[5]Xilinx Conpraion.Spartan-3A FPGA family data sheet[M].CA USA:Xilinx Conpraion,2009.
[6]Intel.Universal serial bus specification[M].CA USA:Intel Conpration,1998.
[7]Cypress.CY7C68013 EZ-USB FX2 USB microcontroller high-speed USB peripheral controller[M].CA USA:Cypress Conpration,2012.
[8] 田耕,徐文波.Xilinx FPGA開發(fā)實用教程[M].北京:清華大學出版社,2008.
[9] 夏宇聞.Verilog數字系統(tǒng)設計教程[M].2版.北京:北京航空航天大學出版社,2008.
[10]柴欣,張紅梅.Visual C++程序設計基礎[M].2版.北京:中國鐵道出版社,2007.
[11]宋存杰.基于6502的MCU的開發(fā)及其ICE機制的實現[D].哈爾濱:哈爾濱工業(yè)大學,2010.
[12]朱武星.65C02 MCU在線仿真器的設計研究[D].廈門:廈門大學,2008.