第一章 為什么要使用仿真器? 1.1 仿真的概念 仿真的概念其實(shí)使用非常廣,最終的含義就是使用可控的手段來(lái)模仿真實(shí)的情況。 在嵌入式系統的設計中,仿真應用的范圍主要集中在對程序的仿真上。例如,在單片機的開(kāi)發(fā)過(guò)程中,程序的設計是最為重要的但也是難度最大的。一種最簡(jiǎn)單和原始的開(kāi)發(fā)流程是:編寫(xiě)程序-燒寫(xiě)芯片-驗證功能,這種方法對于簡(jiǎn)單的小系統是可以對付的,但在大系統中使用這種方法則是完全不可能的。 1.2 仿真的種類(lèi) 軟件仿真:這種方法主要是使用計算機軟件來(lái)模擬運行實(shí)際的單片機運行,因此仿真與硬件無(wú)關(guān)的系統具有一定的優(yōu)點(diǎn)。用戶(hù)不需要搭建硬件電路就可以對程序進(jìn)行驗證,特別適合于偏重算法的程序。軟件仿真的缺點(diǎn)是無(wú)法完全仿真與硬件相關(guān)的部分,因此最終還要通過(guò)硬件仿真來(lái)完成最終的設計。 硬件仿真:使用附加的硬件來(lái)替代用戶(hù)系統的單片機并完成單片機全部或大部分的功能,使用了附加硬件后用戶(hù)就可以對程序的運行進(jìn)行控制,例如單步,全速,查看資源,斷點(diǎn)等。硬件仿真是開(kāi)發(fā)過(guò)程中所必須的。 1.3 為什么要使用仿真器? 在與一些有經(jīng)驗的工程師交談中,我們會(huì )發(fā)現有相當一部分工程師在開(kāi)發(fā)中不使用或很少仿真器。向他們詢(xún)問(wèn)原因,得到的回答是“仿真器不可靠”。但是他們是如何解決程序開(kāi)發(fā)中遇到的問(wèn)題呢?通過(guò)深入的交流才明他們是照這樣的方法來(lái)開(kāi)發(fā)程序的: (1) 根據自己的設計建立一個(gè)符合要求的硬件平臺,如果該平臺涉及的程序比較復雜,還要搭建一個(gè)人機交流的通道。人機交流通道可能是一個(gè)簡(jiǎn)單的發(fā)光二極管,蜂鳴器,復雜的可能是串口通訊口,LCD顯示屏。 (2) 寫(xiě)一個(gè)最簡(jiǎn)單的程序,例如只是將發(fā)光二極管連續的閃爍。程序編譯后燒寫(xiě)到單片機芯片中,驗證硬件平臺是否工作正常。 (3) 硬件平臺正常工作后編寫(xiě)系統最低層的驅動(dòng)程序,每次程序更改后都重新燒寫(xiě)單片機芯片驗證。如果在程序驗證中遇到問(wèn)題,則可能在程序中加入一些調試手段,例如通過(guò)串口發(fā)送一些信息到PC 端的超級終端上,用于了解程序的運行情況。 (4) 系統低層驅動(dòng)程序完成后再編寫(xiě)用戶(hù)框架程序,由于這部分已經(jīng)不涉及到硬件部分,所以程序中的問(wèn)題用戶(hù)一般能夠發(fā)現。 但是更多的調查表明,使用以上方法的工程師總的看來(lái)所設計的程序不是很龐大或很復雜。因為在做簡(jiǎn)單的項目時(shí),我們可以通過(guò)一個(gè)發(fā)光二極管就可以表達出內部的信息;如果程序復雜,可能需要更多的信息來(lái)表示內部的狀態(tài),這樣可能就需要串口協(xié)助調試;如果程序更復雜,硬件更多,實(shí)時(shí)性更強,那工程師就要更多的增強調試手段,串口可能就不能滿(mǎn)足了,需要類(lèi)似于斷點(diǎn)的功能,因為我想知道在某一個(gè)時(shí)刻單片機內部的狀態(tài)究竟是怎樣? 如果用戶(hù)程序的修改非常頻繁,可能一次又一次地的燒寫(xiě)芯片占用的時(shí)間就很多,這時(shí)用戶(hù)就會(huì )想能下載程序并運行的裝置。到這里,您會(huì )看到,隨著(zhù)用戶(hù)要求的越來(lái)越高,調試裝置已經(jīng)越來(lái)越象一個(gè)通用的仿真器了。因此我們的建議是:不要回避使用仿真器,因為使用仿真器能提高您的開(kāi)發(fā)速度。 但是不能否認的是,用戶(hù)回避使用仿真器也是有原因的。因為仿真器也是一種電子裝置,非常依賴(lài)于設計者的水平。如果一個(gè)仿真器設計者的水平有欠缺,那將給仿真器的使用者帶來(lái)很大的問(wèn)題,因為仿真器的使用者將分不清楚究竟是程序的問(wèn)題還是出在那里。隨著(zhù)電子設備的復雜化,設計工程師面臨前所未有的壓力。您可以想象,用戶(hù)發(fā)現了程序中有一個(gè)問(wèn)題,首先懷疑是自己系統中的問(wèn)題,可能是軟件方面也可能是硬件方面。因為用戶(hù)系統處于開(kāi)發(fā)階段,用戶(hù)基本上不會(huì )懷疑仿真器。在這種情況下,用戶(hù)將耗費很大的精力在自己的系統中尋找并不存在的問(wèn)題。如果用戶(hù)最終發(fā)現問(wèn)題來(lái)源于仿真器,并通過(guò)燒寫(xiě)芯片驗證確實(shí)如此,那這個(gè)仿真器用戶(hù)以后可能會(huì )逐漸放棄使用仿真器。 用戶(hù)放棄使用仿真器,對用戶(hù)的影響是巨大的。因為放棄使用一個(gè)設計不完善的仿真器,也放棄了 使用其它設計完善的仿真器,關(guān)鍵是放棄了合理的開(kāi)發(fā)方法。因此我們的建議是:不要回避使用仿真器,但要挑選好的仿真器。 1.4 仿真器的附加服務(wù)更加重要 在購買(mǎi)仿真器的同時(shí),還要注意仿真器廠(chǎng)家的服務(wù),這一點(diǎn)很關(guān)鍵。這里說(shuō)的服務(wù)包含仿真器本身的服務(wù),例如仿真器使用上的指導服務(wù),仿真器的維修服務(wù)。這些都是一個(gè)產(chǎn)品的最基本的服務(wù),對于仿真器這種特殊產(chǎn)品來(lái)將還不是全部的服務(wù)。 使用仿真器來(lái)開(kāi)發(fā)產(chǎn)品,會(huì )遇到很多問(wèn)題:產(chǎn)品本身的問(wèn)題,仿真器的問(wèn)題,仿真器和用戶(hù)系統的問(wèn)題。如果用戶(hù)開(kāi)發(fā)經(jīng)驗不是很豐富,他并不能排除遇到的問(wèn)題究竟來(lái)源于哪個(gè)方面。這時(shí),他可能求助于仿真器生產(chǎn)廠(chǎng)商。如果仿真器的生產(chǎn)廠(chǎng)商只專(zhuān)注于仿真器的設計,而對于其它的單片機應用不熟悉,他可能對用戶(hù)提出的問(wèn)題不能作出正確的判斷而一味的強調自己的仿真器沒(méi)有問(wèn)題。與之相反,一個(gè)既熟悉仿真器的使用,又有豐富開(kāi)發(fā)經(jīng)驗的仿真器支持廠(chǎng)商則能協(xié)助用戶(hù)快速的找出問(wèn)題,實(shí)踐證明這兩種情況帶來(lái)的效果是完全不一樣的。因此我們的建議是:挑選好的仿真器,更要挑選好的技術(shù)支持。 第二章 仿真器中使用的技術(shù) 仿真器的生產(chǎn)在國內有十多年的歷史,其中使用的技術(shù)根據時(shí)間和性能的不同大約分成以下幾種: (1) 仿真開(kāi)發(fā)系統 這種技術(shù)主要在仿真器的初級階段使用。由于當時(shí)沒(méi)有好的仿真技術(shù)或仿真芯片,仿真器設計成了一個(gè)雙平臺的系統并根據用戶(hù)的要求在監控系統和用戶(hù)系統中切換。這種仿真系統性能完全依賴(lài)于設計者的水平,實(shí)際的最終性能廠(chǎng)家之間相差很大。不過(guò)總的說(shuō)來(lái)需要占用一定的用戶(hù)資源并且設計復雜,現在基本上已經(jīng)淘汰,只是使用在一些開(kāi)發(fā)學(xué)習系統中。 (2) Bondout 技術(shù) 一般來(lái)說(shuō),人們常常說(shuō)的專(zhuān)用仿真芯片其實(shí)就是 Bondout。這種仿真芯片一般也是一種單片機, 但是內部具有特殊的配合仿真的時(shí)序。當進(jìn)入仿真狀態(tài)后,可以?xún)鼋Y內部的時(shí)序運行,可以查看/修改在靜止時(shí)單片機內部的資源。 使用Bondout 制作的仿真器一般具有時(shí)序運行準確(也有例外),設計制作成本低等優(yōu)點(diǎn);Bondout芯片一般是由單片機生產(chǎn)廠(chǎng)家提供的,因此它只能仿真該廠(chǎng)商指定的單片機,仿真的品種很少。 (3) HOOKS 技術(shù) HOOKS 是PHILIPS擁有的一項仿真技術(shù),主要解決不同品種單片機的仿真問(wèn)題。使用該專(zhuān)利技術(shù) 就可以仿真所有具有HOOKS 特性的單片機,即使該單片機是不同廠(chǎng)家制造的。使用HOOKS 技術(shù)制造的仿真器可以兼容仿真不同廠(chǎng)家的多種單片機,而且仿真的電氣性能非常接近于真實(shí)的單片機。但是HOOKS 技術(shù)對仿真器的制造廠(chǎng)家的技術(shù)要求特別高,不同的仿真器生產(chǎn)廠(chǎng)家同時(shí)得到HOOKS 技術(shù)的授權,但是設計的仿真器的性能差別很大。 10 年前國內就已經(jīng)得到了 PHILIPS 的 HOOKS 技術(shù)授權,但是受當時(shí)技術(shù)水準的限制研制的 HOOKS 仿真器還不能實(shí)用。即使到了今天,也不是每個(gè)仿真器廠(chǎng)家都能生產(chǎn)HOOKS 仿真器,即使生 產(chǎn)出來(lái)性能也差異很大,用戶(hù)應仔細區別。 (4) 內嵌仿真功能的芯片 隨著(zhù)芯片技術(shù)的發(fā)展,很多單片機生產(chǎn)廠(chǎng)商在芯片內部增加了仿真功能,一般通過(guò)JTAG 接口進(jìn)行控制。為了降低成本和增加可靠性,內嵌的仿真部分一般功能比較簡(jiǎn)單。 根據當前的發(fā)展趨勢,如果只仿真標準的MCS-51 系列單片機可以選用Bondout 技術(shù)的仿真器;如果用戶(hù)希望仿真器功能更多更靈活的諸如增強型80C51 系列單片機的話(huà),那么必須選用HOOKS 技術(shù)仿真器。二者比較而言,采用HOOKS 技術(shù)的仿真器性?xún)r(jià)比要高于Bondout 技術(shù)。 第三章 國內仿真器的現狀 到今天為止國內的仿真器發(fā)展大約有20 年的歷史,總的說(shuō)來(lái)生產(chǎn)商的規模都不是很大,在新產(chǎn)品 的研制/開(kāi)發(fā)/服務(wù)上都不能投入很大的資金。根據仿真器使用的技術(shù)來(lái)劃分,國內仿真器的設計大約可以分成以下幾個(gè)時(shí)期: (1) 70 年代末期-80 年代中期 這個(gè)時(shí)期采用的技術(shù)主要是仿真開(kāi)發(fā)系統,現在看來(lái)技術(shù)含量不高,用戶(hù)要求也不高。 (2) 80 年代末期-90 年代末期 這個(gè)時(shí)期主要使用華邦一顆帶有仿真功能的芯片制作,采用的技術(shù)應該叫做Bondout。采用這顆芯片能大大簡(jiǎn)化仿真器的設計,因此國內仿真器的水準有了大的提高,基本上可以不占用用戶(hù)資源。 正是由于仿真性能的提高,國內的仿真器制作在將近 10 年的時(shí)間內沒(méi)有進(jìn)步,一直采用這種制作模式。雖然個(gè)別廠(chǎng)商也嘗試過(guò)別的技術(shù)來(lái)提高仿真水準,例如HOOKS 技術(shù),但是由于本身技術(shù)的限制沒(méi)有成功。相反國外的仿真器較早地使用了HOOKS 技術(shù),在初期由于HOOKS 技術(shù)本身的復雜性,仿 真性能和價(jià)格不如國內采用Bondout 的仿真器。 隨著(zhù)IC 技術(shù)的發(fā)展,國內制作HOOKS 技術(shù)的條件已經(jīng)成熟,但是國內的幾家主要的生產(chǎn)廠(chǎng)商還 陶醉于Bondout 技術(shù)之中。 (3) 2000 年開(kāi)始 2000 年是中國仿真器市場(chǎng)變化最大的時(shí)期,其中最引人注目的變化是華邦仿真芯片W78958 的停產(chǎn)。 華邦公司在設計W78958 芯片時(shí),其內部的仿真功能只是為了仿真器廠(chǎng)商能制作仿真器以便更好的推廣W78958。但是經(jīng)過(guò)幾年的變化,W78958 演變成為一顆仿真器上使用的仿真專(zhuān)用芯片而不是用戶(hù)使用的標準芯片,使用的范圍也僅限于國內,一年不到20000 只的用量也促使華邦公司在進(jìn)入2002年后宣布將停產(chǎn)該芯片。 W78958 停產(chǎn)以后,國內仿真器廠(chǎng)商處于一個(gè)非常尷尬的局面。由于W78958 在國內使用了將近10 年,國內的用戶(hù)群非常龐大,這些用戶(hù)將無(wú)法得到持續的支持特別是維修方面。另外,國內圍繞在W78958 上所做的技術(shù)工作也無(wú)法得到延續和提高,很多業(yè)界人士認為仿真器行業(yè)將面臨另起爐灶或重新洗牌的局面。 HOOKS 技術(shù)無(wú)疑是仿真器廠(chǎng)商在失去W78958 后的替代品,但是由于沒(méi)有長(cháng)期跟蹤和關(guān)注,短期內多數廠(chǎng)家無(wú)法將復雜的HOOKS 技術(shù)應用于成熟的產(chǎn)品中。專(zhuān)家們認為仿真器廠(chǎng)家的整體轉型可能需要2-3 年的周期,并且有相當的仿真器廠(chǎng)家將會(huì )被淘汰,市場(chǎng)擁有量將主要集中在少數幾個(gè)仿真器廠(chǎng)家。 周立功單片機發(fā)展有限公司是PHILIPS 在國內最大的代理商,它以獨特的技術(shù)銷(xiāo)售引起國內乃至全球的注目。周立功公司成立時(shí)間不到5 年,但是膨脹很快,現在已然成為國內單片機行業(yè)的龍頭,一言一行對整個(gè)行業(yè)影響很大。 2001 年12 月,周立功公司試探性地推出第一款仿真器TKS-764,用于支持周立功公司當時(shí)的 主打芯片51LPC 系列OTP 單片機。由于TKS-764 內部穩定可靠的設計,并直接直接在Keil 中的調試,所以推出后得到51LPC 用戶(hù)的青睞,擁有相當大的用戶(hù)群。 2002 年6 月,周立功旗下的廣州致遠電子有限公司在國內率先推出研制達兩年之久的HOOKS 仿真器,全面支持PHILIPS 和其它公司的增強型80C51 系列單片機的仿真問(wèn)題。該系列仿真器徹底解決了國內仿真器在仿真低電壓、內部64K 程序、靜態(tài)和動(dòng)態(tài)關(guān)閉ALE、靜態(tài)和動(dòng)態(tài)切換6/12 Clock、4 個(gè)中斷優(yōu)先級、串口從地址自動(dòng)識別和幀錯誤檢測以及P8xC51 獨具定時(shí)器2 等增強性能的難題, 短期內使仿真器的用戶(hù)群迅速擴大,并在業(yè)界得到良好的口碑。 TKS 系列HOOKS 技術(shù)仿真器推出后,在仿真器行業(yè)引起了不小的震動(dòng)。因為周立功公司在公眾前的形象一一直是一個(gè)優(yōu)秀的芯片代理商,在掌握了先進(jìn)的仿真器技術(shù)后將改變整個(gè)行業(yè)的格局。國內的仿真器生產(chǎn)廠(chǎng)商在華邦的仿真芯片停產(chǎn)后發(fā)現自己處于一個(gè)尷尬的境地,現有的仿真器不能繼續生產(chǎn)了。而轉向HOOKS 技術(shù)還需要一段研發(fā)的過(guò)程,即使有些廠(chǎng)家匆匆推出了HOOKS 技術(shù)仿真器卻明顯比周立功公司的HOOKS 技術(shù)仿真器在性能上有明顯的差距,仿真器行業(yè)可能會(huì )重新洗牌。 第五章 如何挑選通用仿真器 仿真器是一種很特殊的電子工具,仿真器的性能跟設計者的水平密切相關(guān)。同樣使用一種仿真器技術(shù),但是最終產(chǎn)品的性能差別很大。根據用戶(hù)的不同用途,可以照如下標準挑選仿真器: 如果主要用途是商業(yè)產(chǎn)品開(kāi)發(fā),使用專(zhuān)用仿真器比較理想因為專(zhuān)用仿真器只是仿真某一種或一類(lèi)芯片,可以做得性能比較高,性能也比較穩定,不用兼顧其它芯片的特殊要求。專(zhuān)用仿真器可能價(jià)格高一點(diǎn),但是對商業(yè)開(kāi)發(fā)來(lái)講良好的性能是第一位的。 盡量采用技術(shù)含量高的仿真技術(shù) 例如,HOOKS 技術(shù)由于其良好的兼容性以及接近實(shí)際芯片的性能,應該成為通用和專(zhuān)用仿真器首選。 慎重選擇仿真芯片裝在外置仿真頭上的結構 有些仿真器的仿真芯片放置在外置仿真頭的上方,這種方式的優(yōu)點(diǎn)是可以通過(guò)更換仿真頭來(lái)更換仿真器的仿真性能,通用性比較強,可以仿真不同類(lèi)型的單片機。一些宣傳中說(shuō)仿真芯片貼近用戶(hù)板,性能是最可靠的,但實(shí)際不是這樣的。仿真芯片除了輸出用戶(hù)信號外,還要通過(guò)復雜的總線(xiàn)由監控電路控制,這種控制時(shí)序是最重要的。由于控制時(shí)序頻率比較高,因此不應該通過(guò)較長(cháng)的仿真電纜輸出到外部仿真頭上,這很容易受到外部的干擾或干擾外部。一旦控制時(shí)序出現問(wèn)題,仿真芯片離用戶(hù)板再近也沒(méi)有用途。 注意仿真器的一些細節問(wèn)題。例如: (1) 否支持外部復位信號? (2) 是否支持用戶(hù)板晶振? (3) 能否在真正仿真內部64K 程序 (P0/P2 口仍做I/O 口)? (4) P0/P2 口是否可以同時(shí)用作I/O 口和總線(xiàn)? (5) 仿真器的輸出/輸入口是否有可靠的保護? (6) 是否支持低電壓的仿真? (7) 是否支持增強型80C51性能?例如內部的附加X(jué)RAM,雙DPTR,ALE 關(guān)閉,6CLK 時(shí)鐘等。 (8) 是否支持靜態(tài)關(guān)閉和動(dòng)態(tài)關(guān)閉ALE? (9) 是否靜態(tài)切換和動(dòng)態(tài)切換6/12 Clock? (10)是否支持更高的仿真頻率? 仿真器廠(chǎng)家后續的技術(shù)支持 由于仿真器在應用中的特殊性,用戶(hù)在選購時(shí)盡量選擇有強大技術(shù)支持的生產(chǎn)廠(chǎng)家。好的技術(shù)支持不但能給您帶來(lái)仿真器使用上的支持,也能給您在應用項目上的各個(gè)方面提出良好的建議和指導,使您能快速準確的完成您目前的項目。但如前所述,國內多數廠(chǎng)商規模很小,不能給用戶(hù)提供全面的技術(shù)支持。周立功公司在進(jìn)入工具行業(yè)后,提出了單片機的一攬子解決方,提供包括工具在內的全方位的用戶(hù)支持,開(kāi)辟了一種全新的銷(xiāo)售服務(wù)模式。 第六章 如何測試通用仿真器 在選擇了仿真器生產(chǎn)廠(chǎng)商后,用戶(hù)還需要對仿真器的性能做仔細的測試,保證您選擇的仿真器能夠達到該仿真器保證的性能以及作為仿真器應該達到的性能。 在選擇一種仿真器前,通過(guò)該仿真器的廣告和銷(xiāo)售人員的介紹,用戶(hù)能基本上了解該仿真器的突出性能。這些突出性能應該是該仿真器確實(shí)存在的功能,雖然可能有被夸大但一般都不會(huì )有欺騙的成分。這些性能好不好需要有針對性的一一驗證,這里只能建議用戶(hù)將目光注意在實(shí)際仿真性能上,而不要過(guò)分注意一些與仿真器無(wú)關(guān)或關(guān)系不大的功能。 很多的仿真器雖然具備一些附加的功能,但是用戶(hù)必須要注意到這些仿真器可能在一些最基本的仿真功能卻做不好,這種現象在國產(chǎn)的仿真器中非常普遍!由于用戶(hù)并不專(zhuān)業(yè)于仿真器的測試,因此在購買(mǎi)中不知道對這些仿真器的死點(diǎn)進(jìn)行驗證。等以后在學(xué)習特別是在開(kāi)發(fā)設計中,這些設計中的死點(diǎn)可能給您帶來(lái)莫名其妙的問(wèn)題。您可能要花幾倍的時(shí)間來(lái)尋找其中的原因,因為您首先懷疑是您系統的問(wèn)題而不懷疑是仿真器的問(wèn)題。所以選擇一個(gè)性能可靠的仿真器是十分重要的,這需要非常專(zhuān)業(yè)化的測試程序來(lái)實(shí)現。 以下的測試程序由廣州致遠電子有限公司提供,經(jīng)過(guò)長(cháng)時(shí)間的使用證明能基本上反映出一個(gè)仿真器設計水平的高低。廣州致遠電子有限公司在提供這些測試程序時(shí)聲明:這些測試程序只是指出仿真器設 計中容易出現的問(wèn)題,但并不有意攻擊任何含有上述問(wèn)題的仿真器廠(chǎng)家。 1.單步性能的測試 測試說(shuō)明:?jiǎn)尾绞欠抡嫫髟O計中比較難實(shí)現的功能。照通常的理解,用戶(hù)每執行一個(gè)單步應該準確實(shí)現理想運行的單步性能。例如,運行一個(gè)機器周期的指令,內部的所有時(shí)序應該都動(dòng)作一個(gè)機器周 期而不能出現不動(dòng)作或動(dòng)作過(guò)度的現象。不過(guò)很遺憾的看到國內的仿真器多數不能達到這個(gè)指標。 測試程序: ORG 0000H SETB TR0 /* 打開(kāi)定時(shí)器0 */ TestStart: NOP /* 定時(shí)器0 運行1個(gè)機器周期, TL0 加1 */ MOV A,#0FFH /* 定時(shí)器0 運行1個(gè)機器周期, TL0 加1 */ MUL AB /* 定時(shí)器0 運行4 個(gè)機器周期, TL0 加4 */ LJMP TestStart /* 定時(shí)器0 運行2 個(gè)機器周期, TL0 加2 */ END 測試步驟 (1) 照您當前使用的仿真器要求測試上面的程序; (2) 在運行前打開(kāi)TL0 的顯示,以便單步運行后能觀(guān)察TL0 的變化; (3) 使用當前仿真器環(huán)境提供的單步功能開(kāi)始單步運行; (4) 單步運行后檢查T(mén)L0 變化的數值是否與指令的周期數相同。 測試結論:仿真器如果沒(méi)有照嚴格正規的設計,程序的單步運行性能將不準確,一般會(huì )出現實(shí)際運行時(shí)間變長(cháng)的現象,這在時(shí)間要求較高的單步運行將不能仿真程序的真正運行。 2.中斷性能的測試 測試說(shuō)明:中斷是一種非正常的程序跳轉,單步仿真有一定的難度,尤其在低檔仿真器中。在當前采用Bondout 技術(shù)制作的仿真器中一般可以做到正確仿真,但是仍有一些仿真器不能正確單步仿真中斷。 測試程序: ORG 0000H LJMP TestStart ORG 000BH /* 定時(shí)器0 的中斷服務(wù)程序 */ RETI TestStart: SETB EA /* 開(kāi)放全局中斷允許 */ SETB ET0 /* 開(kāi)放T0 中斷允許 */ TestLoop: SETB TF0 /* 設置T0 的中斷標志 */ INC A /* A 數值加一,以便觀(guān)察程序持續運行 */ LJMP TestLoop /* 連續運行 */ END 測試步驟 (1) 照您當前使用的仿真器要求測試上面的程序。 (2) 每次SETB TF0 后程序將進(jìn)入T0 的中斷服務(wù)程序,執行完畢后返回主程序繼續運行。 (3) 主程序能在TestLoop 中連續運行,因此A 能連續加一,但是每循環(huán)一次就進(jìn)入一次中斷。 測試結論:仿真器如果沒(méi)有照嚴格正規設計,程序的中斷性能將不準確?赡艹霈F程序不能跳轉到中斷服務(wù)程序,或沒(méi)有返回到正確的主程序,或A 不能每次循環(huán)連續的加1。 3.連續中斷性能的測試 測試說(shuō)明:在80C51 的中斷系統中,串口中斷比較特殊。進(jìn)入串口中斷服務(wù)程序后中斷標志TI或RI不會(huì )自動(dòng)清除,如果用戶(hù)程序不對TI 或RI進(jìn)行清除操作則可能會(huì )出現連續進(jìn)入中斷服務(wù)程序的情況。根據80C51 的中斷處理,在退出中斷后必須執行完一條指令后才能重新進(jìn)入中斷服務(wù)程序,因此即使連續中斷的情況下主程序也能得到連續執行。 測試程序: ORG 0000H LJMP TestStart ORG 0023H /* 定時(shí)器0 的中斷服務(wù)程序 */ RETI TestStart: SETB EA /* 開(kāi)放全局中斷允許 */ SETB ES /* 開(kāi)放串口中斷允許 */ SETB TI TestLoop: NOP NOP INC A /* A 數值加一,以便觀(guān)察程序持續運行 */ LJMP TestLoop /* 連續運行 */ END 測試步驟 (1) 照您當前使用的仿真器要求測試上面的程序。 (2) 進(jìn)入TestLoop 后,每次單步運行完一條程序都會(huì )進(jìn)入串口中斷,退出后繼續運行一條下面的程序,然后又進(jìn)入中斷服務(wù)程序,A 的數值可以得到遞增。 (3) 主程序能在TestLoop 中連續運行,因此A 能連續加一,但是每循環(huán)一次就進(jìn)入一次中斷。 測試結論:仿真器如果沒(méi)有照嚴格正規設計,程序連續運行中斷程序性能將不準確?赡艹霈F程序不能跳轉到中斷服務(wù)程序,或沒(méi)有返回到正確的主程序,或A 不能每次循環(huán)連續的加1。 測試小結 上述的幾個(gè)測試程序對仿真器的性能要求很高,如果仿真器通過(guò)測試說(shuō)明被測試的仿真器仿真性能指標較高;如果仿真器沒(méi)有通過(guò)測試只能判斷仿真器性能不是最好,具體的綜合性能要有待其它檢驗。 第七章 如何挑選測試HOOKS 技術(shù)仿真器 HOOKS 技術(shù)是國外普遍采用的一種仿真技術(shù),同Bondout 技術(shù)相比較,仿真器的適用范圍可以更廣。HOOKS 技術(shù)在10年前已經(jīng)被國內引進(jìn),并被當時(shí)的仿真器廠(chǎng)家試圖采用。但是由于HOOKS 技術(shù)本身的復雜性,當時(shí)國內眾仿真器廠(chǎng)家竟無(wú)法設計出可以使用的仿真器,致使國內的仿真技術(shù)遠遠落后于國外。 2002年,周立功旗下的廣州致遠電子有限公司推出了研制多年的TKS 系列HOOKS 仿真器,并在性能上全面超過(guò)國外同類(lèi)型的HOOKS 仿真器,國內的用戶(hù)能以低廉的價(jià)格購買(mǎi)到技術(shù)先進(jìn)的HOOKS技術(shù)仿真器。在TKS 系列HOOKS 仿真器面市以后,國內的仿真器廠(chǎng)商紛紛加強研發(fā)力量研制HOOKS技術(shù),經(jīng)過(guò)了一段時(shí)間后也宣布供應采用HOOKS 技術(shù)的仿真器。用戶(hù)需要注意的是:HOOKS 技術(shù)只是一個(gè)基本的仿真技術(shù),要最終作成仿真器還必須依靠設計工程師精心的設計,因此市場(chǎng)上HOOKS 技術(shù)的仿真器性能指標可能有很大的差別,有的不占用用戶(hù)資源,有的就做不到;有的仿真頻率可以到很高,但是有的不行。因此用戶(hù)應仔細加以挑選和鑒別。 根據HOOKS 技術(shù)本身的特點(diǎn),用戶(hù)應該對以下的幾個(gè)方面加以注意和測試。 能否運行外部用戶(hù)目標板上的程序 由于HOOKS 技術(shù)中P0/P2 口是重新構造的,因此P0/P2 口上的時(shí)序處理是整個(gè)設計中的難點(diǎn)。P0/P2 的I/O 特性和數據總線(xiàn)特性相對容易實(shí)現一點(diǎn),但是程序總線(xiàn)很難正確實(shí)現,這是由于HOOKS的技術(shù)結構決定的。一般HOOKS 仿真器在實(shí)現仿真內部64K 代碼空間比較容易,但是仿真內部4K (類(lèi)似89C51)/8K (類(lèi)似89C54)/16K (類(lèi)似89C54)/32K (類(lèi)似89C58)等能外擴ROM 空間的MCU類(lèi)型則無(wú)法實(shí)現。在國內外所有的HOOKS 技術(shù)的仿真器中,只有廣州致遠公司的TKS 仿真器B 系列能真正做到穩定運行外部用戶(hù)目標板上的程序。運行外部用戶(hù)目標板上的程序是非常必要的,因為用戶(hù)可能在外部擴充了一般的用戶(hù)程序,需要實(shí)際仿真一下來(lái)驗證整個(gè)系統的正確性;也可能在外部放置了大容量的(可能超過(guò)64K 的物理地址限制)分組字庫,而這種特性是仿真器內部無(wú)法實(shí)現的;也可能是外部有分組的BANK 方式的運行代碼,這種方式要求仿真器必須有運行外部程序代碼的能力。 P0/P2 口能否同時(shí)用作總線(xiàn)和I/O 這種特性是芯片本來(lái)的性能,但是由于HOOKS 技術(shù)的難度,有很多HOOKS 仿真器不能做到這一點(diǎn),導致用戶(hù)在使用時(shí)無(wú)法全面滿(mǎn)足要求。該性能一般不需要測試,可以直接閱讀仿真器的性能說(shuō)明或向生產(chǎn)廠(chǎng)商或代理商詢(xún)問(wèn)。作者檢測過(guò)國內外知名仿真器廠(chǎng)家的多種HOOKS 仿真器,幾乎都沒(méi)有完美做到P0/P2 口的準確仿真。 P0/P2 口的直流參數 如果需要檢測的仿真器根本做不到同時(shí)仿真I/O 和總線(xiàn)方式,則沒(méi)有必要檢測P0/P2 的直流參數。如果要檢測的仿真器宣稱(chēng)能夠同時(shí)仿真I/O 和總線(xiàn)方式,用戶(hù)還必須分別在I/O 和總線(xiàn)兩種方式下對直流參數進(jìn)行測試。根據作者的HOOKS 仿真器測試經(jīng)驗,有的仿真器雖然宣稱(chēng)能夠同時(shí)仿真I/O 和總線(xiàn)方式,但是根本不區分這兩種方式驅動(dòng)能力,采用的是一種平均方式,這樣在作為I/O 時(shí)高電平驅動(dòng)能力過(guò)大,而作為總線(xiàn)時(shí)驅動(dòng)能力過(guò)小。用戶(hù)在使用這類(lèi)仿真器作為輸入時(shí),必須加大外部信號的驅動(dòng)能力,這跟實(shí)際芯片的驅動(dòng)能力相差太遠;在作為總線(xiàn)使用時(shí),如果外部的總線(xiàn)(包括地址總線(xiàn)和數據總線(xiàn))個(gè)數稍多,總線(xiàn)電平將嚴重下降而無(wú)法工作。用戶(hù)可以使用下面的測試程序配合示波器檢查。 測試程序: 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) 照您當前使用的仿真器要求測試上面的程序,仿真器不接任何用戶(hù)設備。 (2) 單步運行完TestStart 的程序行,P0 的數值設置為0FFH。這時(shí)使用電壓表測量一下P0的任意一個(gè)管腳(例如P0.0)的電壓,記錄為V1,V1 的數值一般小于當前的電源電壓。然后使用一個(gè)2K 電阻,一端接仿真器提供的地,另一端接P0.0,使用電壓表測量一下P0.0 的電壓,記錄為V2,V2的電壓越接近與0 說(shuō)明該仿真器P0 在I/O 口方式下的特性越好(接近于開(kāi)漏)。如果V2 大于1伏說(shuō)明P0 口的輸入電阻在10K 以下,該仿真器P0 口在I/O 下性能較差。 (3) 在TestLoop 中連續全速運行,仍保持2K 電阻接在P0.0。使用示波器觀(guān)察P0.0 引腳,可以看到占空比較小的正電平脈沖,該正電平脈沖是有P0 輸出的低8 位地址和數據輸出引起的,因為處于總線(xiàn)方式,P0 口的驅動(dòng)能力應該較強。保持示波器的正常顯示,然后將2K 電阻不斷的接觸/脫離P0.0 引腳,觀(guān)察P0.0 腳脈沖信號幅度的變化。如果該信號在2K 電阻接入后幅度降低很大,例如1V 以上,說(shuō)明該仿真器P0 口驅動(dòng)能力不足,無(wú)法滿(mǎn)足用戶(hù)的正常的需要。 測試結論:HOOKS 仿真器要同時(shí)仿真I/O 口和總線(xiàn)模式而且保持良好的驅動(dòng)特性是比較困難的,但是可以作到的。一般的HOOKS 仿真器一般不敢宣稱(chēng)同時(shí)仿真I/O 口和總線(xiàn)方式,但是用戶(hù)需要注意即使宣稱(chēng)可以同時(shí)仿真I/O 和總線(xiàn),用戶(hù)也需要照上述的方法進(jìn)行測試,防止廠(chǎng)家采取驅動(dòng)折中的方法掩蓋。根據作者的測試結果,國內所有的HOOKS 仿真器只有TKS 系列可以作到真正同時(shí)仿真I/O 口和總線(xiàn)方式,重要的是仍保持了良好的驅動(dòng)特性。 是否占用用戶(hù)資源 設計優(yōu)良的HOOKS 仿真器不會(huì )占用任何用戶(hù)資源,但是由于設計技術(shù)的差別,有一些采用HOOKS技術(shù)的仿真器不能達到這樣的性能,一般會(huì )占用部分資源。占用資源將在使用中限制用戶(hù)的使用,用戶(hù)可能無(wú)法通過(guò)該仿真器實(shí)現正常程序的功能。該性能一般不需要測試,可以直接閱讀仿真器的性能說(shuō)明或向生產(chǎn)廠(chǎng)商或代理商詢(xún)問(wèn)。 ALE 信號的關(guān)閉/開(kāi)啟 HOOKS 技術(shù)的一個(gè)突出優(yōu)點(diǎn)是能支持增強性能的仿真,而ALE 信號的關(guān)閉/開(kāi)啟是增強性能的一個(gè)典型范例。由于在HOOKS 技術(shù)中,依賴(lài)ALE 信號能大大簡(jiǎn)化信號的處理,因此一般采用HOOKS 技術(shù)的仿真器都不能關(guān)閉ALE 信號,否則會(huì )引起仿真時(shí)序的全面紊亂。該性能一般在仿真器的性能說(shuō)明中沒(méi)有詳細說(shuō)明,因此需要用戶(hù)自己進(jìn)行測試。 下面的測試程序以PHILIPS 的P89C52X2 仿真芯片為例。 測試程序: ORG 0000H LJMP TestStart TestStart: MOV P2,#55H /* 先對P1 進(jìn)行設置 */ TestLoop: ORL AUXR,#01H /* 關(guān)閉ALE 信號 */ NOP MOV P2,#55H NOP ANL AUXR,#0FEH /* 開(kāi)啟ALE 信號 */ NOP MOV P2,#0AAH NOP LJMP TestLoop /* 連續運行 */ END 測試步驟 (1) 照您當前使用的仿真器要求測試上面的程序。 (2) 進(jìn)入TestLoop 后,連續單步運行,程序應該能照正確的程序流程運行,而且對P2 的操作能正確在P2 口反映出來(lái)。 (3) 在TestLoop 中連續全速運行,然后停止程序運行,觀(guān)察當前程序位置是否是在TestLoop 內的有效位置,P2 是否是前一個(gè)對P2 操作的數值。 測試結論:仿真器如果不能支持ALE 的關(guān)閉將無(wú)法通過(guò)上面的測試程序。 雙倍速時(shí)鐘的動(dòng)態(tài)/靜態(tài)切換 PHILIPS、SST 等一些MCU 廠(chǎng)商在自己的增強型51 產(chǎn)品中增加了雙倍速時(shí)鐘的功能,使51 內核的速度提高了兩倍。而且在有的型號中同時(shí)具有6/12Clock 時(shí)鐘切換的功能,用戶(hù)在使用中有了更多的靈活性。因此,這種變化要求HOOKS 仿真器必須同時(shí)滿(mǎn)足6/12Clock 兩種方式之一的仿真(靜態(tài)切換),更高的要求則是能在用戶(hù)程序運行中變換6/12Clock 模式(動(dòng)態(tài)切換)。能同時(shí)滿(mǎn)足動(dòng)態(tài)/靜態(tài)切換的仿真器難度很大,在國內除TKS 宣布掌握這一技術(shù)外,沒(méi)有見(jiàn)到其它廠(chǎng)家有類(lèi)似的報道。時(shí)鐘的靜態(tài)切換功能可以直接查閱仿真器的性能說(shuō)明或向生產(chǎn)廠(chǎng)商/代理商詢(xún)問(wèn),也可以用下面的程序進(jìn)行測試: 下面的測試程序以PHILIPS 的P89C52X2 仿真芯片為例。 測試程序: ORG 0000H LJMP TestStart TestStart: MOV P2,#55H /* 先對P2 進(jìn)行設置 */ TestLoop: ORL CKCON,#01H /* 切換為6Clock 模式 */ NOP MOV P2,#55H NOP ANL CKCON,#0FEH /* 切換為6Clock 模式*/ NOP MOV P2,#0AAH NOP LJMP TestLoop /* 連續運行 */ END 測試步驟 (1) 照您當前使用的仿真器要求測試上面的程序。 (2) 進(jìn)入TestLoop 后,連續單步運行,程序應該能照正確的程序流程運行,而且對P2 的操作能正確在P2 口反映出來(lái)。 (3) 在TestLoop 中連續全速運行,然后停止程序運行,觀(guān)察當前程序位置是否是在TestLoop 內的有效位置,P2 是否是前一個(gè)對P2 操作的數值。 測試結論:仿真器如果不能支持6/12Clock 的切換將無(wú)法通過(guò)上面的測試程序。 |