有一個(gè)基本的自然法則適用于任何計(jì)算芯片,無(wú)論是處理器、微控制器還是片上系統(tǒng):軟件總是會(huì)發(fā)現(xiàn)硬件錯(cuò)誤。在我的整個(gè)職業(yè)生涯中,我參與過(guò)的項(xiàng)目中沒(méi)有一個(gè)被證明是正確的。
如果你很不幸,在你制作芯片后軟件發(fā)現(xiàn)了一個(gè)錯(cuò)誤,那么接下來(lái)會(huì)發(fā)生什么取決于問(wèn)題的嚴(yán)重程度。
如果它不是致命的,并且如果你很幸運(yùn)并且像一些知名處理器制造商那樣擁有市場(chǎng)力量,那么每個(gè)人都會(huì)圍繞這個(gè) bug 編寫(xiě)代碼,然后所有未來(lái)的版本都必須復(fù)制這個(gè) bug 以實(shí)現(xiàn)向后兼容性。這不適用于我們大多數(shù)人。更傾向于:
您可能必須刪除不起作用的功能。
功率可能太高,或性能太慢,損害您的競(jìng)爭(zhēng)力和獲得好價(jià)格的能力。
在最壞的情況下,您可能不得不花費(fèi)大量時(shí)間并旋轉(zhuǎn)另一套面具。額外的延誤和費(fèi)用。
最好的解決方案是在您投入芯片之前運(yùn)行該軟件并捕獲這些錯(cuò)誤。您將同時(shí)驗(yàn)證軟件和硬件。但是怎么做呢?
模擬軟件非常慢。我們說(shuō)的是幾年。除了瑣碎的代碼之外,根本不是一個(gè)選項(xiàng)。
相比之下,仿真被證明是解決這個(gè)問(wèn)題的關(guān)鍵工具。您可以在模擬器上實(shí)例化硬件,然后讓它在合理的時(shí)間范圍內(nèi)運(yùn)行實(shí)際代碼。也許不是真正的系統(tǒng)速度,但足夠快以使其成為可行的解決方案。
但是,假設(shè)您要找到問(wèn)題,您必須能夠追蹤這些問(wèn)題的原因,而調(diào)試部分在歷史上一直是問(wèn)題所在。事實(shí)上,許多工程師一直不愿意使用仿真,因?yàn)樵谶^(guò)去,訪問(wèn)內(nèi)部處理器狀態(tài)的唯一途徑是通過(guò) JTAG。仿真器以幾 MHz 的時(shí)鐘速度運(yùn)行;仿真器上的 JTAG 只運(yùn)行其中的一小部分。
那么,例如,如果你想單步執(zhí)行指令?這意味著通過(guò) JTAG 傳輸大約 400 萬(wàn)個(gè)低級(jí)位。在仿真器上以 1 MHz 完成,這將需要 4 秒非常昂貴的實(shí)時(shí)仿真器時(shí)間。
而且,更糟糕的是,它是侵入性的:在這 4 秒內(nèi),時(shí)鐘正在走動(dòng)。處理器狀態(tài)將保持不變,但處理器之外的世界將繼續(xù)。如果您只是在調(diào)試處理器代碼,這可以工作(即使速度很慢)。但是,如果您嘗試調(diào)試與非處理器硬件的交互,這將變得非常困難,因?yàn)樵谀瓿稍搯蝹€(gè)步驟時(shí),處理器之外的所有內(nèi)容都已更改狀態(tài)。
由于仿真器上的 JTAG 既緩慢又具有侵入性,調(diào)試——尤其是與性能和同步相關(guān)的問(wèn)題——變得非常令人沮喪。因此,考慮到這一點(diǎn),仿真在過(guò)去并不是首選解決方案——阻力仍然存在。
今天的模擬器調(diào)試速度很快
但是時(shí)代和模擬器已經(jīng)改變。Mentor 有一種單獨(dú)的方法來(lái)捕獲不依賴于 JTAG 的處理器狀態(tài),因此它可以快速發(fā)生 - 在 40-50 MHz 范圍內(nèi)。這可能比 FPGA 原型上的 JTAG 更快。數(shù)據(jù)被饋送到我們的 CoModel 主機(jī),狀態(tài)歷史可以在其中存儲(chǔ)和重新創(chuàng)建,一個(gè)周期一個(gè)周期。
鑒于已存儲(chǔ)的跟蹤,您現(xiàn)在可以針對(duì)該跟蹤重放任何有問(wèn)題的軟件,它將遵循系統(tǒng)狀態(tài),以便您可以看到哪里出了問(wèn)題。可以單步執(zhí)行;您可以探測(cè)寄存器和內(nèi)存;你可以看公交車(chē)。一切都沒(méi)有入侵:您的調(diào)試工作不會(huì)改變系統(tǒng)狀態(tài)。這一切都可以離線完成——您無(wú)需使用實(shí)時(shí)仿真器,這使其更具成本效益。
因此,關(guān)于軟件調(diào)試在模擬器上是否實(shí)用的歷史擔(dān)憂不再適用。您可以在流片前徹底使用您的計(jì)算平臺(tái)。軟件開(kāi)發(fā)人員可以在芯片可用甚至 FPGA 原型可用之前很久就開(kāi)始軟件開(kāi)發(fā)。可用于調(diào)試的工具旨在為軟件工程師所熟悉——即使您最終發(fā)現(xiàn)了硬件錯(cuò)誤。
行使部分系統(tǒng)
我們要解決的下一個(gè)挑戰(zhàn)是影響單個(gè) IP 塊的開(kāi)發(fā)人員,這些 IP 塊最終將成為整個(gè)系統(tǒng)的一部分。今天的問(wèn)題是,在完全系統(tǒng)集成之前,你真的不能用真正的軟件運(yùn)行你的塊,因?yàn)橄到y(tǒng)需要你的部分和所有其他部分才能工作。因此,即使您提前完成了塊設(shè)計(jì),也是“快點(diǎn)等待”。
在 Mentor,我們正在開(kāi)發(fā)一個(gè)測(cè)試平臺(tái)增強(qiáng)功能,它將提供計(jì)算平臺(tái)的關(guān)鍵部分。鑒于 ARM 的流行,我們將從 ARM 架構(gòu)和與 ARM 相關(guān)的總線開(kāi)始。處理器將覆蓋 Android 或 Linux。這將讓您在仿真器上實(shí)現(xiàn)您的模塊,并在完整系統(tǒng)設(shè)計(jì)可用之前將其“插入”抽象環(huán)境,讓您在驗(yàn)??證方面領(lǐng)先一步。
總之,您必須在生成掩碼之前運(yùn)行軟件,以證明您的計(jì)算硬件是正確的。仿真是做到這一點(diǎn)的唯一現(xiàn)實(shí)方法,而目前 Mentor 的 Veloce 仿真器上提供的工具使其成為非常實(shí)用、高效的練習(xí)。您可以用最少的實(shí)時(shí)仿真時(shí)間快速調(diào)試您的軟件和硬件。而且,在不久的將來(lái),您將能夠在完全系統(tǒng)集成之前在 IP 塊上運(yùn)行和調(diào)試該軟件。
您可以更早地編寫(xiě)軟件,并且可以更快地驗(yàn)證您的硬件。所有這些都使得您在真正的硅片中發(fā)現(xiàn)這些硬件錯(cuò)誤的可能性大大降低。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19343瀏覽量
230229 -
Android
+關(guān)注
關(guān)注
12文章
3938瀏覽量
127545 -
Linux
+關(guān)注
關(guān)注
87文章
11319瀏覽量
209832
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論