仿真器

仿真器(emulator)以某一系統復現另一系統的功能。與計算機模擬系統(Computer Simulation)的區別在於,仿真器致力於模仿系統的外在表現、行為,而不是模擬系統的抽象模型。請參閱仿真和模擬詞條。

概述,仿真器的基本實現方式,單片機仿真器的作用,仿真器的功能概念,仿真器中使用的技術,仿真器的種類:,

概述

仿真器可以替代你的目標系統中的MCU,仿真其運行。 仿真器運行起來和實際的目標處理器一樣,但是增加了其它功能,使你能夠通過桌面計算機或其它調試界面來觀察MCU中的程式和數據,並控制MCU的運行。隨著IC和軟體集成平台的飛速發展,仿真器也不斷賦予新的內容和新的挑戰,因為它的發展必須與CPU同步,要想在匯流排速度為150Mhz 64bit的情況下實現TRACE已經成為不可能。

仿真器的基本實現方式

由於仿真器屬於一種高科技含量的開發工具,其實現的方式比較複雜。
1).商用CPU這是一種最簡單的實現方式,直接採用最普通的商用CPU去設計仿真器。一般來說,CPU都有一些資源,如非禁止中斷,NMI,TRAP指令,Ready信號等等。在用商用CPU去設計仿真器時,基本上都會採用這些指令式信號,以達到單步Step,全速運行Go,斷點Breakpoint的功能。用商用CPU去設計仿真器,一般來說其CPU的速度不能很快,
如像8051,196等是可以採用這種方式的。若CPU的速度很快,則無法去實現。因為仿真器要在CPU的地址,數據匯流排上截取或插入某些資訊。CPU的速度太快,則根本無法在時序上去做截取或插入資訊的動作。用商用CPU去做仿真CPU,一般來說會碰到I/O管腳重整的困難,就像最簡單的8051或83C196,其A/D匯流排都可復用成I/O。而仿真器是要提供所有有關CPU的資料給用戶。所以,實際上CPU是以地址/數據匯流排的方式在運行。如用戶的設計是用I/O方式的話,仿真器就一定要重新整合一套I/O線路出來。這一點是最麻煩的地方,往往有些簡單的仿真器就不能做到這一點。
.2)採用特殊的仿真模式有的商用CPU會提供一些特殊的仿真模式,其CPU還是採用商用CPU。但當CPU在上電或復位時,如果在CPU的某些管腳上灌一些特殊的電平或序列,則CPU就會進入一種特殊的仿真模式,如Philips的8051CPU,就是有一種叫“Hooks”的模式。進入這種模式之後,CPU會在地址數據匯流排上分時地提供一些用於I/O重建的信息。有了這種特殊的仿真模式,仿真器進行I/O重建相對來說比較簡單一些,但往往會存在著一些時序方面的問題。畢竟進入仿真模式之後的CPU的時序與普通CPU是有所不同的。如果用戶的設計非常苛刻的話,有時會存在連不上目標板的問題,並且,這時的CPU在跑很高的時鐘頻率會遇到困難。
3.)使用專用仿真CPU–BondoutSilicon一般來說,當CPU的速度很快時,往往就需要專用的仿真CPU了。這時仿真器在控制方面,相對來說設計起來就比較簡單。但此時仿真器的性能,已在很大程度上取決於仿真CPU了。仿真CPU設計得好,則相對來說仿真器的功能及穩定度都會比較好。但是,由於仿真CPU是一款專用的CPU,對於晶片廠商來說生產的數量非常少,往往其測試程度不會很高,專用的仿真CPU或多或少都會有些問題,就像目前國內仿真器普遍採用的W78958仿真CPU。這是Winbond為8051做的一種仿真CPU,其在中斷,I/O的驅動能力等存在著問題。
4).利用BDM,JTAG方式當CPU越來越複雜,速度越變越快時,以上方式都已不能滿足要求了。像PowerPC或Pentium,其內部有MMU,Cache,並且可亂序執行,以往傳統的匯流排方式都不可行了。JTAG的提出,最初是給測試用的,主要目的是為了測試器件是否焊好,是否存在短路或斷路。後來,一些CPU的廠商把這一概念引進到了用於CPU內部。把JTAG的移位暫存器全部連到CPU內部的控制狀態暫存器,並增加一些仿真器專用的暫存器,如控制Memory的讀寫等。這時,仿真器在硬體上面已變得很簡單了,用戶設計目標板時,只要把幾個控制管腳電平設計正確,就可以實現線上實時控制。目前,32位元以上的CPU普遍支
持這種調試方式。5.ROM-Monitor絕大多數CPU廠商在新推出他的新一代CPU的同時,會相應的推出他的參考設計原型,這就是大家所熟知的ADS開發板,配上第三方的集成開發環境,就可以實現對相應CPU的軟體開發,這就是ROM-Monitor仿真器的實現構成。

