80C196單片機仿真軟件的設計與實現
CRunCode類封裝所有的操作模塊,仿真80C196單片機中的指令執行部件,完成單步運行、一次運行和連續運行3種指令的執行方式。C196Chip類仿真整個單片機模塊,除了指令執行部件外,還包括各種外設模塊,完成中斷、串口等功能。對外提供統一的控制接口,完成單片機的初始化、啟停、訪問存儲器、訪問外設、訪問特殊功能寄存器。
CPU模塊中各個類的描述及其繼承關系。
2.3指令的仿真運行
80C196指令系統中有104種指令,按照操作碼和功能的不同,將指令劃分為13類,每個類模塊實現1類指令的功能。
CRunCode類封裝了13類指令的各個模塊,提供了統一的接口,以地址寄存器值作為輸入輸出。進入CRuncode-類的為地址寄存器值,根據此值取得指令,依指令操作碼的不同進入各個操作模塊。各個操作模塊完成指令的功能,并計算出下一條指令的地址值返回給CRunCode-類,CRunCode類再將此值寫入CPU的地址寄存器中。其執行過程如圖3所示。
對于每一條指令的仿真,包括操作過程,操作結果與程序狀態字的改變力求做到與80C196指令集相一致。以兩個操作數的加法指令ADD Al,BL為例,其實現過程如下:
2.4編譯模塊設計
編譯模塊將用戶編寫的源程序編譯成CPU能識別的二進制機器語言的形式。為了降低系統的設計難度,采用了已經具有的外部程序對源程序進行處理。編譯模塊讀取由外部程序生成的列表文件,將程序信息轉化為本系統能處理的數據結構,并將生成的二進制操作碼裝入CPU的存儲器。
2.5程序仿真與控制的實現
程序運行有3種方式,即單步運行,運行一次和連續運行。程序的主要控制功能有復位、設置/清除中斷點、查看寄存器、查看程序狀態字等。編譯模塊對源程序進行預處理,將源程序轉化為二進制操作碼。CPU模塊將操作碼裝入存儲器成功后,初始化CPU的各種信號,并將程序地址寄存器的值置Ox2080,這是80C196匯編程序的起始地址。然后CPU模塊依據地址寄存器的值取操作碼,按照取址、譯碼、執行的過程執行每一條指令。在一條指令執行完畢后,執行中斷處理,刷新顯示結果以及檢查中斷點等操作。
本仿真軟件的關鍵技術在于CPU模塊的設計。這個模塊要完成80C196所有指令的功能,要分配存儲器資源,要控制軟件仿真過程中程序狀態字、特殊功能寄存器以及其他CPU信號的變化。采用面向對象編程方法和分層設計的思路,通過對指令的合理劃分,降低了指令系統的復雜度,通過對實際器件的抽象與封裝,實現了與實際硬件器件的功能等價,使得仿真結果與真實執行情況相一致。
至此,該仿真軟件的基本功能已經實現,為仿真平臺的設計打下了基礎,接下來的工作是以仿真軟件為基礎,完成仿真平臺的開發與調試,主要包括各種外設的實現,測試用例生成工具以及驅動測試的外部激勵產生模塊,以此搭建一個具有良好人機界面的測試環境,提高應用軟件的質量與可靠性。按照軟件要求計劃采用dll文件的方式將各個模塊生成庫文件,并在仿真軟件中預留各個庫文件的接口,在程序需要時調用相應的庫文件即可,簡化了設計的難度,同時增加了仿真平臺的靈活性和通用型。
4結 語
本文提出一種采用VC++面向對象技術設計80C196單片機應用軟件仿真環境的方法。據此方法研制的仿真軟件可仿真80C196指令集的全部指令,并可對80C196單片機嵌入式控制軟件進行仿真與運行。該項技術為全軟件測試平臺的開發奠定了基礎,也可供相關領域的應用參考。













評論