李長(zhǎng)波
(蕪湖職業(yè)技術(shù)學(xué)院,安徽 蕪湖 241000)
在企業(yè)的研發(fā)中,經(jīng)常遇到硬件軟件化和軟件硬件化的問(wèn)題。本文論述的是一個(gè)硬件軟件化的問(wèn)題,用軟件仿真硬件,使用戶在軟件仿真的環(huán)境中完成需要硬件才可以完成的工作。對(duì)于各種專用SoC,硬件軟件化的平臺(tái)搭建有較高的技術(shù)含量。
圖1為SoC芯片的構(gòu)成框圖[1],由圖1可以看出,該芯片有十大模塊構(gòu)成,分別是主控MCU、電源、觸摸屏、雙時(shí)鐘、UART、SPI、LCD 控制器、FLASH 驅(qū)動(dòng)、I/O口和存儲(chǔ)器。專用SoC是針對(duì)某一類特定需求而設(shè)計(jì)。圖1所示的IC是為了詞典機(jī)設(shè)計(jì)的框架,每一個(gè)應(yīng)用模塊都有對(duì)應(yīng)的用途。主控SoC調(diào)度所有的模塊,而且其中還包含累加器、RAM、各種寄存器等資源。存儲(chǔ)器是線性存儲(chǔ)器,要求容量大,存放數(shù)量龐大的詞典數(shù)據(jù)。雙時(shí)鐘模塊要實(shí)現(xiàn)高速運(yùn)算和計(jì)時(shí)功能,開(kāi)機(jī)時(shí)高速運(yùn)算,關(guān)機(jī)時(shí)保留低速時(shí)鐘計(jì)時(shí);I/O口模塊可以外加各種DSP,如語(yǔ)音,也可以設(shè)計(jì)按鍵。FLASH驅(qū)動(dòng)用來(lái)存放可以被用戶修改的數(shù)據(jù)。LCD控制器外接COG類的LCD 作為顯示設(shè)備[2]。
圖1 SoC的基本構(gòu)成
SoC內(nèi)部有4個(gè)部分要建立模型:累加器、RAM、FLASH、各類寄存器。根據(jù)所仿真的SoC的類型,抽象出它的數(shù)據(jù)模型,如SoC的位數(shù)等。圖2是SoC的基本框圖,從圖2中可以看出,要建立的仿真模型有累加器ACC、寄存器、RAM。寄存器包括SoC各種功能寄存器,如狀態(tài)寄存器、堆棧寄存器、通用寄存器、特殊寄存器等,并且要清楚每個(gè)寄存器每個(gè)位的功能。RAM也包含較多的內(nèi)涵,如全局變量、局部變量、堆棧區(qū)以及特殊變量等的仿真,都需要嚴(yán)密的算法,來(lái)保證結(jié)果的正確。
圖2 處理單元的基本構(gòu)成
其它模塊包括:觸摸屏、雙時(shí)鐘、UART、SPI、LCD控制器、FLASH驅(qū)動(dòng)、I/O口和存儲(chǔ)器模塊。對(duì)于每一個(gè)外設(shè),系統(tǒng)都為它定義好數(shù)學(xué)模型的同時(shí),開(kāi)一個(gè)或多個(gè)線程完成對(duì)其功能的仿真。圖3為觸摸屏的仿真流程圖,圖4為FLASH的仿真流程圖。從圖3中可以看出,觸摸屏要處理單擊、雙擊和拖動(dòng)三個(gè)事件;FLASH要處理扇區(qū)讀寫(xiě)問(wèn)題,而且在寫(xiě)的時(shí)候,要完成先擦出后寫(xiě)入的功能。其它模塊與此類似,不重復(fù)敘述。
圖3 觸摸屏仿真流程圖
圖4 FLASH讀寫(xiě)流程圖
指令仿真是系統(tǒng)非常關(guān)鍵的部分,每一條指令按照它對(duì)應(yīng)的時(shí)序、操作的寄存器、影響的狀態(tài)位、影響的堆棧等都要準(zhǔn)確仿真(圖5)。而且對(duì)于指令仿真,不僅要建立單個(gè)指令的數(shù)據(jù)模型,還要建立整個(gè)數(shù)據(jù)指令集合的處理系統(tǒng)。
圖5 MCS-51的取指時(shí)序
時(shí)序?qū)蝹€(gè)指令非常關(guān)鍵,下面以總線數(shù)據(jù)寫(xiě)為例加以說(shuō)明。從圖5可以看出,每一個(gè)時(shí)間點(diǎn)要非常準(zhǔn)確,系統(tǒng)在進(jìn)行指令仿真時(shí),必須按時(shí)鐘準(zhǔn)確計(jì)算。所以,仿真只能是高速I(mǎi)C仿真低速I(mǎi)C。
圖6是SoC主控芯片左移指令的流程圖,從圖6中可以看出,指令操作就是數(shù)據(jù)結(jié)構(gòu)的操作,所以,數(shù)據(jù)結(jié)構(gòu)的定義非常關(guān)鍵。當(dāng)前芯片的架構(gòu)主要是ARM和MIPS,而指令集基本使用RISC(Reduced Instruction Set Computing)指令集,所以仿真相對(duì)規(guī)范。
圖6 左移指令流程圖
把SoC主芯片的指令全部用程序解釋出來(lái)之后,這些子模塊需要進(jìn)行管理。本系統(tǒng)建立了一個(gè)指針隊(duì)列加以管理。每個(gè)元素的信息如圖7所示,其顯示了指令集的管理結(jié)構(gòu)。其中指令是一個(gè)指針,指向?qū)?yīng)的指令子模塊,優(yōu)先級(jí)依據(jù)RISC指令集提供信息確定,脈沖數(shù)是該指令占用多少個(gè)脈沖,時(shí)間是該指令執(zhí)行完所消耗的總時(shí)間。
圖7 指令集管理結(jié)構(gòu)
系統(tǒng)使用VC開(kāi)發(fā)平臺(tái)設(shè)計(jì)完成,在開(kāi)發(fā)的過(guò)程中,大量使用宏定義,有較好的可移植性。
系統(tǒng)劃分的模塊[4]如圖8所示,共分為5大模塊,分別是處理器模塊、存儲(chǔ)器模塊、指令模塊、外設(shè)模塊和人機(jī)接口模塊。處理器模塊完成處理器的數(shù)據(jù)定義、參數(shù)設(shè)置、程序運(yùn)行等功能;存儲(chǔ)器模塊完成處理器的數(shù)據(jù)定義、參數(shù)設(shè)置、讀寫(xiě)運(yùn)算等功能;指令模塊完成指令的仿真、指令集合的管理、指令的調(diào)用機(jī)制等功能;外設(shè)模塊完成外設(shè)的數(shù)據(jù)定義、參數(shù)設(shè)置、功能仿真等功能;人機(jī)接口模塊處理系統(tǒng)與用戶的接口。
圖8 總體模塊的劃分
總體設(shè)計(jì)把系統(tǒng)分成五部分大的模塊,這些模塊還要繼續(xù)分割成小的模塊。模塊越小,任務(wù)越清晰,這是軟件設(shè)計(jì)的基本步驟。這里只以處理器模塊來(lái)加以說(shuō)明,其它的模塊省略。從圖9中可以看出,處理器模塊又劃分出四個(gè)小模塊,分別是現(xiàn)場(chǎng)模塊、指令模塊、時(shí)序模塊和計(jì)算模塊?,F(xiàn)場(chǎng)模塊完成SoC主芯片的累加器、寄存器、RAM等功能;指令模塊完成指令的仿真設(shè)計(jì)和管理;時(shí)序模塊完成SoC晶振的仿真和計(jì)算功能;計(jì)算模塊完成上述三個(gè)模塊的集成及綜合處理的功能。這些小模塊還可以繼續(xù)劃分,直到分成可以直接寫(xiě)子函數(shù)為止,并且完成流程圖。
圖9 處理器模塊的劃分
根據(jù)詳細(xì)設(shè)計(jì)的流程圖,程序員可以完成代碼的轉(zhuǎn)化。流程圖代碼化屬于正向工程范疇,先將流程圖轉(zhuǎn)化成流程樹(shù),樹(shù)有根節(jié)點(diǎn)和子節(jié)點(diǎn),根節(jié)點(diǎn)表示整個(gè)流程,子節(jié)點(diǎn)可以是控制節(jié)點(diǎn)或代碼節(jié)點(diǎn)。控制節(jié)點(diǎn)可以實(shí)現(xiàn)順序、分支、循環(huán)等控制;代碼節(jié)點(diǎn)實(shí)現(xiàn)函數(shù)調(diào)用、表達(dá)式或代碼段,然后再對(duì)流程樹(shù)進(jìn)行深度優(yōu)先的遍歷,輸出每個(gè)流程節(jié)點(diǎn)所表示的代碼,最終得到源文件[5-6]。
程序測(cè)試是指對(duì)一個(gè)完成了全部或部分功能、模塊的計(jì)算機(jī)程序在正式使用前的檢測(cè),以確保該程序能按預(yù)定的方式正確地運(yùn)行。測(cè)試可以分成白盒測(cè)試、黑盒測(cè)試和灰盒測(cè)試。系統(tǒng)完成之后,通過(guò)測(cè)試才可以交付使用。本系統(tǒng)使用灰盒測(cè)試法,主要由程序設(shè)計(jì)人員自己完成邏輯覆蓋測(cè)試和功能覆蓋測(cè)試。
本系統(tǒng)完成專用SoC在PC機(jī)上的軟仿真,完成了SoC的軟化功能。本系統(tǒng)的應(yīng)用在兩個(gè)方面:一是產(chǎn)品開(kāi)發(fā),二是宣傳品制作。開(kāi)發(fā)一款電子產(chǎn)品,若軟件工作量大,則軟開(kāi)發(fā)平臺(tái)非常重要。因?yàn)檐浖嗳送瓿?,軟開(kāi)發(fā)平臺(tái)有高效率和低成本的特點(diǎn),現(xiàn)在很多此類廠商都使用軟件開(kāi)發(fā)平臺(tái)。另外,當(dāng)前互聯(lián)網(wǎng)的影響非常大,如果能把你的產(chǎn)品做成演示版放在互聯(lián)網(wǎng)上宣傳,效果非常好,仿真軟件在這個(gè)方面起到很大作用。
[1]張志良.單片機(jī)原理與控制技術(shù)[M].2版.北京:機(jī)械工業(yè)出版社,2007.
[2]袁志勇.嵌入式系統(tǒng)原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,2009.
[3]徐士良.計(jì)算機(jī)軟件技術(shù)基礎(chǔ)[M].3版.北京:清華大學(xué)出版社,2010.
[4]奈霍夫.數(shù)據(jù)結(jié)構(gòu)與算法分析[M].2版.北京:清華大學(xué)出版社,2006.
[5] Donald Hearn,Pauline Baker.Computer Graphics C Version[M].北京:清華大學(xué)出版社,1998.
[6]黃維通,姚瑞霞.Visual C++程序設(shè)計(jì)教程[M].北京:機(jī)械工業(yè)出版社,2001.