單片機仿真器的作用

單片機仿真器是一種在電子產品開發階段代替單片機晶片進行軟硬體調試的開發工具。配合集成開發環境使用仿真器可以對單片機程式進行單步跟蹤調試,也可以使用斷點、全速等調試手段,並可觀察各種變數、RAM及暫存器的實時數據,跟蹤程式的執行情況。同時還可以對硬體電路進行實時的調試。利用單片機仿真器可以迅速找到並排除程式中的邏輯錯誤,大大縮短單片機開發的周期。在現場只利用燒錄器反覆燒寫單片機,通過肉眼觀察結果進行開發的方法大大增加了調試的難度,延長了整個開發周期,並且不容易發現程式中許多隱含的錯誤,特別對於單片機開發經驗不豐富的初學者來說更加困難,由此可見,單片機仿真器單片機系統開發中發揮著重要的作用。

仿真器的功能概念

1).執行斷點(Exebreakpoint)這是最普通的一個斷點,所有的仿真器都必須有,其實現方式二種。一種是硬體斷點,一般來說是用硬體的比較器去做的;另一種是軟體斷點,如用TRAP指令。評價執行斷點的標準點:當用戶在調試用戶板EPROM中的程式時,還能不能設斷點,往往一些低檔的仿真器是做不到這一點的。
2).匯流排斷點(Busbreakpoint)光有執行斷點是不夠滿足實際需求的,匯流排斷點是一個地址斷點,若用戶的系統需要調數據匯流排,或中斷,定時器/記數器,並且要實時調試時,這時候就需要有匯流排斷點。匯流排斷點可以設定為地址匯流排,數據匯流排,CPU的一些狀態。當這時設定匹配時,讓CPU停下來,所以,這樣的仿真器的功能就比較強大,很容易找問題,但是在實現這些功能時,所用到的硬體設計就要複雜得多了。
3).暫存器斷點(RegisterBreakpoint)這種斷點往往需要CPU能支持這功能。CPU內部要有一個比較器,當所設定的CPU的值與之匹配時,仿真器就停下來。像PowerPC是可以做到這一點的。
4).事件(Event)以上所說的匯流排斷點,可以看成是事件的一種要素。事件可以是某些CPU的信息的組合,也可以是外部的觸發輸入,並且可以有邏輯的組合,時序上分先後順序,具有記數功能等等。這種事件功能,在一些高檔的仿真器中是一種最基本的功能。
5).觸發(Trigger)事件的最終目的是產生觸發,這種觸發不見得要讓CPU馬上停下來,往往用戶在調試時,有可能是想看當設定的條件滿足要求之後的幾個CPUCycle時的CPU情況。所以,觸發要滿足這方面的需求,並且觸發最好能和追蹤存儲器配合使用。
6).追蹤存儲器(TraceMemory)追蹤存儲器就像是一台攝像機,在CPU全速運行時,能抓取CPU的一些信息,如地址/數據匯流排,CPU的狀態,I/O管腳情況。所以,追蹤存儲器就必須要有一定的寬度與深度,很快就爆滿的追蹤存儲器就不存在什麼意義。目前,大多數人都是在以C,C++的方式寫程式,對於追蹤存儲器中抓下來的數據,就必須要能翻譯或連結到相應的C代碼才有意義。
7).追蹤過濾(Qualify)若是只有追蹤存儲器,沒有追蹤過濾,這樣的追蹤存儲器是沒有什麼用處的!為什麼這么說呢:追蹤存儲器就像以上說的是一台攝像機。用戶總不可能去攝像時,一出家門就開始不作任何刷選地去攝像。往往大家只有感興趣的景點才作攝像。所以,在使用追蹤存儲器時,一定要有一個硬體上的過濾,只挑選有用的信息才存下來,這樣才不會導致追蹤存儲器爆滿。當然,對於已追蹤記錄下來的數據,最好是還有一個軟體過濾的動作,就像是電影的再剪輯。有些仿真器號稱提供追蹤或“邏輯分析儀”功能,但沒有硬體過濾。用戶程式停下來之後,追蹤存儲器中往往是大量的無用信息,真正有用的數據可能反而被覆蓋了。
8).軟體性能分析(SPA)大家在開始一個項目時,往往在項目剛開始時,追求的是功能,而到了一定時候,就要開始追求性能,這時,往往需要作程式代碼的最佳化動作。但是,總不可能把整個用戶程式從頭到尾全部最佳化一次,這是非常沒有效率的。有了軟體性能分析,就可以分析出那些代碼在整個系統的運行過程中占的時間百分比比較高,則在最佳化時,就只需要針對這一部分去最佳化就行了,這樣的效率才能最高。
9).代碼覆蓋率分析(CodeCoverage)代碼覆蓋率分析能幫助用戶分析出用戶的那些代碼是廢代碼。現在,用戶系統越來越大,往往一個項目不是一個人開發的,或者花了好多時間才開發完,往往會存在著大量的廢代碼,在系統的運行過程中,根本就沒有被調用過,但有時又不敢輕易地把它刪除。有了代碼覆蓋率分析的功能,就很容易地分析出那些是廢代碼,可以放心地刪除了。
10).時間節拍(TimeStamp)在一些高檔的CPU,如486,Pentium,內部都已有MMU,Cache等,用戶已根本無法按CPU時鐘及cycle來算出到每一條指令的執行時間了,有時誤差會有好幾倍的出入。這時,有了時間節拍的功能,用戶就能很清楚地知道到每一條指令的執行時間了。時間節拍器記錄是在追蹤存儲器中的,如果要保證記錄足夠長的時間和足夠的精度,需要大量的存儲器。
11).仿真存儲器(EmulationMemory)仿真存儲器,也是仿真器的一個最基本的功能。對於窄地址空間的CPU,要看它是否能提供全空間的仿真存儲器,對於寬地址空間的CPU,要看它能提供多少深度,並且是否能與編譯器的Linker/Locater配合隨意搬移使用。評價一個仿真器的仿真存儲器,還要看它是否一點都不占用用戶空間,能否讀到用戶板EPROM中的程式,能否幫用戶反彙編並存成檔案,能否接在用戶板EPROM上調試。
12).仿真存儲器塊擴展(BankSwitch)一些窄地址空間的CPU,就像8051,其程式空間只有64K,往往有的用戶會覺得不夠用,如要存放一些語音,圖像數據到EPROM中,這時候,就需要有塊擴展功能。往往一些編譯器能支持塊擴展功能,像Keil的C51編譯器。這時,最好仿真器也與一起支持,這樣,用戶在使用時就根本不需要再去考慮是否能平穩地做到塊切換,全局變數與局部變數的問題。
13).記憶體映射(MAP)一般來說,仿真器都會提供內部與外部記憶體映射。但其實,好的仿真器還能做更複雜的屬性,如警式(Guard),唯讀(Read-Only)等等。像這種屬性是非常有用的。像Guard,它的意思是對於不存在的空間,用戶可以設定成Guard。這樣,當程式一旦跑飛進入這空間之後,CPU就馬上停下來。配合上追蹤功能,用戶能很快定位出程式是從哪兒跑飛的,原因是什麼,有可能是push/pop少寫了一個,或者干擾因素等。
14).記憶體飛速(Memoryon-the-fly),追蹤飛速(Traceon-the-fly)在某些場合,如PWM調試馬達,馬達是用PWM的占空比來作馬達速度的控制,有可能CPU不能停下來,一旦CPU停下來,PWM保持高電平。這樣,馬達就要飛轉起來。所以,CPU不能停。這時候,用戶有可能想看仿真存儲器中及追蹤存儲器中的資料,就需要仿真器能支持這方面的功能。這時候有一點非常重要,不能是偷偷地把仿真CPU停下來,讀一下之後再讓CPU跑起來。這樣做就是假的,不存在任何意義,可以採用雙連線埠RAM或者採用影子記憶體的方式(類似Cache)。
15).支持的工具鏈(ToolChains)一個好的仿真器,應能支持眾多的編譯器,就像51,做編譯器的廠商就非常多,如Keil,2500AD,BSOTasking,PLM等。不能要求用戶買了這台仿真器之後,指定用戶只能用某一家的編譯器,而讓用戶去重新熟悉一套編譯器的環境。
16).協定軟體的支持(SupportProtocolS/W)目前,用戶的系統都越來越複雜,像USB,PCMCIA1394,LCD,Ethernet等,就需要相應的協定,如TCP/IP協定,有許多專業寫這方面協定軟體的公司,如Interniche等。一個好的開發系統,最好能直接支持第三方寫好的協定軟體。
17).支持實時作業系統(SupportRTOS)作業系統很多,特別是在嵌入式系統中,如VxWorks,ThreadX,Linux等。如是一個開發系統不能支持用戶購買的作業系統的話,那么那些作業系統就成了一堆廢代碼,根本就不能調試。
開發系統要幫用戶顯示出哪些Task在運行,哪些Task被掛起,掛起的原因是因為Semaphore,Eventflag等,還要幫用戶顯示出Mailbox,messagequeue和memorypool等系統定義的結構。最佳的開發系統更要支持多項目和多CPU的環境。

