he successful development of embedded systems requires the continuous integration of hardware and firmware throughout all stages of the project. Transaction-level simulation aids in architecture development and refinement, but lacks the detail necessary to confirm that the memory subsystem can support the reset and boot-up process.
嵌入式系統(tǒng)的成功開發(fā)需要在項目的所有階段不斷地將硬件和固件結合起來。事務級仿真可以幫助發(fā)展和精煉體系結構,但是它不能詳細地證實內存子系統(tǒng)能夠支持重啟和啟動處理。
執(zhí)行固件能阻止寄存器傳送級硬件描述以驗證啟動成功,并且阻止適當配置的實時操作系統(tǒng)硬件適配層。所有直接連接到總線的IP(知識產權)blocks應該由在周期精確的CPU上執(zhí)行的處理器驅動測試來驗證。在tapeout(完成設計支付制造)之前,需要使用精確簽核(signoff)的處理器模型將管腳級、時序精確的總線事務與所有的主從總線相交換。當處理器驅動測試運行于第一塊硅片上時,在虛擬環(huán)境中驗證這些測試將會變得輕松。
在所有這些驗證階段中,軟件維持一種單個抽象級,而硬件描述則從事務級延伸至門級和物理實現(xiàn)級。理想的情況是,延伸此連續(xù)統(tǒng)一體的工具應該給出用于執(zhí)行硬件和固件的相容的圖形用戶界面(GUI)和調試環(huán)境。在每一抽象級,硬件/固件的協(xié)同發(fā)展都會有一些利益的權衡,但是滿足一些特定的需求會產生相似的仿真和調試環(huán)境。
把嵌入式核作為一種將讀寫總線周期加入到IP寄存器的工具對于基于HDL(硬件描述語言)的測試平臺來說是個顯著的幫助。作為功能驗證的正交方法,處理器驅動測試可以給出HDL測試平臺可能忽略的總線接口和時序誤差。這些測試易于編寫,具有很強的可移植性,在所有抽象級上工作良好,并且可以運行于硅片上。作為手工編寫測試的補充,驗證組可以采用大段的來自于固件組的代碼。引導代碼、硬件診斷和RTOS(實時操作系統(tǒng))硬件適配層或板級支持包與硬件設計的功能驗證緊密相關。
測試可移植性
嵌入式代碼是個名副其實的可移植性測試平臺。只要地址映射在整個硬件設計過程中保持一致,用C語言或匯編語言編寫的并且經過編譯后運行于處理器上的測試程序就可以使用于模塊、子系統(tǒng)、芯片和系統(tǒng)級上,也能運行于物理原型上。沒有其他測試平臺語言或測試平臺工具能夠做到這一點。
處理器驅動測試程序的可移植性背后的神秘之處在于其設計細節(jié)的獨立性。測試程序簡單地將數(shù)據讀取或寫入到特定的寄存器或內存地址上。只要此地址在處理器的線性地址空間(地址映射)位置保持不變,測試程序就不必依靠實際的傳輸機制。單個測試程序不用改變一行源代碼就可以容納大量的硬件變量:
?總線實現(xiàn):總線周期可以是具有詳細時序的管腳級的或是高級的事務。處理器模型規(guī)定了插入每個總線周期的詳細級別。
?硬件描述:硬件可以在硅片上的寄存器傳送級、門級或實現(xiàn)級事務上建模。只要在設計中硬件描述可以將讀寫操作傳遞到正確的寄存器中,測試程序就不用在乎完成交互的具體的仿真級別。
?內存:內存子系統(tǒng)可以很詳細地實現(xiàn)(flash,DDR2)或者抽象為簡單的陣列。通常,內存子系統(tǒng)不在模塊級出現(xiàn)。先進的聯(lián)合仿真工具允許使用者聲明內存參考和用于程序存儲、堆棧的內存空間。在子系統(tǒng)級,不用改變模塊級測試程序就能引入詳細的內存模型。務必要增加代碼來配置內存管理單元,但是,一旦配置了模塊,測試程序將會毫無變化地運行。
用C語言或匯編語言編寫的并且編譯至目標的測試程序能夠以極不同的速度運行,這取決于硬件平臺如何實現(xiàn)。對于門級簽核(signoff)仿真,運行速度從真實目標上的實時速度到每秒大約一個模塊。

