80C51系列單片機仿真器選購指南(下)
——
在選擇了仿真器生產廠商后,用戶還需要對仿真器的性能做仔細的測試,保證您選擇的仿真器能夠達到該仿真器保證的性能以及作為仿真器應該達到的性能。
在選擇一種仿真器前,通過該仿真器的廣告和銷售人員的介紹,用戶能基本上了解該仿真器的突出性能。這些突出性能應該是該仿真器確實存在的功能,雖然可能有被夸大但一般都不會有欺騙的成分。這些性能好不好需要有針對性的一一驗證,這里只能建議用戶將目光注意在實際仿真性能上,而不要過分注意一些與仿真器無關或關系不大的功能。
很多的仿真器雖然具備一些附加的功能,但是用戶必須要注意到這些仿真器可能在一些最基本的仿真功能卻做不好,這種現象在國產的仿真器中非常普遍!由于用戶并不專業于仿真器的測試,因此在購買中不知道對這些仿真器的死點進行驗證。等以后在學習特別是在開發設計中,這些設計中的死點可能給您帶來莫名其妙的問題。您可能要花幾倍的時間來尋找其中的原因,因為您首先懷疑是您系統的問題而不懷疑是仿真器的問題。所以選擇一個性能可靠的仿真器是十分重要的,這需要非常專業化的測試程序來實現。
以下的測試程序由廣州致遠電子有限公司提供,經過長時間的使用證明能基本上反映出一個仿真器設計水平的高低。廣州致遠電子有限公司在提供這些測試程序時聲明:這些測試程序只是指出仿真器設 計中容易出現的問題,但并不有意攻擊任何含有上述問題的仿真器廠家。
1.單步性能的測試
測試說明:單步是仿真器設計中比較難實現的功能。照通常的理解,用戶每執行一個單步應該準確實現理想運行的單步性能。例如,運行一個機器周期的指令,內部的所有時序應該都動作一個機器周 期而不能出現不動作或動作過度的現象。不過很遺憾的看到國內的仿真器多數不能達到這個指標。
測試程序:
ORG 0000H
SETB TR0 /* 打開定時器0 */
TestStart:
NOP /* 定時器0 運行1個機器周期, TL0 加1 */
MOV A,#0FFH /* 定時器0 運行1個機器周期, TL0 加1 */
MUL AB /* 定時器0 運行4 個機器周期, TL0 加4 */
LJMP TestStart /* 定時器0 運行2 個機器周期, TL0 加2 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序;
(2) 在運行前打開TL0 的顯示,以便單步運行后能觀察TL0 的變化;
(3) 使用當前仿真器環境提供的單步功能開始單步運行;
(4) 單步運行后檢查TL0 變化的數值是否與指令的周期數相同。
測試結論:仿真器如果沒有照嚴格正規的設計,程序的單步運行性能將不準確,一般會出現實際運行時間變長的現象,這在時間要求較高的單步運行將不能仿真程序的真正運行。
2.中斷性能的測試
測試說明:中斷是一種非正常的程序跳轉,單步仿真有一定的難度,尤其在低檔仿真器中。在當前采用Bondout 技術制作的仿真器中一般可以做到正確仿真,但是仍有一些仿真器不能正確單步仿真中斷。
測試程序:
ORG 0000H
LJMP TestStart
ORG 000BH /* 定時器0 的中斷服務程序 */
RETI
TestStart:
SETB EA /* 開放全局中斷允許 */
SETB ET0 /* 開放T0 中斷允許 */
TestLoop:
SETB TF0 /* 設置T0 的中斷標志 */
INC A /* A 數值加一,以便觀察程序持續運行 */
LJMP TestLoop /* 連續運行 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序。
(2) 每次SETB TF0 后程序將進入T0 的中斷服務程序,執行完畢后返回主程序繼續運行。
(3) 主程序能在TestLoop 中連續運行,因此A 能連續加一,但是每循環一次就進入一次中斷。
測試結論:仿真器如果沒有照嚴格正規設計,程序的中斷性能將不準確。可能出現程序不能跳轉到中斷服務程序,或沒有返回到正確的主程序,或A 不能每次循環連續的加1。 {{分頁}}
3.連續中斷性能的測試
測試說明:在80C51 的中斷系統中,串口中斷比較特殊。進入串口中斷服務程序后中斷標志TI或RI不會自動清除,如果用戶程序不對TI 或RI進行清除操作則可能會出現連續進入中斷服務程序的情況。根據80C51 的中斷處理,在退出中斷后必須執行完一條指令后才能重新進入中斷服務程序,因此即使連續中斷的情況下主程序也能得到連續執行。
測試程序:
ORG 0000H
LJMP TestStart
ORG 0023H /* 定時器0 的中斷服務程序 */
RETI
TestStart:
SETB EA /* 開放全局中斷允許 */
SETB ES /* 開放串口中斷允許 */
SETB TI
TestLoop:
NOP
NOP
INC A /* A 數值加一,以便觀察程序持續運行 */
LJMP TestLoop /* 連續運行 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序。
(2) 進入TestLoop 后,每次單步運行完一條程序都會進入串口中斷,退出后繼續運行一條下面的程序,然后又進入中斷服務程序,A 的數值可以得到遞增。
(3) 主程序能在TestLoop 中連續運行,因此A 能連續加一,但是每循環一次就進入一次中斷。
測試結論:仿真器如果沒有照嚴格正規設計,程序連續運行中斷程序性能將不準確。可能出現程序不能跳轉到中斷服務程序,或沒有返回到正確的主程序,或A 不能每次循環連續的加1。
測試小結
上述的幾個測試程序對仿真器的性能要求很高,如果仿真器通過測試說明被測試的仿真器仿真性能指標較高;如果仿真器沒有通過測試只能判斷仿真器性能不是最好,具體的綜合性能要有待其它檢驗。
第七章 如何挑選測試HOOKS 技術仿真器
HOOKS 技術是國外普遍采用的一種仿真技術,同Bondout 技術相比較,仿真器的適用范圍可以更廣。HOOKS 技術在10年前已經被國內引進,并被當時的仿真器廠家試圖采用。但是由于HOOKS 技術本身的復雜性,當時國內眾仿真器廠家竟無法設計出可以使用的仿真器,致使國內的仿真技術遠遠落后于國外。
2002年,周立功旗下的廣州致遠電子有限公司推出了研制多年的TKS 系列HOOKS 仿真器,并在性能上全面超過國外同類型的HOOKS 仿真器,國內的用戶能以低廉的價格購買到技術先進的HOOKS技術仿真器。在TKS 系列HOOKS 仿真器面市以后,國內的仿真器廠商紛紛加強研發力量研制HOOKS技術,經過了一段時間后也宣布供應采用HOOKS 技術的仿真器。用戶需要注意的是:HOOKS 技術只是一個基本的仿真技術,要最終作成仿真器還必須依靠設計工程師精心的設計,因此市場上HOOKS 技術的仿真器性能指標可能有很大的差別,有的不占用用戶資源,有的就做不到;有的仿真頻率可以到很高,但是有的不行。因此用戶應仔細加以挑選和鑒別。
根據HOOKS 技術本身的特點,用戶應該對以下的幾個方面加以注意和測試。
能否運行外部用戶目標板上的程序
由于HOOKS 技術中P0/P2 口是重新構造的,因此P0/P2 口上的時序處理是整個設計中的難點。P0/P2 的I/O 特性和數據總線特性相對容易實現一點,但是程序總線很難正確實現,這是由于HOOKS的技術結構決定的。一般HOOKS 仿真器在實現仿真內部64K 代碼空間比較容易,但是仿真內部4K (類似89C51)/8K (類似89C54)/16K (類似89C54)/32K (類似89C58)等能外擴ROM 空間的MCU類型則無法實現。在國內外所有的HOOKS 技術的仿真器中,只有廣州致遠公司的TKS 仿真器B 系列能真正做到穩定運行外部用戶目標板上的程序。運行外部用戶目標板上的程序是非常必要的,因為用戶可能在外部擴充了一般的用戶程序,需要實際仿真一下來驗證整個系統的正確性;也可能在外部放置了大容量的(可能超過64K 的物理地址限制)分組字庫,而這種特性是仿真器內部無法實現的;也可能是外部有分組的BANK 方式的運行代碼,這種方式要求仿真器必須有運行外部程序代碼的能力。
P0/P2 口能否同時用作總線和I/O
這種特性是芯片本來的性能,但是由于HOOKS 技術的難度,有很多HOOKS 仿真器不能做到這一點,導致用戶在使用時無法全面滿足要求。該性能一般不需要測試,可以直接閱讀仿真器的性能說明或向生產廠商或代理商詢問。作者檢測過國內外知名仿真器廠家的多種HOOKS 仿真器,幾乎都沒有完美做到P0/P2 口的準確仿真。
P0/P2 口的直流參數
如果需要檢測的仿真器根本做不到同時仿真I/O 和總線方式,則沒有必要檢測P0/P2 的直流參數。如果要檢測的仿真器宣稱能夠同時仿真I/O 和總線方式,用戶還必須分別在I/O 和總線兩種方式下對直流參數進行測試。根據作者的HOOKS 仿真器測試經驗,有的仿真器雖然宣稱能夠同時仿真I/O 和總線方式,但是根本不區分這兩種方式驅動能力,采用的是一種平均方式,這樣在作為I/O 時高電平驅動能力過大,而作為總線時驅動能力過小。用戶在使用這類仿真器作為輸入時,必須加大外部信號的驅動能力,這跟實際芯片的驅動能力相差太遠;在作為總線使用時,如果外部的總線(包括地址總線和數據總線)個數稍多,總線電平將嚴重下降而無法工作。用戶可以使用下面的測試程序配合示波器檢查。 {{分頁}}
測試程序:
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
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序,仿真器不接任何用戶設備。
(2) 單步運行完TestStart 的程序行,P0 的數值設置為0FFH。這時使用電壓表測量一下P0的任意一個管腳(例如P0.0)的電壓,記錄為V1,V1 的數值一般小于當前的電源電壓。然后使用一個2K 電阻,一端接仿真器提供的地,另一端接P0.0,使用電壓表測量一下P0.0 的電壓,記錄為V2,V2的電壓越接近與0 說明該仿真器P0 在I/O 口方式下的特性越好(接近于開漏)。如果V2 大于1伏說明P0 口的輸入電阻在10K 以下,該仿真器P0 口在I/O 下性能較差。
(3) 在TestLoop 中連續全速運行,仍保持2K 電阻接在P0.0。使用示波器觀察P0.0 引腳,可以看到占空比較小的正電平脈沖,該正電平脈沖是有P0 輸出的低8 位地址和數據輸出引起的,因為處于總線方式,P0 口的驅動能力應該較強。保持示波器的正常顯示,然后將2K 電阻不斷的接觸/脫離P0.0 引腳,觀察P0.0 腳脈沖信號幅度的變化。如果該信號在2K 電阻接入后幅度降低很大,例如1V 以上,說明該仿真器P0 口驅動能力不足,無法滿足用戶的正常的需要。
測試結論:HOOKS 仿真器要同時仿真I/O 口和總線模式而且保持良好的驅動特性是比較困難的,但是可以作到的。一般的HOOKS 仿真器一般不敢宣稱同時仿真I/O 口和總線方式,但是用戶需要注意即使宣稱可以同時仿真I/O 和總線,用戶也需要照上述的方法進行測試,防止廠家采取驅動折中的方法掩蓋。根據作者的測試結果,國內所有的HOOKS 仿真器只有TKS 系列可以作到真正同時仿真I/O 口和總線方式,重要的是仍保持了良好的驅動特性。
是否占用用戶資源
設計優良的HOOKS 仿真器不會占用任何用戶資源,但是由于設計技術的差別,有一些采用HOOKS技術的仿真器不能達到這樣的性能,一般會占用部分資源。占用資源將在使用中限制用戶的使用,用戶可能無法通過該仿真器實現正常程序的功能。該性能一般不需要測試,可以直接閱讀仿真器的性能說明或向生產廠商或代理商詢問。
ALE 信號的關閉/開啟
HOOKS 技術的一個突出優點是能支持增強性能的仿真,而ALE 信號的關閉/開啟是增強性能的一個典型范例。由于在HOOKS 技術中,依賴ALE 信號能大大簡化信號的處理,因此一般采用HOOKS 技術的仿真器都不能關閉ALE 信號,否則會引起仿真時序的全面紊亂。該性能一般在仿真器的性能說明中沒有詳細說明,因此需要用戶自己進行測試。
下面的測試程序以PHILIPS 的P89C52X2 仿真芯片為例。
測試程序:
ORG 0000H
LJMP TestStart
TestStart: MOV P2,#55H /* 先對P1 進行設置 */
TestLoop: ORL AUXR,#01H /* 關閉ALE 信號 */
NOP
MOV P2,#55H
NOP
ANL AUXR,#0FEH /* 開啟ALE 信號 */
NOP
MOV P2,#0AAH
NOP
LJMP TestLoop /* 連續運行 */
END
測試步驟
(1) 照您當前使用的仿真器要求測試上面的程序。
(2) 進入TestLoop 后,連續單步運行,程序應該能照正確的程序流程運行,而且對P2 的操作能正確在P2 口反映出來。
(3) 在TestLoop 中連續全速運行,然后停止程序運行,觀察當前程序位置是否是在TestLoop 內的有效位置,P2 是否是前一個對P2 操作的數值。
測試結論:仿真器如果不能支持ALE 的關閉將無法通過上面的測試程序。
雙倍速時鐘的動態/靜態切換
PHILIPS、SST 等一些MCU 廠商在自己的增強型51 產品中增加了雙倍速時鐘的功能,使51 內核的速度提高了兩倍。而且在有的型號中同時具有6/12Clock 時鐘切換的功能,用戶在使用中有了更多的靈活性。因此,這種變化要求HOOKS 仿真器必須同時滿足6/12Clock 兩種方式之一的仿真(靜態切換),更高的要求則是能在用戶程序運行中變換6/12Clock 模式(動態切換)。能同時滿足動態/靜態切換的仿真器難度很大,在國內除TKS 宣布掌握這一技術外,沒有見到其它廠家有類似的報道。時鐘的靜態切換功能可以直接查閱仿真器的性能說明或向生產廠商/代理商詢問,也可以用下面的程序進行測試:
下面的測試程序以PHILIPS 的P89C52X2 仿真芯片為例。
測試程序:
ORG 0000H
LJMP TestStart
TestStart: MOV P2,#55H /* 先對P2 進行設置 */
TestLoop: ORL CKCON,#01H &am
評論