仿真器中使用的技術

仿真器的生產在國內有十多年的歷史其中使用的技術根據時間和性能的不同大約分成以下幾種:
(1) 仿真開發系統
這種技術主要在仿真器的初級階段使用。由於當時沒有好的仿真技術或仿真晶片,仿真器設計成了一個雙平台的系統,並根據用戶的要求在監控系統和用戶系統中切換。這種仿真系統性能完全依賴於設計者的水平。實際的最終性能廠家之間相差很大。不過總的說來需要占用一定的用戶資源並且設計複雜,現在基本上已經淘汰,只是使用在一些開發學習系統中。
(2) Bondout技術
一般來說人們常常說的專用仿真晶片其實就是Bondout。這種仿真晶片一般也是一種單片機。但是內部具有特殊的配合仿真的時序。當進入仿真狀態後,可以凍結內部的時序運行,可以查看/修改在靜止時單片機內部的資源 。 使用Bondout製作的仿真器一般具有時序運行準確(也有例外)。設計製作成本低等優點: Bondout晶片一般是由單片機生產廠家提供的。因此它只能仿真該廠商指定的單片機,仿真的品種很少 。
(3) HOOKS技術
HOOKS是PHILIPS擁有的一項仿真技術。主要解決不同品種單片機的仿真問題。使用該專利技術就可以仿真所有具有HOOKS特性的單片機。即使該單片機是不同廠家製造的 ,使用HOOKS技術製造的仿真器可以兼容仿真不同廠家的多種單片機,而且仿真的電氣性能非常接近於真實的單片機。 但是HOOKS技術對仿真器的製造廠家的技術要求特別高 。不同的仿真器生產廠家同時得到HOOKS技術的授權。 但是設計的仿真器的性能差別很大 。即使到了今天也不是每個仿真器廠家都能生產HOOKS仿真器。即使生產出來性能也差異很大,用戶應仔細區別 。
(4) 內嵌仿真功能的晶片
隨著晶片技術的發展,很多單片機生產廠商在晶片內部增加了仿真功能一般通過JTAG接口進行控制。為了降低成本和增加可靠性,內嵌的仿真部分一般功能比較簡單。 根據當前的發展趨勢,如果只仿真標準的MCS-51系列單片機可以選用Bondout技術的仿真器。如果 用戶希望仿真器功能更多更靈活的諸如增強型80C51系列單片機的話,那么必須選用HOOKS技術仿真器。二者比較而言採用HOOKS技術的仿真器性價比要高於Bondout技術 。

仿真器的種類:

軟體仿真器:這種方法主要是使用計算機軟體來模擬運行,實際的單片機運行因此仿真與硬體無關的系統具有一定的優點。用戶不需要搭建硬體電路就可以對程式進行驗證,特別適合於偏重算法的程式。軟體仿真的缺點是無法完全仿真與硬體相關的部分,因此最終還要通過硬體仿真來完成最終的設計。
硬體仿真器:使用附加的硬體來替代用戶系統的單片機並完成單片機全部或大部分的功能。使用了附加硬體後用戶就可以對程式的運行進行控制,例如單步,全速,
查看資源斷點等。硬體仿真是開發過程中所必須的。

相關詞條

熱門詞條

聯絡我們