圖片來源:Mentor圖像公司
同樣的模塊級測試可以用于整個驗證過程中。其他模塊和內存子系統(tǒng)的變化對此測試不起作用。
處理器模型
許多處理器驅動測試程序的可移植性是由具有大量抽象級別和性能的處理器模型所引起的。這些模型是測試程序和目標硬件之間的接口。對于測試這方面,所有模型具有一致的觀點,就是說,它們具有將C語言或匯編語言編譯成可執(zhí)行的形式的能力。這種能力使得相同的測試程序能夠運行于一系列的處理器模型和真實目標上。
正是硬件的內部細節(jié)和接口將這些處理器模型分成了大量的類別:
?事務級:快速,擁有總線事務接口;速度從每秒百萬條指令到每秒千萬條指令。Cache(高速緩沖存儲器)和流水線不用建模。實質上,這些是具有連接硬件的事務級接口的指令集仿真器。這種方法的強勢在于其速度快,而其弱點是需要事務級硬件描述,通常情況下若沒有付出額外努力此描述不能實現(xiàn)。
?周期精確性:具有管腳級總線接口的合理的速度?!爸芷诰_”意味著cache和流水線建立了模型。這些模型對硅片產生同樣的總線周期,伴隨著流水線預取和cache填充突發(fā)讀取的精確建模。周期可能不會隨精確的時鐘邊緣時序發(fā)生,但是時鐘邊緣的行為應該精確。速度從每秒五千個到五十萬個指令。這種方法的強勢在于它有不用設計模型和周期精確就能進行RTL(寄存器傳送級)描述的能力。但是其執(zhí)行性能要比實時速度慢上幾個數(shù)量級。
?簽退(signoff)精確:高精確性但是非常慢,這些模型通常直接來自于用于合成硅片的RTL,所以它們應該能夠精確匹配物理核。其強勢是精確性,弱勢是仿真速度只有大約每秒一個模塊。
?真實目標:就是硅片本身,它可以精確定義并且以實時執(zhí)行速度完成性能。主要的缺點是需要物理原型,并且缺乏硬件調試的可見性。此方法通常使用于設計周期的末期。
處理器驅動測試程序延伸虛擬仿真和物理原型的能力帶來了許多好處。引入第一個硅片一般是個緊張的過程,因為有許多未知因素,大家似乎都抱觀望態(tài)度。在硅片上進行測試程序的預驗證消除了主要的未知因素。因為處理器測試不用建模就能延伸虛擬域和物理域,所以設計時在tapeout(完成設計支付制造)之前引入了可以進行仿真和調試的處理器。這種方法消除了典型的由于物理原型而帶來的設計和測試誤差,并提高了相當輕松地啟動第一個硅片的信心。
同樣的,真實目標測試的覆蓋級最多也只是個猜測。然而,由于準確的測試可以仿真運行和在硅片上運行,所以虛擬測試度量如代碼覆蓋和斷言覆蓋能夠評估真實目標測試的完整性。精確的度量使人們相信物理原型已經經過了充分的證實。
物理原型具有明顯的快速性和高精確性,但是由于硬件可見性的限制,它難以進行對邏輯錯誤的調試。由于它們的可移植性,在真實目標上運行失敗的處理器驅動測試程序可以輕松地進行仿真運行,同時具有極好的調試可見性和控制性。經過實驗室里兩個星期的調試仍未被解決的問題在一個小時的仿真再運行中就被診斷和修正了。
因為處理器驅動測試程序可以應用于大范圍的驗證方法,所以需要注意避免過多的執(zhí)行和調試環(huán)境。在硬件方面,先進的仿真器將連續(xù)體從事務級 SystemC延伸到門級簽退(signoff)。它們給出一組常用的窗口用于調試這些不同的硬件描述。
為了調試處理器驅動測試自身的C或匯編代碼,需要一個源級軟件調試器。與邏輯仿真器GUI不同的是,源調試器趨向于緊密連接處理器模型。例如,用于事務級模型的源級調試器可能與用于同樣嵌入式核的周期精確模型截然不同。因為這些模型用C語言編寫,所以它們通常將調試器API合并到服務調試器用于顯示處理器狀態(tài)、寄存器信息和接受用戶發(fā)出的暫停、運行和單步執(zhí)行命令。通過連接到JTAG端口的硬件探點,源級調試器也可以和真實目標一起使用。
當用于事務的單個硬件調試環(huán)境達到門級時,尋找一個統(tǒng)一的調試處理器驅動測試自身的方案變得更為困難——這種奇怪的事情在假設測試源保持不變而調試環(huán)境變化的情況下發(fā)生。
隨著處理器驅動測試成為功能性驗證的集成組件,我們有理由希望邏輯仿真器GUI將會包括源級調試。在這種GUI中,不同的窗口顯示運行于處理器的代碼和HDL源調試代碼,這使以嵌入式代碼作為測試平臺的硬件驗證工程師更為輕松。
關于作者:
Jim Kenney(im_kenney@)是Mentor圖像公司系統(tǒng)級部門的產品市場經理。他獲得了克萊姆森(Clemson)大學的電機工程碩士(BSEE)學位。
(轉載)