SkyEye建模之方法介绍篇
SkyEye建模框架介紹
SkyEye模型與硬件開發板,圖1-1-1是一塊普通的硬件開發板,上面有一些比較常見的設備,包括復雜的CPU、USB口、網口、SD卡控制器等,以及簡單的蜂鳴器,鍵盤等設備。我們試想這樣一個問題,真實硬件顯而易見,包括所有外設的內存地址、寄存器等信息都可以通過硬件手冊得知。那么如何用軟件的形式(理論上也就是數據)把它直觀的表達成我們日常可以理解的東西呢?
SkyEye通過json文件來對真實硬件開發板進行描述,可以理解為一個json文件對應于一塊真實的硬件開發板。大體結構我們參照圖1-1-2來進行講解:
圖1-1-2 SkyEye中的json框圖
xx名稱:開發人員根據實際需要自定義,可為任意值;
每一個設備由base表示其屬于什么類型,有四種取值:mach表示該對象為一塊板子 cpu表示該對象對CPU核,device表示該對象為一個設備 linker表示該對象為連接器,也就是說SkyEye表示的硬件開發板上所有的設備包括外設,CPU,整塊開發板,連接線等均由上述四個類型之一來表示。
class的值表示該設備有哪一類來實例化。上一篇文章中講到所有獨立外設都是一個dll,SkyEye加載外設時通過動態調用dll的方式加載到SkyEye。可理解為一個class對應于一個動態dll。這里的e300_core,ram,leon2_uart,image等都是通過SkyEye建模生成的具有一定規范名稱的dll,因此class對象后面的值必須是已經通過建模實現的模型。
剩余image里面的size對象以及串口中的skyeye_uart_intf對象,前者目前暫時理解為image這一設備的一個屬性,具體用法我們后面介紹;skyeye_uart_inft先簡單理解為一根連線,串口需要通過這根連線連接到終端”uart_term_0”上。
關于這一些知識點我們之后再補充。
總的來說就是通過json文件把整塊硬件開發板以數據格式的形式表示出來,其中地址總線中有一個對象為memory_space,該對象后面的值表示地址總線上連接有多少設備,這些設備對應硬件開發板中的外設,以及設備的地址映射關系。其中圖1-1-2中uart_0后跟的0x30000000表示串口在內存中的地址,0x20表示其所占的長度。實際配置時根據自身需要來對這些值進行設置。該圖簡單連接了一塊RAM以及用于顯示輸出的虛擬串口。
接著需要對memory_space中連接的這些設備進行一個補充說明:
比如RAM占多少地址空間長度;如果是需要發送中斷的設備,比如網卡、定時器等,還需要設置其中斷號是多少。這些便是上面提到的屬性。
也就是說不同的設備有它自帶的不同屬性,需要在建模時進行設定。
例如圖1-1-3中,某時刻網卡需要發送中斷,首先通過之前提到的接口,將中斷信息發送給中斷控制器IPIC,中斷控制器接收到數據后,再將中斷處理的請求發送給CPU,最后CPU響應并處理設備發起的中斷。
接口的概念這里先簡單理解即可,總結起來就是由于每個模塊在實現時相互獨立,通過接口可以實現獨立模塊之間的相互連接并進行數據傳輸。具體怎么實現在之后的實際編寫建模過程再進行說明。
SkyEye模型與設備寄存器
開發板由CPU、外設、各種總線等一堆元器件組成。但實際我們使用時僅僅關心外設如何使用;而外設其底層也就是通過操作不同的寄存器來完成不同的功能。因此SkyEye建模說到底最關心的還是底層寄存器的如何運轉。
下圖是MPC8378官方手冊中關于GPIO的所有寄存器:
如某一時刻需要從GPIO的某一管腳讀取數據,首先需要在驅動中設置GPIO方向寄存器為輸出,然后再經過中斷等其他操作從該管腳讀取數據。設置GPIO方向為輸出,相當于往該寄存器中某一個管腳位寫“1”。寫入1的這個過程可以被SkyEye的模型所獲取,模型再根據寫入的值實現相應的邏輯。之后驅動再發起讀操作讀取數據,該過程與寫操作類似。整個過程可以參考圖1-2-2:
SkyEye建模工具介紹
SkyEye使用建模工具來創建前面提到的各種外設模型。
工作空間可以理解為建模所需的環境,例如在visual studio下編程可能會有一些我們不需要關心的文件,但實際工程編譯時需要用到這些文件。工作空間的作用類似這些文件,使得開發人員不需要考慮環境的問題,只需要關心具體的模型實現。
創建工作空間
SkyEye提供兩種方法創建工作空間,一種是在GUI界面中選擇;另外SkyEye還提供命令行進行創建,指令為workspace-create + [工作空間名稱]。圖2-1-1和圖2-1-2分別是創建工作空間的GUI表示和命令行表示。
注意:創建工作空間之后需要重啟命令行工具,使新創建的工作空間生效。
下面對工作空間中包含的一些文件和文件夾做一些說明:
更新工作空間
更新工作空間的指令為workspace-update + [目錄],還可以通過圖2-1-1中的切換工作目錄。
我們用一個實際例子說明更新工作空間的作用,假設現在有兩個工作空間,一個是MPC8378,另一個是TIC6713。且當前工作空間為MPC8378,如果在當前工作空間下運行包含TIC6713外設的二進制程序,SkyEye會提示無法找到和TIC6713外設相關的class。class我們上面提到過,每一個外設都是需要一個class來實例化。這個時候就需要通過更新工作空間的操作將工作空間替換到TIC6713所在的工作空間目錄。其作用可參考圖2-2-1:
創建設備
創建設備的命令為workspace-create-devoce + [設備名]。
創建完成后會在工作空間的module文件夾下生成三個文件,分別是:
設備名.c 設備名.h 設備名_moudle.c
.c文件中為所有需要實現的邏輯代碼。
.h中為包括寄存器的定義在內的所有變量、宏定義、結構體等內容。
_module.c為SkyEye加載該模塊的入口函數,不需要開發人員進行修改。
開發人員只需要考慮如何在.c文件中實現模型的邏輯代碼即可,在實現完成后在工作空間根目錄下執行make,代碼會自動編譯并生成動態dll文件。
總結
以上是生活随笔為你收集整理的SkyEye建模之方法介绍篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ztree 标准得json数据格式_酷站
- 下一篇: 中国自主可控的全数字实时仿真软件SkyE