李長波
(蕪湖職業(yè)技術學院,安徽 蕪湖 241000)
在企業(yè)的研發(fā)中,經(jīng)常遇到硬件軟件化和軟件硬件化的問題。本文論述的是一個硬件軟件化的問題,用軟件仿真硬件,使用戶在軟件仿真的環(huán)境中完成需要硬件才可以完成的工作。對于各種專用SoC,硬件軟件化的平臺搭建有較高的技術含量。
圖1為SoC芯片的構成框圖[1],由圖1可以看出,該芯片有十大模塊構成,分別是主控MCU、電源、觸摸屏、雙時鐘、UART、SPI、LCD 控制器、FLASH 驅動、I/O口和存儲器。專用SoC是針對某一類特定需求而設計。圖1所示的IC是為了詞典機設計的框架,每一個應用模塊都有對應的用途。主控SoC調度所有的模塊,而且其中還包含累加器、RAM、各種寄存器等資源。存儲器是線性存儲器,要求容量大,存放數(shù)量龐大的詞典數(shù)據(jù)。雙時鐘模塊要實現(xiàn)高速運算和計時功能,開機時高速運算,關機時保留低速時鐘計時;I/O口模塊可以外加各種DSP,如語音,也可以設計按鍵。FLASH驅動用來存放可以被用戶修改的數(shù)據(jù)。LCD控制器外接COG類的LCD 作為顯示設備[2]。

圖1 SoC的基本構成
SoC內(nèi)部有4個部分要建立模型:累加器、RAM、FLASH、各類寄存器。根據(jù)所仿真的SoC的類型,抽象出它的數(shù)據(jù)模型,如SoC的位數(shù)等。圖2是SoC的基本框圖,從圖2中可以看出,要建立的仿真模型有累加器ACC、寄存器、RAM。寄存器包括SoC各種功能寄存器,如狀態(tài)寄存器、堆棧寄存器、通用寄存器、特殊寄存器等,并且要清楚每個寄存器每個位的功能。RAM也包含較多的內(nèi)涵,如全局變量、局部變量、堆棧區(qū)以及特殊變量等的仿真,都需要嚴密的算法,來保證結果的正確。

圖2 處理單元的基本構成
其它模塊包括:觸摸屏、雙時鐘、UART、SPI、LCD控制器、FLASH驅動、I/O口和存儲器模塊。對于每一個外設,系統(tǒng)都為它定義好數(shù)學模型的同時,開一個或多個線程完成對其功能的仿真。圖3為觸摸屏的仿真流程圖,圖4為FLASH的仿真流程圖。從圖3中可以看出,觸摸屏要處理單擊、雙擊和拖動三個事件;FLASH要處理扇區(qū)讀寫問題,而且在寫的時候,要完成先擦出后寫入的功能。其它模塊與此類似,不重復敘述。

圖3 觸摸屏仿真流程圖

圖4 FLASH讀寫流程圖
指令仿真是系統(tǒng)非常關鍵的部分,每一條指令按照它對應的時序、操作的寄存器、影響的狀態(tài)位、影響的堆棧等都要準確仿真(圖5)。而且對于指令仿真,不僅要建立單個指令的數(shù)據(jù)模型,還要建立整個數(shù)據(jù)指令集合的處理系統(tǒng)。

圖5 MCS-51的取指時序
時序對單個指令非常關鍵,下面以總線數(shù)據(jù)寫為例加以說明。從圖5可以看出,每一個時間點要非常準確,系統(tǒng)在進行指令仿真時,必須按時鐘準確計算。所以,仿真只能是高速IC仿真低速IC。
圖6是SoC主控芯片左移指令的流程圖,從圖6中可以看出,指令操作就是數(shù)據(jù)結構的操作,所以,數(shù)據(jù)結構的定義非常關鍵。當前芯片的架構主要是ARM和MIPS,而指令集基本使用RISC(Reduced Instruction Set Computing)指令集,所以仿真相對規(guī)范。

圖6 左移指令流程圖
把SoC主芯片的指令全部用程序解釋出來之后,這些子模塊需要進行管理。本系統(tǒng)建立了一個指針隊列加以管理。每個元素的信息如圖7所示,其顯示了指令集的管理結構。其中指令是一個指針,指向對應的指令子模塊,優(yōu)先級依據(jù)RISC指令集提供信息確定,脈沖數(shù)是該指令占用多少個脈沖,時間是該指令執(zhí)行完所消耗的總時間。

