<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)仿真器的原理介紹

          單片機(jī)仿真器的原理介紹

          作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
          一個(gè)理想的單片機(jī)仿真器使開(kāi)發(fā)者能觀察到單片機(jī)內(nèi)部的操作,仿真器是使替代單片機(jī)并使單片機(jī)操作可視化的硬件工具。
          一個(gè)ICE應(yīng)包括兩個(gè)接口,一個(gè)是連接到目標(biāo)板上的MCU插座,另一個(gè)與PC相連。仿真器應(yīng)該與目標(biāo)MCU在電氣及物理上等價(jià),并能在開(kāi)發(fā)系統(tǒng)中替代MCU。目標(biāo)系統(tǒng)的操作可由PC得以控制及觀察。在開(kāi)發(fā)初期,開(kāi)發(fā)系統(tǒng)依靠仿真器工作,當(dāng)目標(biāo)功能完善后,仿真器將被真正的MCU取代。

          ICE的功能及特性:
          在主機(jī)與目標(biāo)系統(tǒng)間產(chǎn)生對(duì)應(yīng)的程序區(qū),host memory作為仿真程序區(qū)(emulator memory)或Shadow memory
          脫離目標(biāo)硬件實(shí)時(shí)測(cè)試代碼
          單步(Step),全速(Run),從特定的狀態(tài)運(yùn)行到特定的狀態(tài)或到斷點(diǎn)(BreakPoint)。這通常指特定的地址,但也可以是特定的觸發(fā)條件。
          修改MCU Register值
          在線修改Memory內(nèi)容
          實(shí)時(shí)跟蹤記錄已執(zhí)行的程序(Trace)

          本文引用地址:http://www.ex-cimer.com/article/201611/315380.htm

          ICE設(shè)計(jì)中的難點(diǎn)及局限性:
          ICE功能的實(shí)現(xiàn)需要與MCU的data bus,address bus,control bus相連,而實(shí)際芯片三總線往往不連外部引腳
          電氣上:ICE的驅(qū)動(dòng)能力及時(shí)序需要與MCU完全相同,而ICE的外加電纜及電路必將降低負(fù)載能力及改變時(shí)序特性,引起一些目標(biāo)系統(tǒng)在極限狀態(tài)下與ICE聯(lián)調(diào)往往會(huì)失敗。
          一個(gè)常見(jiàn)的現(xiàn)象是一個(gè)系統(tǒng)用ICE調(diào)試完成最終用實(shí)際MCU取代ICE可保證運(yùn)行,但若硬件開(kāi)發(fā)過(guò)程中未用ICE,為了調(diào)試軟件問(wèn)題在中途使用了ICE,往往會(huì)在時(shí)序及負(fù)載上出現(xiàn)問(wèn)題。
          理想的是所以的引腳的所以功能與MCU相同,而實(shí)際上不少低端仿真器占用了一個(gè)中斷資源以控制監(jiān)控程序的運(yùn)行

          使用ICE的主要優(yōu)點(diǎn)在于:
          軟件設(shè)計(jì)及實(shí)時(shí)測(cè)試可先于實(shí)際硬件完成
          提供了修改,顯示memory及register的功能,提供了系統(tǒng)的開(kāi)發(fā)效率

          bond-out
          MCU是芯片設(shè)計(jì)公司為實(shí)現(xiàn)其商用MCU的仿真功能,將內(nèi)部的數(shù)據(jù),地址及控制總線連接到芯片封裝的管腳上,使得外部仿真邏輯可以監(jiān)視和控制MCU內(nèi)部的狀態(tài)。一個(gè)ICE的質(zhì)量很大程度上依賴于它與其要仿真的MCU之間的吻合程度,bond-out
          MCU能最大程度上提供ICE與商用MCU的無(wú)差別替換。

          基于bond-out MCU的在線仿真器的結(jié)構(gòu)
          見(jiàn)圖1。系統(tǒng)包括三部分,bond-out MCU,存貯用戶程序的SRAM及仿真監(jiān)控電路。bond-out
          MCU的數(shù)據(jù),地址總線連接到SRAM,作為外部程序儲(chǔ)存器。同時(shí)數(shù)據(jù),地址及控制總線連接到仿真監(jiān)控電路,使ICE可以監(jiān)視和控制bond-out
          MCU的運(yùn)行狀態(tài)。與PC相連的通訊接口根據(jù)速度及成本可選用串口,并口或USB接口。bond-out
          MCU從本質(zhì)上將是商用MCU的一種擴(kuò)展,它包括所有商用MCU上的I/O并提供給用戶使用,其電氣與時(shí)序上應(yīng)保證與商用MCU對(duì)應(yīng)管腳完全一致。


          在線仿真器基本功能的實(shí)現(xiàn)
          單步(Step),全速(Run)
          仿真監(jiān)控電路將A/D總線的控制權(quán)交給bond-out MCU,bond-out
          MCU先給出指令地址,再使能SRAM讀信號(hào),得到程序代碼,依次解碼并執(zhí)行。

          斷點(diǎn)(BreakPoint)
          見(jiàn)圖2。斷點(diǎn)電路由存貯斷點(diǎn)位置的SRAM和斷點(diǎn)監(jiān)控電路組成。存貯斷點(diǎn)位置的SRAM與存貯用戶程序的SRAM的地址總線并接,SRAM的某個(gè)數(shù)據(jù)位作為斷點(diǎn)信息存貯位,在下載用戶程序的同時(shí)將設(shè)置有斷點(diǎn)的地址上該位置為1,其余為0。當(dāng)仿真器在全速運(yùn)行時(shí),該SRAM設(shè)為讀狀態(tài),斷點(diǎn)判斷電路監(jiān)控此數(shù)據(jù)位,當(dāng)其為高時(shí)停止仿真器全速運(yùn)行。

          跟蹤記錄已執(zhí)行的程序(Trace)
          見(jiàn)圖3。Trace電路由存貯Trace內(nèi)容的SRAM和Trace監(jiān)控電路組成。Trace SRAM的數(shù)據(jù)總線與bond-out
          MCU地址總線并接,Trace SRAM的地址控制信號(hào)由Trace監(jiān)控電路產(chǎn)生。在仿真器初始化時(shí)Trace
          SRAM的地址被設(shè)置為0,當(dāng)用戶要求開(kāi)始記錄已執(zhí)行的程序,在每個(gè)指令周期中,Trace SRAM的地址自加一并將bond-out
          MCU地址寫(xiě)入SRAM中。在PC要讀取Trace內(nèi)容時(shí),bond-out
          MCU依次執(zhí)行過(guò)的程序地址被上載到PC端并對(duì)應(yīng)列出該地址上的指令代碼。Trace
          的記錄長(zhǎng)度受SRAM大小限制,當(dāng)超出記錄長(zhǎng)度時(shí)前面的數(shù)據(jù)會(huì)被覆蓋。

          讀取修改Register/Memory
          使bond-out
          MCU將Register/Memory的值從數(shù)據(jù)總線上輸出,例如要讀取20H地址上的值,仿真監(jiān)控電路取得總線控制權(quán),首先執(zhí)行一條指令使20H地址上的值送入A,再將A寫(xiě)到數(shù)據(jù)總線上,仿真監(jiān)控電路就能讀到20H地址上的值。修改Register/Memory的方法,例如要改20H地址上的值,仿真監(jiān)控電路送出該值,控制bond-out
          MCU執(zhí)行讀取數(shù)據(jù)總線到A的指令,再執(zhí)行將A送人20H地址的指令。

          希望對(duì)大家用仿真器有幫助,還望各位討論和指正。



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();