1. gzyueqian
      13352868059

      應(yīng)用硬件和軟件協(xié)同驗(yàn)證縮短嵌入式系統(tǒng)開發(fā)周期

      更新時(shí)間: 2005-10-27 00:00:00來源: 粵嵌教育瀏覽量:4027

        協(xié)同驗(yàn)證是一種相對(duì)較新的技術(shù),它可以使軟件開發(fā)人員盡早接觸到硬件設(shè)計(jì)部分。而在該技術(shù)出現(xiàn)以前,嵌入式系統(tǒng)開發(fā)人員常常要等到硬件樣機(jī)做出之后才能編寫軟件,再把它放在系統(tǒng)上運(yùn)行。隨著當(dāng)今項(xiàng)目開發(fā)周期的縮短和復(fù)雜程度增加,迫使開發(fā)人員必須尋找新的途經(jīng),以便盡早開始編寫和調(diào)試軟件。本文以噴墨打印機(jī)控制器為例,介紹軟硬件協(xié)同驗(yàn)證的一種實(shí)際應(yīng)用。

          協(xié)同驗(yàn)證就是在嵌入式系統(tǒng)模型上執(zhí)行目標(biāo)系統(tǒng)軟件,而該嵌入式系統(tǒng)則是在一個(gè)模擬器中運(yùn)行。軟件執(zhí)行時(shí)有一個(gè)專門的處理器模型通過普通的軟件調(diào)試器與硬件和軟件聯(lián)系,使軟件開發(fā)人員能看到二者的運(yùn)行情況。為了提高性能,協(xié)同驗(yàn)證使用了周期隱藏技術(shù),以便在硬件模擬中去除總線訪問時(shí)間。周期隱藏雖然極大地提高了模擬的性能,卻會(huì)使硬件和軟件模擬失去同步,這對(duì)于依賴硬件定時(shí)器的驗(yàn)證系統(tǒng)而言是一個(gè)嚴(yán)重的缺陷,使用實(shí)時(shí)多任務(wù)操作系統(tǒng)時(shí)這一點(diǎn)尤為明顯。事實(shí)上,許多開發(fā)人員認(rèn)為在模擬硬件中運(yùn)行實(shí)時(shí)操作系統(tǒng)(RTOS)是不可能的。

          美國(guó)In-System Design公司的開發(fā)人員使用協(xié)同驗(yàn)證技術(shù)對(duì)噴墨打印機(jī)控制器(一個(gè)系統(tǒng)級(jí)芯片)用的VxWorks操作系統(tǒng)進(jìn)行早期測(cè)試,測(cè)試使用Mentor Graphics的無縫協(xié)同驗(yàn)證環(huán)境(Seamless CVE)和其它工具驗(yàn)證硬件-軟件接口,并對(duì)RTOS在任務(wù)間的切換性能進(jìn)行了研究。 

          硬件-軟件協(xié)同驗(yàn)證

          協(xié)同驗(yàn)證技術(shù)將一個(gè)專用處理器模型和一個(gè)運(yùn)行于邏輯模擬器中的嵌入式系統(tǒng)模型結(jié)合在一起。硬件開發(fā)人員使用硬件描述語言(HDL)創(chuàng)建嵌入式系統(tǒng)模型,然后將可執(zhí)行目標(biāo)-系統(tǒng)軟件的鏡像文件加載到嵌入式系統(tǒng)模型存儲(chǔ)器中,就像在實(shí)際系統(tǒng)樣機(jī)上那樣運(yùn)行,也就是把軟件放在一個(gè)“虛擬”的在線電路模擬器上運(yùn)行,這樣就能在得到物理樣機(jī)以前對(duì)軟件進(jìn)行測(cè)試。

          協(xié)同驗(yàn)證中的嵌入式處理器模型有三個(gè)主要功能:首先當(dāng)然是在執(zhí)行指令時(shí)它必須能夠模擬出處理器的動(dòng)作,做到這一點(diǎn)常用的方法是使用指令集模擬器;其次,它應(yīng)使軟件設(shè)計(jì)人員能夠觀察和改變硬件和軟件的狀態(tài),一般是通過圖形化調(diào)試器;,它要能夠與硬件進(jìn)行交流,總線接口模型可提供這一功能??偩€接口模型將處理器總線周期活動(dòng)轉(zhuǎn)換成引腳狀態(tài)變更序列,在邏輯模擬器中模仿處理器總線的動(dòng)作,總線接口模型還要能處理硬件設(shè)計(jì)中產(chǎn)生的復(fù)位、中斷和其它異步事件(圖1)。

          協(xié)同驗(yàn)證將處理器模型和設(shè)計(jì)模型的其余部分聯(lián)系起來,使它們能夠協(xié)調(diào)運(yùn)行,工作時(shí)一般從邏輯模擬器和軟件調(diào)試器開始,在硬件和軟件之間建立起通信聯(lián)系。設(shè)計(jì)人員首先啟動(dòng)邏輯模擬,使設(shè)計(jì)運(yùn)行起來,然后載入軟件的可執(zhí)行鏡像文件(通常用軟件調(diào)試器),再在調(diào)試器上進(jìn)行硬件和軟件模擬。設(shè)計(jì)人員通過軟件調(diào)試器觀察處理器、寄存器及存儲(chǔ)器的內(nèi)容和變動(dòng)情況,邏輯模擬器和軟件調(diào)試器具有各自環(huán)境下所能提供的所有調(diào)試功能。

          帶有處理器和存儲(chǔ)器全功能模型的完整描述硬件設(shè)計(jì)雖然可以全部放在一個(gè)邏輯模擬器中運(yùn)行,并從該設(shè)計(jì)的存儲(chǔ)器中執(zhí)行代碼,但這樣做太慢了。實(shí)際的設(shè)計(jì)一般情況下每秒鐘運(yùn)行5條指令,通過簡(jiǎn)單的數(shù)學(xué)計(jì)算我們可以算出8個(gè)小時(shí)只能運(yùn)行約144,000條指令。看一看大多數(shù)系統(tǒng)所含軟件的大小就可知道,這種執(zhí)行速度做什么都顯得太慢,僅能驗(yàn)證很小一段代碼。此外,只使用邏輯模擬器也無法得到軟件內(nèi)部的調(diào)試可視性。

          增強(qiáng)模擬性能

          所有成功的協(xié)同驗(yàn)證都利用了“周期隱藏”技術(shù)來改進(jìn)性能,并且只執(zhí)行軟件中起作用的部分。周期隱藏在主機(jī)系統(tǒng)存儲(chǔ)器陣列中直接處理某些存儲(chǔ)器的通信,而不通過邏輯模擬器。結(jié)果表明大多數(shù)總線周期都可以被抑止掉,并不會(huì)影響模擬的精度。讓我們看一個(gè)取指令的例子:當(dāng)邏輯模擬器運(yùn)行取指令時(shí),需要將一個(gè)總線周期傳輸給存儲(chǔ)器控制邏輯和存儲(chǔ)器單元,存儲(chǔ)器然后把內(nèi)容回傳給處理器,后者將它們解釋成下一條指令。為執(zhí)行一個(gè)取指令操作,邏輯模擬器必須處理數(shù)以百計(jì)的模擬事件,這將消耗主機(jī)大量計(jì)算時(shí)間,然而取指令在硬件上并不會(huì)造成明顯的狀態(tài)變化,因此可從邏輯模擬器中安全地將其省略掉。

          為進(jìn)行協(xié)同驗(yàn)證,在硬件模擬外部設(shè)置一個(gè)簡(jiǎn)單數(shù)據(jù)陣列,用以保持嵌入式軟件存儲(chǔ)器鏡像文件,這樣可使指令集模擬器以更快的速度取出操作碼,同時(shí)不影響模擬結(jié)果。指令集模擬器處理操作碼并確定需要產(chǎn)生什么樣的數(shù)據(jù)移動(dòng)和總線周期,它將該信息傳送給協(xié)同驗(yàn)證工具,后者決定是在數(shù)據(jù)陣列(“軟件”區(qū))中還是在邏輯模擬內(nèi)部的模型存儲(chǔ)器(“硬件”區(qū))中進(jìn)行處理。

          如果是硬件區(qū),總線接口模型將從引腳接口驅(qū)動(dòng)一系列信號(hào)轉(zhuǎn)換至邏輯模擬器中模擬總線周期。在讀周期里,數(shù)據(jù)隨任意中斷或其它總線周期處理過程中可能形成的禁止命令返回至指令集模擬器。如果我們將代碼空間放在軟件區(qū)中,也就是說它處在一個(gè)能快速訪問指令集模擬器的存儲(chǔ)器陣列中,這時(shí)硬件模擬只需要處理三個(gè)總線周期。大多數(shù)參考數(shù)據(jù)也可以屏蔽掉,此時(shí)還可以將硬件總線周期數(shù)減少到兩個(gè)。

          那么有多大比例的總線周期可從硬件模擬中隱藏掉呢?經(jīng)驗(yàn)顯示,嵌入式軟件產(chǎn)生的總線周期99.9%以上都能從硬件中屏蔽掉。直接訪問硬件模擬外部存儲(chǔ)器陣列的總線周期比邏輯模擬快10,000倍,假設(shè)一個(gè)程序產(chǎn)生1,000個(gè)總線周期,并且I/O周期相對(duì)于取指令和數(shù)據(jù)周期之比為1:1000,那么協(xié)同驗(yàn)證要執(zhí)行999個(gè)代碼和參考數(shù)據(jù),速率為每秒鐘100,000次轉(zhuǎn)換,同時(shí)一個(gè)I/O周期每秒鐘發(fā)生5次轉(zhuǎn)換。這就要在I/O周期(硬件模擬)上加0.2秒,代碼和參考數(shù)據(jù)(軟件模擬)上加0.00999秒,總運(yùn)行時(shí)間為209.99毫秒。

          很容易看到,邏輯模擬器是一個(gè)瓶頸,因?yàn)樗加昧?5%以上的時(shí)間。指令集模擬器相對(duì)也比較慢,但協(xié)同驗(yàn)證本身的運(yùn)行速度還要慢10倍以上。和一般人設(shè)想相反,用執(zhí)行模式較快的軟件來替代指令集模擬器并不能對(duì)協(xié)同驗(yàn)證性能作實(shí)質(zhì)性的改變,即使在我們例子中將指令集模擬器性能提高1,000倍,其結(jié)果在總的工作時(shí)間上也只提高了不到5%(從209.99毫秒到200.00999毫秒)。

          我們可以得出結(jié)論,為了使協(xié)同驗(yàn)證更為有效,大多數(shù)總線周期必須從硬件中屏蔽掉。幸好嵌入式代碼使我們能做到這一點(diǎn),可將性能提高100倍。但它依賴于這樣一個(gè)事實(shí),即硬件和軟件多數(shù)時(shí)候是對(duì)事件而不是對(duì)時(shí)間同步。像實(shí)時(shí)多任務(wù)操作系統(tǒng)之類硬件和軟件時(shí)間同步非常重要,此時(shí)實(shí)際驗(yàn)證過程就需要用一些方法來處理周期隱藏所帶來的時(shí)間“偏差”。

          隱藏周期問題

          如上所述,由于所屏蔽的存儲(chǔ)器轉(zhuǎn)換類型并不影響被模擬硬件的狀態(tài),所以協(xié)同驗(yàn)證中隱藏總線周期對(duì)邏輯模擬幾乎或根本就沒有影響。但是假設(shè)設(shè)計(jì)要依靠由系統(tǒng)時(shí)鐘驅(qū)動(dòng)的硬件定時(shí)器,那么當(dāng)協(xié)同驗(yàn)證禁止大多數(shù)總線周期的硬件模擬活動(dòng)時(shí)時(shí)鐘將不再計(jì)時(shí),定時(shí)器與運(yùn)行在指令集模擬器中的軟件就會(huì)嚴(yán)重失去同步。

          協(xié)同驗(yàn)證工具至少需要做兩件事來補(bǔ)償“時(shí)間偏差”。首先,必須仔細(xì)計(jì)算失去的總線周期時(shí)間,要考慮給定指令所用到的周期數(shù),以及高速緩沖存儲(chǔ)器的時(shí)序、流水線效應(yīng)、總線獲取次數(shù)和其它因素;第二,協(xié)同驗(yàn)證工具應(yīng)能對(duì)硬件設(shè)計(jì)中的定時(shí)器寄存器進(jìn)行更新,并使邏輯模擬在任何重要事件發(fā)生時(shí)都立即做出響應(yīng),如像定時(shí)器發(fā)出的中斷等。

          模擬所需定時(shí)精度取決于要驗(yàn)證的是什么。為使運(yùn)行系統(tǒng)定時(shí)器保持狀態(tài),我們可為每個(gè)總線周期假設(shè)一個(gè)時(shí)鐘數(shù),然后簡(jiǎn)單地對(duì)總線周期計(jì)數(shù),這可使我們得到一個(gè)準(zhǔn)確度約為10%或20%的粗略估算值。但為了具體描述系統(tǒng)性能,本例中的中斷等待時(shí)間需要更為準(zhǔn)確的定時(shí)模型。我們用的是基于ARM的處理器,其模型包括用于內(nèi)部流水線的定時(shí)模型,它同時(shí)考慮了等待狀態(tài)和總線獲取次數(shù)等情況。因?yàn)槲覀兊奶幚砥鳑]有數(shù)據(jù)高速緩沖存儲(chǔ)器,所以就沒有考慮高速緩沖存儲(chǔ)器。除了計(jì)算隱藏周期時(shí)間外,我們還必需確保定時(shí)器觸發(fā)中斷時(shí),硬件沒有處在“隱藏”的總線周期內(nèi)。這里的硬件設(shè)計(jì)是一個(gè)噴墨打印機(jī)用SoC控制器,使用PCL 3輸入子集并創(chuàng)建打印用光柵影像,它由一個(gè)ARM嵌入式處理器和ASIC邏輯組成,后者完成視幀-處理邏輯、存儲(chǔ)器控制邏輯和外部接口。外部接口包括串行、并行和USB接口,以及機(jī)械部分控制器(PMC)和前面板接口(圖2)。

          首先運(yùn)行設(shè)計(jì)中的板級(jí)支持軟件包(BSP),這是一個(gè)用于第三方鏡像應(yīng)用的API(包括ASIC接口驅(qū)動(dòng)器),同時(shí)運(yùn)行風(fēng)河公司的VxWorks操作系統(tǒng)。為描述整體系統(tǒng)功能并觀察協(xié)同驗(yàn)證工具的效果,我們創(chuàng)建了幾個(gè)小任務(wù)在RTOS中運(yùn)行。

          協(xié)同驗(yàn)證的目的是調(diào)試BSP及驗(yàn)證系統(tǒng)是否能引導(dǎo)至VxWorks上。為做到這一點(diǎn),需要證明中斷控制器及其驅(qū)動(dòng)器以及串行口和定時(shí)器都工作正常,此外還要觀察協(xié)同驗(yàn)證中任務(wù)的創(chuàng)建和調(diào)度情況,并判斷運(yùn)行應(yīng)用級(jí)代碼時(shí)性能是否足夠。

          無縫CVE運(yùn)行協(xié)同驗(yàn)證無需改變系統(tǒng)軟件。能夠運(yùn)行實(shí)際的目標(biāo)-系統(tǒng)軟件是很重要的,我們做了一些更改以便在沒有作硬件設(shè)計(jì)的地方也能工作,同時(shí)還對(duì)軟件進(jìn)行修改以提高系統(tǒng)性能,為了使系統(tǒng)引導(dǎo)速度更快還將幾個(gè)存儲(chǔ)器測(cè)試縮短或省掉。將VxWorks標(biāo)志打印至通用異步收發(fā)器(UART)要用一小段代碼,會(huì)占幾分鐘模擬時(shí)間,因此運(yùn)行一次后也將其省掉;同時(shí)還修改UART驅(qū)動(dòng)器,使其輸出一個(gè)可從總線上探測(cè)到的地址,并略去檢查所有可能波特率的UART測(cè)試;我們引用在大量存貯區(qū)域填零的C運(yùn)行-時(shí)間庫(kù),不使用調(diào)試宏初始化這些存儲(chǔ)器。

          運(yùn)行協(xié)同驗(yàn)證時(shí)硬件設(shè)計(jì)也需要作一些修改。我們用ARM提供的協(xié)同驗(yàn)證模型替代處理器,這只需要增加一個(gè)新的VHDL結(jié)構(gòu)和改變雙線配置即可。另外還需要用協(xié)同驗(yàn)證模型代替幾個(gè)存儲(chǔ)器,該模型在邏輯模擬中不使用會(huì)降低速度的總線周期即能使軟件調(diào)試器訪問硬件存儲(chǔ)器,并使協(xié)同驗(yàn)證工具從硬件和軟件的角度對(duì)存儲(chǔ)器得出的結(jié)論都一致。該方法非常直觀,不到的時(shí)間就能完成。

          硬件定時(shí)器可以與軟件同步,只要在定時(shí)器HDL描述中增加幾個(gè)函數(shù)調(diào)用,即可用軟件同步時(shí)間更新定時(shí)器狀態(tài)。我們改動(dòng)了約40行HDL源代碼并在幾小時(shí)內(nèi)完成了任務(wù)。

          ,在硬件中還要增加一個(gè)總線監(jiān)視器,用來監(jiān)視地址0x31000000處的寫入周期,也即在UART修改過的地址,從RTOS來的調(diào)試輸出就寫在這里。該項(xiàng)工作用ModelSim邏輯模擬器TCL/TK擴(kuò)展語言編寫,總線監(jiān)視器在Sun工作站上打開一個(gè)窗口,使我們看到RTOS執(zhí)行時(shí)的輸出數(shù)據(jù)。 

          硬件-軟件同步

          在得到正確模擬結(jié)果之前,先要解決幾個(gè)時(shí)間同步問題。顯然,硬件定時(shí)器需要不斷更新,同時(shí)也要在所謂的“原子交換”期間保持同步,“原子交換”是一種相對(duì)于硬件和軟件而言非常小但必須執(zhí)行的存儲(chǔ)器交換。設(shè)計(jì)中有幾個(gè)直接存儲(chǔ)器存取(DMA)通道傳送數(shù)據(jù)進(jìn)出系統(tǒng),我們要確保硬件有足夠的時(shí)間(或者模擬時(shí)鐘周期)完成所有DMA傳輸。,性能分析需要時(shí)間同步,而我們也對(duì)測(cè)量系統(tǒng)中斷等待時(shí)間很感興趣。

          設(shè)計(jì)中包含三個(gè)定時(shí)器,用于追蹤硬件時(shí)間和產(chǎn)生操作系統(tǒng)計(jì)時(shí)周期(16毫秒)。假設(shè)典型的隱藏與不隱藏周期之比為1000比1,則軟件在操作系統(tǒng)計(jì)時(shí)到達(dá)之前將經(jīng)過約16秒鐘,我們希望將硬件操作系統(tǒng)計(jì)時(shí)減少為16微秒并且一切正常。當(dāng)然如果某個(gè)任務(wù)所需要的硬件運(yùn)行時(shí)間大于16微秒,系統(tǒng)就會(huì)失效,而這也是經(jīng)常會(huì)發(fā)生的。將操作系統(tǒng)計(jì)時(shí)定為16微秒迫使任務(wù)調(diào)度算法采用“運(yùn)行-完成”方式。由于我們?cè)S多任務(wù)只是簡(jiǎn)單地一直運(yùn)行下去,并且為了正確地驗(yàn)證系統(tǒng)任務(wù)也需要運(yùn)行一段時(shí)間,所以這里不支持“運(yùn)行-完成”模型,我們的任務(wù)轉(zhuǎn)換模型為優(yōu)先級(jí)搶先方式,同樣優(yōu)先級(jí)的任務(wù)采用輪流方式。

          系統(tǒng)復(fù)位時(shí),裝有系統(tǒng)引導(dǎo)復(fù)位代碼的ROM位于地址0x0處,但是VxWorks和嵌入式ARM處理器異常表運(yùn)行也要用到這個(gè)地址的RAM,因此作為引導(dǎo)過程的一部分,我們將ROM從0x0移至0x800000,而將RAM從0x800000移至0x0,交換完成之后我們?cè)賵?zhí)行ROM中的代碼。為了正確交換存儲(chǔ)器而不影響軟件,硬件和軟件必須處于不完全同步狀態(tài),且協(xié)同驗(yàn)證工具必須能夠在模擬期間重新配置存儲(chǔ)器區(qū)域。

          性能驗(yàn)證

          軟件通過將指針和計(jì)數(shù)器值寫入DMA控制器的寄存器中建立DMA傳輸,它假定由硬件完成操作過程。為執(zhí)行操作,硬件要運(yùn)行一定數(shù)目的總線周期,但如果協(xié)同驗(yàn)證屏蔽了大量周期,DMA操作就可能無法完成。有鑒于此,協(xié)同驗(yàn)證工具必須能夠在DMA傳輸期間停止周期隱藏。我們可以在軟件中設(shè)置中斷點(diǎn)以便在DMA開始時(shí)停止周期隱藏;在硬件中則設(shè)置監(jiān)視DMA完成的斷點(diǎn),到時(shí)候使周期隱藏重新作用。這樣DMA就不需要手工干預(yù)就能正確運(yùn)行了。

          我們的設(shè)計(jì)按協(xié)同驗(yàn)證進(jìn)行配置,并在Sun Ultra Sparc 60工作站上作了一系列測(cè)試,該工作站裝有2個(gè)360MHz處理器、2G RAM和Solaris 2.6操作系統(tǒng)。所有軟件工具均來自Mentor Graphics公司:硬件模擬器為ModelSim Version 5.4、軟件指令組模擬器/調(diào)試器為XRAY Version 4.4、協(xié)同驗(yàn)證工具為Seamless CVE Version 4.0。軟件用C、C++和ARM匯編語言編寫,使用VHDL和Verilog兩種版本的寄存器-轉(zhuǎn)移級(jí)設(shè)計(jì)模型。時(shí)鐘節(jié)拍

          從復(fù)位到創(chuàng)建個(gè)VxWorks任務(wù)耗時(shí)約18分鐘,其中硬件初始化和自診斷占用了大部分時(shí)間。這時(shí)邏輯模擬器定時(shí)為1.6毫秒,系統(tǒng)的操作系統(tǒng)計(jì)時(shí)每16毫秒觸發(fā)一次。我們估計(jì)采用硬件時(shí)鐘連續(xù)運(yùn)行模擬(即不直接進(jìn)行定時(shí)器更新)而達(dá)到個(gè)操作系統(tǒng)計(jì)時(shí)點(diǎn)大約需要150分鐘(兩個(gè)半小時(shí)),而達(dá)到第二個(gè)操作系統(tǒng)計(jì)時(shí)點(diǎn)差不多要3個(gè)小時(shí)。如果能直接更新定時(shí)器對(duì)隱藏的總線周期計(jì)數(shù),我們就可抽出空的RTOS循環(huán)而不用在速度很慢的邏輯模擬器上慢慢爬行了。改造完成后操作系統(tǒng)計(jì)時(shí)的觸發(fā)速率可達(dá)每分鐘4次。

          我們創(chuàng)建并運(yùn)行兩個(gè)任務(wù),以便在RTOS于任務(wù)間切換時(shí)測(cè)量它的性能。任務(wù)很簡(jiǎn)單,就是寫一個(gè)字符給UART,然后在工作站的窗口上將這個(gè)字符顯示出來,當(dāng)字符送至UART時(shí),任務(wù)就停止計(jì)時(shí)。通過監(jiān)視字符的顯示情況,可測(cè)出系統(tǒng)在任務(wù)間切換時(shí)的性能。我們的結(jié)論是每秒鐘可以有16次切換。

          在另一個(gè)實(shí)驗(yàn)中,我們將操作系統(tǒng)時(shí)段定為10個(gè)計(jì)時(shí)周期,總時(shí)間為160毫秒,然后讓RTOS在兩個(gè)簡(jiǎn)單任務(wù)間切換,每個(gè)任務(wù)在一個(gè)時(shí)段內(nèi)進(jìn)行一個(gè)220,000次的簡(jiǎn)單循環(huán)。將代碼分解開后,我們看到任務(wù)內(nèi)部的循環(huán)含有11條指令,而總數(shù)約為2,200萬條指令,模擬結(jié)果發(fā)現(xiàn)每170秒鐘可完成一個(gè)時(shí)段。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 婷婷丁香中文在线综合一区 | 制服丝袜亚洲中文欧美在线 | 亚洲视频在线观看一区 | 在线中文字幕亚洲日韩首页 | 日韩中文字幕精品在线 | 伊人成伊人成综合网222 |