記得我剛上研究生的時候,在閱讀外文資料時總是分不清楚「simulation」和「emulation」的區別。於是我就去問導師,導師解釋的也很簡單:「simulation就是模擬,emulation就是**嘛!」其實很多人一開始研究模擬器時也會遇到同樣的問題,面對文獻中大量的「simulation」和「emulation」不知所措,結果就越看越糊塗。當時上網又不方便,不像現在「google」一下就搞定了,自己對這個問題的理解基本上是無師自通的,所幸的是理解並沒有錯,後來**落到某位專家的手中也沒有對這個問題對我提出異議。
做模擬器首先就要搞清楚「simulation」、「emulation」、模擬和**這四者的區別和關係,下面我談談我個人的理解。
simulation,是指用軟體去模擬某個系統的功能,並不要求實現該系統的內部細節,只要在同樣的輸入下,軟體的輸出和所模擬系統的輸出一致就可以了。比如你在pc機上用乙個軟體去simulate紅白機的遊戲「超級瑪莉」,你只要讓你的軟體執行出來的效果和紅白機上「超級瑪莉」遊戲一樣就可以,至於這個軟體你是怎麼實現則無關緊要。
emulation,是指用軟體去模擬出某個系統中各個部件的組成,真實地模擬出系統的執行機制。這就要求軟體的作者需要非常了解所模擬系統的內部結構,能夠利用各種資料結構實現出各個部件的模型。同樣去emulate紅白機的遊戲「超級瑪莉」,首先就要用軟體模擬出紅白機中的各種硬體,如cpu、記憶體、圖形處理晶元、聲音處理晶元以及遊戲手柄等,再通過將載入遊戲的rom來執行該遊戲。現在各種遊戲模擬器,如mame、virtualnes都是採用emulation的手段去實現遊戲的模擬,所以它們又叫做emulator。
模擬就是指用在某個平台上用純軟體的方法去模擬另乙個平台上程式的執行,模擬包含「simulation」和「emulation」,通過上面對這兩者的分析大家可以知道,「simulation」是一種高層次上的模擬,類似於「黑盒」,而「emulation」更注重於對底層的模擬,類似於「白盒」。
**的解釋就比較多了,有的說**是指用機器底層的微指令來解釋執行另乙個平台的指令,有的說**是軟體結合硬體來模擬另一種平台程式的執行,即「硬體**+軟體模擬」。其實這兩者是針對不同**物件和宿主平台而言的:前者具體的是講系統**,是以大型機cpu(現在也可以指pc機)為**物件的,通常在研製cpu的過程中,用宿主機的cpu去**其軟體的執行,這樣可以使硬體和軟體的研發過程同步,加快整體系統的研發進度;後者一般指嵌入式**,做過嵌入式開發的朋友都知道,開發過程中經常要用**器去除錯程式,我們可以在pc機上除錯嵌入式系統中的某個程式,通過**器向嵌入式微控制器傳送除錯訊號(如jtag),使微控制器執行某條指令,而pc機上會相應地顯示出該條指令執行的結果,看上去似乎是pc在「執行」這條指令一樣,這樣來達到**的目的。但不管怎樣,**總是與硬體相關的,這一點與模擬是有區別的。
現在還出現了「虛擬機器」一詞,在我看來,虛擬機器更多地採用了模擬技術,而不是**,但是虛擬機器相對於乙個模擬器而言要複雜很多,像bochs這樣的虛擬機器實質上應該是乙個emulator,而像virtualpc、vmware和virtualbox這樣的虛擬機器,則採用了更為複雜的技術,既有simulation,也有emulation,甚至還有系統**,所以不能單純地將它認為是乙個模擬器。
驗證中的硬體模擬(Emulation)
模擬是一種將設計轉化為能夠在專用硬體上執行的實現的技術。這個實現與最終的實現沒有任何對應關係,它是針對特定的技術庫。相反,模擬器具有許多能夠承擔的功能 例如fpga 可程式設計互連 儘管一些早期模擬器使用固定互連 的模組和試圖在可程式設計元件之間分割電路的軟體工具鏈,配置互連並提供乙個執行時環境,使...
和 區別和聯絡, 和 區別和聯絡
和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...
rpx和樣式和class和flex
5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...