片上系統(tǒng)(SoC)開發(fā)不再僅僅是簡單的硅芯片開發(fā)過程?,F(xiàn)代設(shè)備大量使用了各種軟件,包括軟件棧、中間件、啟動(dòng)代碼和驅(qū)動(dòng)程序。你大可悠然自若地等到硅芯片開發(fā)完成后,再將其放在電路板上開始進(jìn)行軟件的開發(fā)。然而在激烈的市場競爭中,時(shí)間就是生命。開發(fā)進(jìn)度日益緊迫,若能在硅芯片制作完成前便著手進(jìn)行軟件開發(fā),將成為一個(gè)巨大的競爭優(yōu)勢。要做到這一點(diǎn),需要滿足以下三個(gè)要求:首先,需要一套可供寄存器傳輸級(jí)(RTL)設(shè)計(jì)高速運(yùn)行、且在硅芯片或開發(fā)板準(zhǔn)備就緒前就能在上面正常運(yùn)行軟件的仿真系統(tǒng);此外,還需要一個(gè)高速、基于事務(wù)的協(xié)同建模通道將仿真器與基于工作站的軟件調(diào)試工具進(jìn)行連接;最后,還需要提供符合軟件開發(fā)者需求的軟件調(diào)試環(huán)境。
為一種硬件還沒有成型的產(chǎn)品開發(fā)軟件時(shí),首先需要一個(gè)能運(yùn)行代碼的環(huán)境。通常有兩種選擇:物理環(huán)境或虛擬環(huán)境。大多數(shù)項(xiàng)目都是基于某個(gè)現(xiàn)有設(shè)計(jì),即在原有版本中添加某些功能,使原有版本功能更強(qiáng)、速度更快、性能更好。這種情況下,有可能從接手項(xiàng)目的原有設(shè)計(jì)版本中直接獲取現(xiàn)成的電路板,或者能取得該電路板的軟件環(huán)境以進(jìn)行軟件開發(fā),用自己的調(diào)試環(huán)境來對(duì)其進(jìn)行驗(yàn)證。到目前為止,最簡單的做法就是在現(xiàn)成的電路板上運(yùn)行。如果是開發(fā)一個(gè)全新的軟件,你可以使用一塊開發(fā)板,運(yùn)氣好的話,或許還能找到類似的開發(fā)板。還有一種可行的方法,即在一個(gè)虛擬電路板上運(yùn)行,如虛擬機(jī)(QEMU)。QEMU是一個(gè)開源系統(tǒng)仿真器,可隨意模擬各種ARM板。ARM公司也提供一個(gè)虛擬平臺(tái),稱作“基礎(chǔ)模型”(可在其網(wǎng)站上免費(fèi)獲得),類似于QEMU,可運(yùn)行ARM代碼。二者都有引入調(diào)試器的工具。
圖1:Mentor公司驗(yàn)證平臺(tái)將先進(jìn)的仿真器解決方案、硬件加速器平臺(tái)以及強(qiáng)大的調(diào)試環(huán)境整合在一個(gè)全球共享的高性能數(shù)據(jù)處理中心資源里。
有了可運(yùn)行和調(diào)試代碼的環(huán)境,就可以開始編程了。某些情況下,你將需要訪問一些還未成型的全新外圍設(shè)備,應(yīng)對(duì)此問題的一個(gè)解決方案是創(chuàng)建一個(gè)模型。我們先從一個(gè)非常簡單的例子入手:讀取這個(gè)新外圍設(shè)備的ID寄存器。許多外圍設(shè)備都有ID寄存器,這是一個(gè)只讀寄存器,讀取時(shí)返回固定的已知數(shù)值。這就好像讓驅(qū)動(dòng)程序多了些許自信,讓其意識(shí)到設(shè)備在與正確的外圍設(shè)備通信。很早以前,在驅(qū)動(dòng)程序初始化時(shí),讀取寄存器并將其與預(yù)期進(jìn)行比較就是一件較為敏感的事情。以下是一個(gè)ARM pl011串口驅(qū)動(dòng)程序的例子:
圖2:校驗(yàn)一個(gè)新外圍設(shè)備的ID寄存器
驅(qū)動(dòng)程序代碼使用宏readl和writel對(duì)寄存器進(jìn)行讀寫。這些在linux內(nèi)核中定義的驅(qū)動(dòng)程序被作為一種訪問硬件的方式。但假如啟動(dòng)了一個(gè)新的驅(qū)動(dòng)程序,你就可以在本地進(jìn)行重新定義,以得到所需的響應(yīng)。例如:
你無需訪問實(shí)際硬件,便能開始進(jìn)行軟件開發(fā)。當(dāng)然,你也可以采取極端的做法,使用這種方法來建模一個(gè)完整的外圍設(shè)備,但無論如何請(qǐng)不要嘗試最簡單的外圍設(shè)備,因?yàn)槟菢雍苋菀桩a(chǎn)生故障。一旦出現(xiàn)握手失敗而采樣仍然在進(jìn)行,系統(tǒng)可能會(huì)丟失某些返回值。
假如處于虛擬環(huán)境,如QEMU或ARM快速模型(AFM)——基礎(chǔ)模型的付費(fèi)版本,你可以引進(jìn)更加復(fù)雜的模型。AFM連接了System-C,相比于存根代碼(stub-code),這是一種更適宜于建模硬件行為的環(huán)境。QEMU也可以擴(kuò)展模型,但經(jīng)驗(yàn)不是憑空而來的,需要經(jīng)過多次實(shí)踐。與許多開源項(xiàng)目一樣,代碼即是文檔。若使用了QEMU,但又不想在一團(tuán)糟的C代碼中苦苦掙扎并嘗試?yán)沓鲱^緒,那么一旦你需要超越存根代碼,你可能想要跳過這個(gè)階段。
很多情況下,無法使用存根代碼進(jìn)行驗(yàn)證,甚至連你為軟件運(yùn)行所創(chuàng)建的更復(fù)雜的System-C模型也無能為力。例如,你無從得知硬件團(tuán)隊(duì)和軟件團(tuán)隊(duì)在設(shè)備中使用的是否為同一個(gè)寄存器映射。通過一個(gè)不會(huì)做出任何意料之外的反應(yīng)的寄存器,你根本無從驗(yàn)證其設(shè)置是否正確。如果你同時(shí)編寫驅(qū)動(dòng)程序和相應(yīng)的外圍設(shè)備模型,那么也只能證明你對(duì)二者的理解是相吻合的。
虛擬樣機(jī)系統(tǒng),如Mentor Graphics的Vista,可用于創(chuàng)建你所需的更復(fù)雜化的模型。一般情況下,這些模型的處理速度非???,軟件運(yùn)行也很順暢。如果硬件團(tuán)隊(duì)創(chuàng)建了虛擬樣機(jī)模型,那么在該模型上運(yùn)行軟件時(shí),便能驗(yàn)證軟硬件團(tuán)隊(duì)的設(shè)計(jì)觀點(diǎn)是否相符。通常情況下,二者的設(shè)計(jì)觀點(diǎn)是存在差異的。若能盡早發(fā)現(xiàn)這些差異,則在設(shè)計(jì)周期的后期可避免不少麻煩,讓你不至于抓狂。在一個(gè)軟硬件都很容易調(diào)試的工具中,要實(shí)現(xiàn)這一點(diǎn)其實(shí)并不難。
虛擬樣機(jī)有一個(gè)你所開發(fā)的軟件外圍設(shè)備的完整功能模型。你將能以創(chuàng)建終極目標(biāo)系統(tǒng)同樣的方式來創(chuàng)建自己的軟件,還能訪問外設(shè)的寄存器,就像在真實(shí)的硬件上運(yùn)行一樣。此外,通過虛擬樣機(jī)可以直接查看這些外設(shè)寄存器,在無任何干擾的情況下,調(diào)試過程變得更容易。你將能充分地編寫驅(qū)動(dòng)程序并驗(yàn)證其運(yùn)行是否正常。你甚至還可以粗略計(jì)算出總共所需要的時(shí)間。然而,精確的驗(yàn)證時(shí)間的計(jì)算,還需等到與硬件更匹配的軟件問世。
需要記住的是,虛擬樣機(jī)并不是真正的硬件,而只是一個(gè)模型。模型(以程序的形式)需要由設(shè)計(jì)師來編寫,但設(shè)計(jì)師所編寫的程序偶爾會(huì)出現(xiàn)錯(cuò)誤。還需要注意的是,硬件在一個(gè)很抽象的層面上建模,這可以引發(fā)實(shí)際硬件的微妙、卻又至關(guān)重要的差異。因此,即使驅(qū)動(dòng)程序完全驗(yàn)證了虛擬樣機(jī),你的工作仍然沒有結(jié)束,還需要在更詳細(xì)的硬件環(huán)境中進(jìn)行驗(yàn)證。
硬件團(tuán)隊(duì)已經(jīng)創(chuàng)建了可執(zhí)行的硬件模型,作為正常開發(fā)周期的一部分。他們?cè)诩拇嫫鱾鬏敿?jí)(RTL)使用一種硬件描述語言(HDL)來描述自己的設(shè)計(jì)。最終,通過一系列運(yùn)行編譯器和分析器來運(yùn)行該設(shè)計(jì)的HDL描述,創(chuàng)建掩模組以用于制造硅芯片。HDL可在仿真軟件上運(yùn)行,并提供待生產(chǎn)硬件的時(shí)鐘周期的準(zhǔn)確運(yùn)行狀態(tài)。唯一的問題是,大部分以HDL描述的實(shí)體設(shè)計(jì)模擬器只能以幾十或幾百赫茲的頻率運(yùn)行,無法達(dá)到兆赫,甚至連千赫都很困難,對(duì)于軟件程序員來說,這種頻率低得幾乎毫無用處。同樣的HDL可用于編寫可編程邏輯器(FPGA)或硬件加速器,如Mentor Graphics的Veloce。FPGA和硬件加速器可實(shí)現(xiàn)HDL所描述的行為,但它們的運(yùn)行速度是兆赫級(jí)的。對(duì)于軟件工程師來說,這一速度仍然不夠,但是至少是可用的。
一旦你已經(jīng)使用了存根代碼和虛擬樣機(jī)的全部功能,假如有一個(gè)是可用的,那么下一步就是在一個(gè)更加精確的硬件模型上驗(yàn)證你編寫的代碼,具體來說,就是RTL。開始這一步驟的最佳方法是將虛擬機(jī)(QEMU或AFM)與硬件的RTL模型結(jié)合起來,在軟降仿真器或硬件加速器中運(yùn)行。Mentor Graphics的產(chǎn)品Warpcore使這種方法成為可能。它將虛擬機(jī)與RTL執(zhí)行環(huán)境進(jìn)行了結(jié)合,僅在RTL被訪問時(shí)才運(yùn)行RTL仿真器。將虛擬機(jī)與仿真環(huán)境相結(jié)合,以幾百赫茲的頻率運(yùn)行,看似瘋狂,但是在不過度運(yùn)行硬件的情況下,這種做法是可行的。如果硬件只運(yùn)行一百萬個(gè)時(shí)鐘左右,執(zhí)行效果會(huì)很好。通常情況下,仿真器更易于建立、訪問和調(diào)試。一旦你需要使硬件運(yùn)行超過一百萬個(gè)時(shí)鐘周期,則需要使用硬件加速器以實(shí)現(xiàn)更優(yōu)良的性能。
運(yùn)行虛擬機(jī)和硬件加速器的組合,或一些供應(yīng)商所謂的“混合仿真(hybrid-emulation)”,可在精確硬件模型的一個(gè)時(shí)鐘周期中快捷、簡便地運(yùn)行軟件。一般這種配置的性能為100 MHz,這并不是實(shí)時(shí)的,但是其速度足以運(yùn)行和調(diào)試完整的軟件堆棧。
可對(duì)外圍設(shè)備進(jìn)行一些簡單的測試,但要對(duì)驅(qū)動(dòng)程序進(jìn)行徹底的驗(yàn)證,外圍設(shè)備只進(jìn)行“環(huán)回(loop-back)”,還遠(yuǎn)遠(yuǎn)不夠。這意味著將其與外部世界相連接,無論是通過硬件加速器上的I/O電纜,還是虛擬模型或硬件加速器相連的主機(jī)的接口。Mentor的硬件加速器系統(tǒng)中,將其稱為co-model主機(jī)。co-model主機(jī)和硬件加速器之間快速有效的連接對(duì)于維持高水平的性能是至關(guān)重要的。
圖3:重新為新驅(qū)動(dòng)程序定義讀/寫宏指令
需要注意的是,在這個(gè)配置中完整的設(shè)計(jì)不是在RTL中。這意味著系統(tǒng)將正常工作,但不會(huì)表現(xiàn)出與最終產(chǎn)品相同的性能特征。從這個(gè)配置中你能看出某些方面的性能,如某些組件之間轉(zhuǎn)換的流量。但是詳細(xì)的性能分析則需要對(duì)系統(tǒng)進(jìn)行更準(zhǔn)確的表達(dá)。
當(dāng)RTL代表整個(gè)設(shè)計(jì)時(shí),你將得到整個(gè)系統(tǒng)一個(gè)時(shí)鐘周期的準(zhǔn)確模型。這可以用來進(jìn)行詳細(xì)的時(shí)間分析并得出吞吐量、延遲以及響應(yīng)時(shí)間的具體數(shù)據(jù)。要使系統(tǒng)有效運(yùn)行,你需要將其放在一個(gè)硬件加速器或FPGA原型中。一個(gè)包括實(shí)際軟件的完整系統(tǒng),實(shí)際上是不可能基于軟件仿真進(jìn)行建模的。甚至在硬件加速器平臺(tái)上也只能運(yùn)行于一兆赫茲。這遠(yuǎn)遠(yuǎn)超過了基于軟件的仿真速度,但與實(shí)際時(shí)間相比,還是要慢得多。
在硬件加速器上運(yùn)行設(shè)計(jì)時(shí),需要在嵌入式處理器中調(diào)試軟件。一般這種調(diào)試會(huì)使用系統(tǒng)可用的硬件接口(例如JTAG接口)連接硬件調(diào)試探針來完成。但是有一個(gè)問題:盡管JTAG很適合調(diào)試功能問題,但很難用它來調(diào)試性能和時(shí)序問題。因?yàn)椤盎旌稀碧摂M機(jī)和仿真的性能更高一籌,你會(huì)想在這上面調(diào)試所有的功能問題。因此,僅存的問題就是時(shí)序和性能相關(guān)的問題了。
JTAG和類似的調(diào)試技術(shù)使處理器進(jìn)入調(diào)試模式,然后使用各種技術(shù)來從處理器和外圍寄存器中檢索數(shù)據(jù)。即使在最優(yōu)情況下,這些操作也至少需要耗費(fèi)成千上萬個(gè)時(shí)鐘—通常是數(shù)以百萬計(jì)的時(shí)鐘。而且這些調(diào)試時(shí)鐘通常只是處理器時(shí)鐘的一小部分。由于在調(diào)試時(shí)間點(diǎn)前后調(diào)試工具引入了數(shù)以百萬計(jì)的操作時(shí)鐘的延遲,因此,調(diào)試性能和時(shí)序問題變得極為困難。開發(fā)人員一般通過處理器跟蹤來回溯調(diào)試,以避免延遲。但即使收集處理器跟蹤數(shù)據(jù)也會(huì)影響到你正在觀察的系統(tǒng)的運(yùn)行。
Mentor Graphics有一款產(chǎn)品叫“Codelink”,通過它能收集在仿真中運(yùn)行設(shè)計(jì)時(shí)的回溯數(shù)據(jù),利用這些數(shù)據(jù)就能驅(qū)動(dòng)傳統(tǒng)的軟件調(diào)試。本質(zhì)上說,你可以獲得傳統(tǒng)軟件調(diào)試中的所有功能—代碼單步執(zhí)行、設(shè)立斷點(diǎn),查看內(nèi)存和變量。這樣做保留了仿真系統(tǒng)的時(shí)鐘周期的精確性,沒有任何副作用。你還具有完全的并行多核可見性和運(yùn)行與回退的能力。但許多性能問題很難在源代碼層面調(diào)試,通常還需要一幅對(duì)比硬件動(dòng)作的、在設(shè)計(jì)中運(yùn)行的處理器的動(dòng)作時(shí)間軸視圖。Codelink收集這些跟蹤數(shù)據(jù),并導(dǎo)入Mentor的系統(tǒng)分析工具,便能對(duì)照顯示性能數(shù)據(jù)和硬件數(shù)據(jù)。要在這一開發(fā)階段對(duì)整個(gè)設(shè)計(jì)進(jìn)行診斷,那么這可能是可視化性能問題和時(shí)序問題的最佳解決辦法。
FPGA原型通常會(huì)比硬件加速器運(yùn)行得更快,因而更長的軟件運(yùn)行時(shí)間是可以實(shí)現(xiàn)的,還可能會(huì)發(fā)現(xiàn)更多設(shè)計(jì)上的問題。軟件調(diào)試通常采用JTAG或者類似的技術(shù)來實(shí)現(xiàn),但都存在上述的各種問題。在硬件調(diào)試中,F(xiàn)PGA歷來都存在可視性有限的缺點(diǎn)。FPGA供應(yīng)商提供的嵌入式邏輯分析儀只能提供有限的跟蹤幅度和較淺的跟蹤深度以及頻繁的重新測量,最終導(dǎo)致漫長、且經(jīng)常是突然的(“回到原點(diǎn)”)重新編譯(綜合的和P&R)。這使得在FPGA中調(diào)試變得痛苦萬分,枯燥不已。幸運(yùn)的是, 新的技術(shù)面市了,不僅能提供成千上萬種信號(hào)的可見視圖,并具備深入跟蹤芯片及系統(tǒng)級(jí)動(dòng)作的能力,還能提供前所未有的易用性和強(qiáng)大的運(yùn)行時(shí)可配置性,通過消除大多數(shù)重新測量和回頭迭代的需求,能極大地提高調(diào)試效率。經(jīng)過改進(jìn)的調(diào)試將對(duì)使用FPGA原型的體驗(yàn)和效率產(chǎn)生積極的影響。
圖4:硬件加速器正變得不僅僅只是加速仿真。
從簡單的存根代碼開始,通過一系列依次更詳細(xì)和完整的硬件模型來推進(jìn),可以在得到實(shí)際硬件芯片之前對(duì)軟件進(jìn)行驗(yàn)證。你可以長時(shí)間保持最高性能能和最易用的調(diào)試環(huán)境,必要時(shí)使用詳細(xì)的模型驗(yàn)證系統(tǒng)的各個(gè)方面。你將需要一個(gè)通用的環(huán)境來生成、運(yùn)行和調(diào)試,以便和其他環(huán)境進(jìn)行無縫轉(zhuǎn)換。而且這也將擴(kuò)展到最終的芯片中,因?yàn)槟銜?huì)需要對(duì)實(shí)際產(chǎn)品做一個(gè)最終的測試。這意味著一旦你拿到了實(shí)體原型,需要做的就僅僅是確認(rèn)所有功能都正常運(yùn)行了。針對(duì)硬件的抽象模型和后期具有精確時(shí)鐘周期的RTL硬件模型,最難的軟硬件交互問題將在設(shè)計(jì)階段就能得以解決。一旦實(shí)體樣機(jī)就緒,就能大大減少軟件開發(fā)的時(shí)間。
-
IC設(shè)計(jì)
+關(guān)注
關(guān)注
38文章
1299瀏覽量
104176 -
芯片開發(fā)
+關(guān)注
關(guān)注
0文章
11瀏覽量
2488
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論