圖7 指令集管理結構
系統(tǒng)使用VC開發(fā)平臺設計完成,在開發(fā)的過程中,大量使用宏定義,有較好的可移植性。
系統(tǒng)劃分的模塊[4]如圖8所示,共分為5大模塊,分別是處理器模塊、存儲器模塊、指令模塊、外設模塊和人機接口模塊。處理器模塊完成處理器的數(shù)據(jù)定義、參數(shù)設置、程序運行等功能;存儲器模塊完成處理器的數(shù)據(jù)定義、參數(shù)設置、讀寫運算等功能;指令模塊完成指令的仿真、指令集合的管理、指令的調用機制等功能;外設模塊完成外設的數(shù)據(jù)定義、參數(shù)設置、功能仿真等功能;人機接口模塊處理系統(tǒng)與用戶的接口。

圖8 總體模塊的劃分
總體設計把系統(tǒng)分成五部分大的模塊,這些模塊還要繼續(xù)分割成小的模塊。模塊越小,任務越清晰,這是軟件設計的基本步驟。這里只以處理器模塊來加以說明,其它的模塊省略。從圖9中可以看出,處理器模塊又劃分出四個小模塊,分別是現(xiàn)場模塊、指令模塊、時序模塊和計算模塊。現(xiàn)場模塊完成SoC主芯片的累加器、寄存器、RAM等功能;指令模塊完成指令的仿真設計和管理;時序模塊完成SoC晶振的仿真和計算功能;計算模塊完成上述三個模塊的集成及綜合處理的功能。這些小模塊還可以繼續(xù)劃分,直到分成可以直接寫子函數(shù)為止,并且完成流程圖。

圖9 處理器模塊的劃分
根據(jù)詳細設計的流程圖,程序員可以完成代碼的轉化。流程圖代碼化屬于正向工程范疇,先將流程圖轉化成流程樹,樹有根節(jié)點和子節(jié)點,根節(jié)點表示整個流程,子節(jié)點可以是控制節(jié)點或代碼節(jié)點。控制節(jié)點可以實現(xiàn)順序、分支、循環(huán)等控制;代碼節(jié)點實現(xiàn)函數(shù)調用、表達式或代碼段,然后再對流程樹進行深度優(yōu)先的遍歷,輸出每個流程節(jié)點所表示的代碼,最終得到源文件[5-6]。
程序測試是指對一個完成了全部或部分功能、模塊的計算機程序在正式使用前的檢測,以確保該程序能按預定的方式正確地運行。測試可以分成白盒測試、黑盒測試和灰盒測試。系統(tǒng)完成之后,通過測試才可以交付使用。本系統(tǒng)使用灰盒測試法,主要由程序設計人員自己完成邏輯覆蓋測試和功能覆蓋測試。
本系統(tǒng)完成專用SoC在PC機上的軟仿真,完成了SoC的軟化功能。本系統(tǒng)的應用在兩個方面:一是產(chǎn)品開發(fā),二是宣傳品制作。開發(fā)一款電子產(chǎn)品,若軟件工作量大,則軟開發(fā)平臺非常重要。因為軟件要多人完成,軟開發(fā)平臺有高效率和低成本的特點,現(xiàn)在很多此類廠商都使用軟件開發(fā)平臺。另外,當前互聯(lián)網(wǎng)的影響非常大,如果能把你的產(chǎn)品做成演示版放在互聯(lián)網(wǎng)上宣傳,效果非常好,仿真軟件在這個方面起到很大作用。
[1]張志良.單片機原理與控制技術[M].2版.北京:機械工業(yè)出版社,2007.
[2]袁志勇.嵌入式系統(tǒng)原理與應用技術[M].北京:北京航空航天大學出版社,2009.
[3]徐士良.計算機軟件技術基礎[M].3版.北京:清華大學出版社,2010.
[4]奈霍夫.數(shù)據(jù)結構與算法分析[M].2版.北京:清華大學出版社,2006.
[5] Donald Hearn,Pauline Baker.Computer Graphics C Version[M].北京:清華大學出版社,1998.
[6]黃維通,姚瑞霞.Visual C++程序設計教程[M].北京:機械工業(yè)出版社,2001.