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