?????? 測(cè)試說(shuō)明:?jiǎn)尾绞欠抡嫫髟O(shè)計(jì)中比較難實(shí)現(xiàn)的功能。照通常的理解,用戶每執(zhí)行一個(gè)單步應(yīng)該準(zhǔn)確實(shí)現(xiàn)理想運(yùn)行的單步性能。例如,運(yùn)行一個(gè)機(jī)器周期的指令,內(nèi)部的所有時(shí)序應(yīng)該都動(dòng)作一個(gè)機(jī)器周 期而不能出現(xiàn)不動(dòng)作或動(dòng)作過度的現(xiàn)象。不過很遺憾的看到國(guó)內(nèi)的仿真器多數(shù)不能達(dá)到這個(gè)指標(biāo)。
??? ?? 測(cè)試程序:
??????????????? ORG??????? 0000H
??????????????? SETB?????? TR0??????????????????????? /*? 打開定時(shí)器0 */
???? TestStart:
??????????????? NOP?????????????????????????????????? /* 定時(shí)器0 運(yùn)行1個(gè)機(jī)器周期, TL0 加1 */
??????????????? MOV??????? A,#0FFH??????????????????? /* 定時(shí)器0 運(yùn)行1個(gè)機(jī)器周期, TL0 加1 */
??????????????? MUL??????? AB???????????????????????? /* 定時(shí)器0 運(yùn)行4 個(gè)機(jī)器周期, TL0 加4 */
??????????????? LJMP?????? TestStart????????????????? /* 定時(shí)器0 運(yùn)行2 個(gè)機(jī)器周期, TL0 加2 */
??????????????? END
??? ?? 測(cè)試步驟
????? (1)? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序;
????? (2)? 在運(yùn)行前打開TL0 的顯示,以便單步運(yùn)行后能觀察TL0 的變化;
????? (3)? 使用當(dāng)前仿真器環(huán)境提供的單步功能開始單步運(yùn)行;
????? (4)? 單步運(yùn)行后檢查TL0 變化的數(shù)值是否與指令的周期數(shù)相同。
?????? 測(cè)試結(jié)論:仿真器如果沒有照嚴(yán)格正規(guī)的設(shè)計(jì),程序的單步運(yùn)行性能將不準(zhǔn)確,一般會(huì)出現(xiàn)實(shí)際運(yùn)行時(shí)間變長(zhǎng)的現(xiàn)象,這在時(shí)間要求較高的單步運(yùn)行將不能仿真程序的真正運(yùn)行。
?????? 2.中斷性能的測(cè)試
????? ?測(cè)試說(shuō)明:中斷是一種非正常的程序跳轉(zhuǎn),單步仿真有一定的難度,尤其在低檔仿真器中。在當(dāng)前采用Bondout 技術(shù)制作的仿真器中一般可以做到正確仿真,但是仍有一些仿真器不能正確單步仿真中斷。
???????? 測(cè)試程序:
??????????????? ORG?????? 0000H
??????????????? LJMP????? TestStart
??????????????? ORG??????? 000BH???????????????????? /*? 定時(shí)器0 的中斷服務(wù)程序 */
??????????????? RETI
??? TestStart:
??????????????? SETB????? EA???????????????????????? /* 開放全局中斷允許 */
??????????????? SETB????? ET0??????????????????????? /* 開放T0 中斷允許 */
??? TestLoop:
??????????????? SETB????? TF0??????????????????????? /*? 設(shè)置T0 的中斷標(biāo)志 */
??????????????? INC?????? A????????????????????????? /* A 數(shù)值加一,以便觀察程序持續(xù)運(yùn)行 */
??????????????? LJMP????? TestLoop?????????????????? /* 連續(xù)運(yùn)行 */
??????????????? END
?????? 測(cè)試步驟
???? (1)? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序。
???? (2)? 每次SETB TF0 后程序?qū)⑦M(jìn)入T0 的中斷服務(wù)程序,執(zhí)行完畢后返回主程序繼續(xù)運(yùn)行。
???? (3)?? 主程序能在TestLoop 中連續(xù)運(yùn)行,因此A 能連續(xù)加一,但是每循環(huán)一次就進(jìn)入一次中斷。
????? ?測(cè)試結(jié)論:仿真器如果沒有照嚴(yán)格正規(guī)設(shè)計(jì),程序的中斷性能將不準(zhǔn)確。可能出現(xiàn)程序不能跳轉(zhuǎn)到中斷服務(wù)程序,或沒有返回到正確的主程序,或A 不能每次循環(huán)連續(xù)的加1。
?????? 3.連續(xù)中斷性能的測(cè)試
????? ?測(cè)試說(shuō)明:在80C51 的中斷系統(tǒng)中,串口中斷比較特殊。進(jìn)入串口中斷服務(wù)程序后中斷標(biāo)志TI或RI不會(huì)自動(dòng)清除,如果用戶程序不對(duì)TI 或RI進(jìn)行清除操作則可能會(huì)出現(xiàn)連續(xù)進(jìn)入中斷服務(wù)程序的情況。根據(jù)80C51 的中斷處理,在退出中斷后必須執(zhí)行完一條指令后才能重新進(jìn)入中斷服務(wù)程序,因此即使連續(xù)中斷的情況下主程序也能得到連續(xù)執(zhí)行。
?????? 測(cè)試程序:
??????????????? ORG?????? 0000H
??????????????? LJMP????? TestStart
??????????????? ORG??????? 0023H???????????????????? /*? 定時(shí)器0 的中斷服務(wù)程序 */
??????????????? RETI
??? TestStart:
??????????????? SETB????? EA???????????????????????? /* 開放全局中斷允許 */
??????????????? SETB????? ES???????????????????????? /* 開放串口中斷允許 */
??????????????? SETB????? TI
TestLoop:
??????????????? NOP
??????????????? NOP
??????????????? INC??????? A???????????????????????? /* A 數(shù)值加一,以便觀察程序持續(xù)運(yùn)行 */
??????????????? LJMP????? TestLoop?????????????????? /* 連續(xù)運(yùn)行 */
??????????????? END
???? ?測(cè)試步驟
???? (1)?? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序。
???? (2)?? 進(jìn)入TestLoop 后,每次單步運(yùn)行完一條程序都會(huì)進(jìn)入串口中斷,退出后繼續(xù)運(yùn)行一條下面的程序,然后又進(jìn)入中斷服務(wù)程序,A 的數(shù)值可以得到遞增。
???? (3)?? 主程序能在TestLoop 中連續(xù)運(yùn)行,因此A 能連續(xù)加一,但是每循環(huán)一次就進(jìn)入一次中斷。
????? ?測(cè)試結(jié)論:仿真器如果沒有照嚴(yán)格正規(guī)設(shè)計(jì),程序連續(xù)運(yùn)行中斷程序性能將不準(zhǔn)確。可能出現(xiàn)程序不能跳轉(zhuǎn)到中斷服務(wù)程序,或沒有返回到正確的主程序,或A 不能每次循環(huán)連續(xù)的加1。
???? ? 測(cè)試小結(jié)
?????? 上述的幾個(gè)測(cè)試程序?qū)Ψ抡嫫鞯男阅芤蠛芨撸绻抡嫫魍ㄟ^測(cè)試說(shuō)明被測(cè)試的仿真器仿真性能指標(biāo)較高;如果仿真器沒有通過測(cè)試只能判斷仿真器性能不是最好,具體的綜合性能要有待其它檢驗(yàn)。
?????? 第七章??? 如何挑選測(cè)試HOOKS 技術(shù)仿真器
??????? HOOKS 技術(shù)是國(guó)外普遍采用的一種仿真技術(shù),同Bondout 技術(shù)相比較,仿真器的適用范圍可以更廣。HOOKS 技術(shù)在10年前已經(jīng)被國(guó)內(nèi)引進(jìn),并被當(dāng)時(shí)的仿真器廠家試圖采用。但是由于HOOKS 技術(shù)本身的復(fù)雜性,當(dāng)時(shí)國(guó)內(nèi)眾仿真器廠家竟無(wú)法設(shè)計(jì)出可以使用的仿真器,致使國(guó)內(nèi)的仿真技術(shù)遠(yuǎn)遠(yuǎn)落后于國(guó)外。
??????? 2002年,周立功旗下的廣州致遠(yuǎn)電子有限公司推出了研制多年的TKS 系列HOOKS 仿真器,并在性能上全面超過國(guó)外同類型的HOOKS 仿真器,國(guó)內(nèi)的用戶能以低廉的價(jià)格購(gòu)買到技術(shù)先進(jìn)的HOOKS技術(shù)仿真器。在TKS 系列HOOKS 仿真器面市以后,國(guó)內(nèi)的仿真器廠商紛紛加強(qiáng)研發(fā)力量研制HOOKS技術(shù),經(jīng)過了一段時(shí)間后也宣布供應(yīng)采用HOOKS 技術(shù)的仿真器。用戶需要注意的是:HOOKS 技術(shù)只是一個(gè)基本的仿真技術(shù),要最終作成仿真器還必須依靠設(shè)計(jì)工程師精心的設(shè)計(jì),因此市場(chǎng)上HOOKS 技術(shù)的仿真器性能指標(biāo)可能有很大的差別,有的不占用用戶資源,有的就做不到;有的仿真頻率可以到很高,但是有的不行。因此用戶應(yīng)仔細(xì)加以挑選和鑒別。
?????? 根據(jù)HOOKS 技術(shù)本身的特點(diǎn),用戶應(yīng)該對(duì)以下的幾個(gè)方面加以注意和測(cè)試。
??????? 能否運(yùn)行外部用戶目標(biāo)板上的程序
????? ?由于HOOKS 技術(shù)中P0/P2 口是重新構(gòu)造的,因此P0/P2 口上的時(shí)序處理是整個(gè)設(shè)計(jì)中的難點(diǎn)。P0/P2 的I/O 特性和數(shù)據(jù)總線特性相對(duì)容易實(shí)現(xiàn)一點(diǎn),但是程序總線很難正確實(shí)現(xiàn),這是由于HOOKS的技術(shù)結(jié)構(gòu)決定的。一般HOOKS 仿真器在實(shí)現(xiàn)仿真內(nèi)部64K 代碼空間比較容易,但是仿真內(nèi)部4K (類似89C51)/8K (類似89C54)/16K (類似89C54)/32K (類似89C58)等能外擴(kuò)ROM 空間的MCU類型則無(wú)法實(shí)現(xiàn)。在國(guó)內(nèi)外所有的HOOKS 技術(shù)的仿真器中,只有廣州致遠(yuǎn)公司的TKS 仿真器B 系列能真正做到穩(wěn)定運(yùn)行外部用戶目標(biāo)板上的程序。運(yùn)行外部用戶目標(biāo)板上的程序是非常必要的,因?yàn)橛脩艨赡茉谕獠繑U(kuò)充了一般的用戶程序,需要實(shí)際仿真一下來(lái)驗(yàn)證整個(gè)系統(tǒng)的正確性;也可能在外部放置了大容量的(可能超過64K 的物理地址限制)分組字庫(kù),而這種特性是仿真器內(nèi)部無(wú)法實(shí)現(xiàn)的;也可能是外部有分組的BANK 方式的運(yùn)行代碼,這種方式要求仿真器必須有運(yùn)行外部程序代碼的能力。
??????? P0/P2 口能否同時(shí)用作總線和I/O
??????? 這種特性是芯片本來(lái)的性能,但是由于HOOKS 技術(shù)的難度,有很多HOOKS 仿真器不能做到這一點(diǎn),導(dǎo)致用戶在使用時(shí)無(wú)法全面滿足要求。該性能一般不需要測(cè)試,可以直接閱讀仿真器的性能說(shuō)明或向生產(chǎn)廠商或代理商詢問。作者檢測(cè)過國(guó)內(nèi)外知名仿真器廠家的多種HOOKS 仿真器,幾乎都沒有完美做到P0/P2 口的準(zhǔn)確仿真。
??????? P0/P2 口的直流參數(shù)
?????? 如果需要檢測(cè)的仿真器根本做不到同時(shí)仿真I/O 和總線方式,則沒有必要檢測(cè)P0/P2 的直流參數(shù)。如果要檢測(cè)的仿真器宣稱能夠同時(shí)仿真I/O 和總線方式,用戶還必須分別在I/O 和總線兩種方式下對(duì)直流參數(shù)進(jìn)行測(cè)試。根據(jù)作者的HOOKS 仿真器測(cè)試經(jīng)驗(yàn),有的仿真器雖然宣稱能夠同時(shí)仿真I/O 和總線方式,但是根本不區(qū)分這兩種方式驅(qū)動(dòng)能力,采用的是一種平均方式,這樣在作為I/O 時(shí)高電平驅(qū)動(dòng)能力過大,而作為總線時(shí)驅(qū)動(dòng)能力過小。用戶在使用這類仿真器作為輸入時(shí),必須加大外部信號(hào)的驅(qū)動(dòng)能力,這跟實(shí)際芯片的驅(qū)動(dòng)能力相差太遠(yuǎn);在作為總線使用時(shí),如果外部的總線(包括地址總線和數(shù)據(jù)總線)個(gè)數(shù)稍多,總線電平將嚴(yán)重下降而無(wú)法工作。用戶可以使用下面的測(cè)試程序配合示波器檢查。
???? ? 測(cè)試程序:
??????????????? ORG???????? 0000H
LJMP????? TestStart
TestStart:?????? MOV????? P0,#0FFH
TestLoop:?????? MOV?????? P0,#00H
??????????????? NOP
??????????????? MOV?????? A,#0FFH
??????????????? MOV?????? DPTR,#0FFFFH
??????????????? MOVX????? @DPTR,A
??????????????? NOP
??????????????? MOV?????? P0,#00H
??????????????? SJMP????? TestLoop
??????????????? END
????? ?測(cè)試步驟
? ???? ?(1)? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序,仿真器不接任何用戶設(shè)備。
??? ?? (2)? 單步運(yùn)行完TestStart 的程序行,P0 的數(shù)值設(shè)置為0FFH。這時(shí)使用電壓表測(cè)量一下P0的任意一個(gè)管腳(例如P0.0)的電壓,記錄為V1,V1 的數(shù)值一般小于當(dāng)前的電源電壓。然后使用一個(gè)2K 電阻,一端接仿真器提供的地,另一端接P0.0,使用電壓表測(cè)量一下P0.0 的電壓,記錄為V2,V2的電壓越接近與0 說(shuō)明該仿真器P0 在I/O 口方式下的特性越好(接近于開漏)。如果V2 大于1伏說(shuō)明P0 口的輸入電阻在10K 以下,該仿真器P0 口在I/O 下性能較差。
????? ?(3)? 在TestLoop 中連續(xù)全速運(yùn)行,仍保持2K 電阻接在P0.0。使用示波器觀察P0.0 引腳,可以看到占空比較小的正電平脈沖,該正電平脈沖是有P0 輸出的低8 位地址和數(shù)據(jù)輸出引起的,因?yàn)樘幱诳偩€方式,P0 口的驅(qū)動(dòng)能力應(yīng)該較強(qiáng)。保持示波器的正常顯示,然后將2K 電阻不斷的接觸/脫離P0.0 引腳,觀察P0.0 腳脈沖信號(hào)幅度的變化。如果該信號(hào)在2K 電阻接入后幅度降低很大,例如1V 以上,說(shuō)明該仿真器P0 口驅(qū)動(dòng)能力不足,無(wú)法滿足用戶的正常的需要。
?????? 測(cè)試結(jié)論:HOOKS 仿真器要同時(shí)仿真I/O 口和總線模式而且保持良好的驅(qū)動(dòng)特性是比較困難的,但是可以作到的。一般的HOOKS 仿真器一般不敢宣稱同時(shí)仿真I/O 口和總線方式,但是用戶需要注意即使宣稱可以同時(shí)仿真I/O 和總線,用戶也需要照上述的方法進(jìn)行測(cè)試,防止廠家采取驅(qū)動(dòng)折中的方法掩蓋。根據(jù)作者的測(cè)試結(jié)果,國(guó)內(nèi)所有的HOOKS 仿真器只有TKS 系列可以作到真正同時(shí)仿真I/O 口和總線方式,重要的是仍保持了良好的驅(qū)動(dòng)特性。
???? ? 是否占用用戶資源
???? ? 設(shè)計(jì)優(yōu)良的HOOKS 仿真器不會(huì)占用任何用戶資源,但是由于設(shè)計(jì)技術(shù)的差別,有一些采用HOOKS技術(shù)的仿真器不能達(dá)到這樣的性能,一般會(huì)占用部分資源。占用資源將在使用中限制用戶的使用,用戶可能無(wú)法通過該仿真器實(shí)現(xiàn)正常程序的功能。該性能一般不需要測(cè)試,可以直接閱讀仿真器的性能說(shuō)明或向生產(chǎn)廠商或代理商詢問。
???? ? ALE 信號(hào)的關(guān)閉/開啟
?????? HOOKS 技術(shù)的一個(gè)突出優(yōu)點(diǎn)是能支持增強(qiáng)性能的仿真,而ALE 信號(hào)的關(guān)閉/開啟是增強(qiáng)性能的一個(gè)典型范例。由于在HOOKS 技術(shù)中,依賴ALE 信號(hào)能大大簡(jiǎn)化信號(hào)的處理,因此一般采用HOOKS 技術(shù)的仿真器都不能關(guān)閉ALE 信號(hào),否則會(huì)引起仿真時(shí)序的全面紊亂。該性能一般在仿真器的性能說(shuō)明中沒有詳細(xì)說(shuō)明,因此需要用戶自己進(jìn)行測(cè)試。
????? 下面的測(cè)試程序以PHILIPS 的P89C52X2 仿真芯片為例。
????? 測(cè)試程序:
?????????????? ORG??????? 0000H
?????????????? LJMP????? TestStart
TestStart:? MOV???????? P2,#55H???????????????????? /* 先對(duì)P1 進(jìn)行設(shè)置 */
TestLoop:? ORL????????? AUXR,#01H?????????????????? /*? 關(guān)閉ALE 信號(hào) */
?????????????? NOP
?????????????? MOV?????? P2,#55H
?????????????? NOP
?????????????? ANL?????? AUXR,#0FEH???????????????? /* 開啟ALE 信號(hào) */
?????????????? NOP
?????????????? MOV?????? P2,#0AAH
?????????????? NOP
?????????????? LJMP????? TestLoop???????????????????? /* 連續(xù)運(yùn)行 */
?????????????? END
???? 測(cè)試步驟
???? (1)? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序。
???? (2)? 進(jìn)入TestLoop 后,連續(xù)單步運(yùn)行,程序應(yīng)該能照正確的程序流程運(yùn)行,而且對(duì)P2 的操作能正確在P2 口反映出來(lái)。
???? (3)? 在TestLoop 中連續(xù)全速運(yùn)行,然后停止程序運(yùn)行,觀察當(dāng)前程序位置是否是在TestLoop 內(nèi)的有效位置,P2 是否是前一個(gè)對(duì)P2 操作的數(shù)值。
???? 測(cè)試結(jié)論:仿真器如果不能支持ALE 的關(guān)閉將無(wú)法通過上面的測(cè)試程序。
???? 雙倍速時(shí)鐘的動(dòng)態(tài)/靜態(tài)切換
?????? PHILIPS、SST 等一些MCU 廠商在自己的增強(qiáng)型51 產(chǎn)品中增加了雙倍速時(shí)鐘的功能,使51 內(nèi)核的速度提高了兩倍。而且在有的型號(hào)中同時(shí)具有6/12Clock 時(shí)鐘切換的功能,用戶在使用中有了更多的靈活性。因此,這種變化要求HOOKS 仿真器必須同時(shí)滿足6/12Clock 兩種方式之一的仿真(靜態(tài)切換),更高的要求則是能在用戶程序運(yùn)行中變換6/12Clock 模式(動(dòng)態(tài)切換)。能同時(shí)滿足動(dòng)態(tài)/靜態(tài)切換的仿真器難度很大,在國(guó)內(nèi)除TKS 宣布掌握這一技術(shù)外,沒有見到其它廠家有類似的報(bào)道。時(shí)鐘的靜態(tài)切換功能可以直接查閱仿真器的性能說(shuō)明或向生產(chǎn)廠商/代理商詢問,也可以用下面的程序進(jìn)行測(cè)試:
???? ?下面的測(cè)試程序以PHILIPS 的P89C52X2 仿真芯片為例。
??? ? 測(cè)試程序:
?????????????? ORG?????? 0000H
?????????????? LJMP????? TestStart
TestStart:? MOV???????? P2,#55H????????????????????????? /* 先對(duì)P2 進(jìn)行設(shè)置 */
TestLoop:? ORL????????? CKCON,#01H?????????????????????? /*? 切換為6Clock 模式 */
?????????????? NOP
?????????????? MOV?????? P2,#55H
?????????????? NOP
?????????????? ANL?????? CKCON,#0FEH????????????????????? /* 切換為6Clock 模式*/
?????????????? NOP
?????????????? MOV??????? P2,#0AAH
NOP
??????????????? LJMP????? TestLoop???????????????????????????? /* 連續(xù)運(yùn)行 */
??????????????? END
???? 測(cè)試步驟
???? (1)?? 照您當(dāng)前使用的仿真器要求測(cè)試上面的程序。
???? (2)? 進(jìn)入TestLoop 后,連續(xù)單步運(yùn)行,程序應(yīng)該能照正確的程序流程運(yùn)行,而且對(duì)P2 的操作能正確在P2 口反映出來(lái)。
???? (3) 在TestLoop 中連續(xù)全速運(yùn)行,然后停止程序運(yùn)行,觀察當(dāng)前程序位置是否是在TestLoop 內(nèi)的有效位置,P2 是否是前一個(gè)對(duì)P2 操作的數(shù)值。
???? ? 測(cè)試結(jié)論:仿真器如果不能支持6/12Clock 的切換將無(wú)法通過上面的測(cè)試程序。
評(píng)論
查看更多