<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 雙向飛碟射擊與設(shè)計(jì)調(diào)試

          雙向飛碟射擊與設(shè)計(jì)調(diào)試

          作者: 時(shí)間:2015-12-17 來源:網(wǎng)絡(luò) 收藏

            縱觀歷史,電路內(nèi)仿真 (ICE) 模式是使用硬件仿真器的第一種方式,也是迄今為止最為流行的方法。在這種模式中,需將硬件仿真器插入物理目標(biāo)系統(tǒng)上的插孔,以此代替待開發(fā)的芯片,從而利用實(shí)時(shí)數(shù)據(jù)支持運(yùn)用和調(diào)試硬件仿真器內(nèi)部映射的待測(cè)設(shè)計(jì)(DUT)。

          本文引用地址:http://www.ex-cimer.com/article/284500.htm

            然而,這種公認(rèn)的能夠引人注目的驗(yàn)證方法卻存在一系列問題,其中最嚴(yán)重的問題便是它的隨機(jī)性。也就是說,當(dāng)調(diào)試DUT時(shí),它缺少確定性或者可重復(fù)性。為了更好地理解這一點(diǎn),我們可以做個(gè)形象類比。

            讓我們來看看雙向飛碟射擊。這是一種射擊運(yùn)動(dòng),在這項(xiàng)運(yùn)動(dòng)中,會(huì)將碟靶從靶場(chǎng)上扔出以模擬鳥類的飛行狀態(tài)。我們可以增加碟靶的扭轉(zhuǎn)方向,增加它的難度。讓射手戴副眼鏡,以限制他的視野范圍,這樣射手必須“猜測(cè)”碟靶的軌跡,因?yàn)榈械拿恳淮诬壽E都不一樣。而驗(yàn)證工程師在 ICE 模式中調(diào)試芯片設(shè)計(jì)時(shí),恰恰也會(huì)遇到這樣的難題。要在 ICE 模式中找出一個(gè)錯(cuò)誤就像在狹窄的視野中試圖擊中碟靶一樣困難。


            圖 1 要在視野受限的情況下進(jìn)行雙向飛碟射擊對(duì)射手來說是一項(xiàng)巨大的挑戰(zhàn)。

            我們不斷總結(jié)過去的經(jīng)驗(yàn),持續(xù)改進(jìn)。這二十多年來,不斷有調(diào)查發(fā)現(xiàn)設(shè)計(jì)驗(yàn)證消耗的時(shí)間大約占了設(shè)計(jì)周期的 70% 左右。往好的方面看,設(shè)計(jì)驗(yàn)證是一項(xiàng)活動(dòng),它或多或少地可以根據(jù)預(yù)測(cè)事先進(jìn)行安排。但是設(shè)計(jì)調(diào)試則是一項(xiàng)追擊,您無法事先對(duì)其進(jìn)行規(guī)劃。理由很簡(jiǎn)單,錯(cuò)誤往往會(huì)因?yàn)槲粗脑虺銎洳灰獾爻霈F(xiàn),而且您也無法預(yù)測(cè)它出現(xiàn)的時(shí)間和位置。

            可以想象,在利用大量嵌入式軟件和硬件進(jìn)行片上系統(tǒng) () 設(shè)計(jì)時(shí),總有些錯(cuò)誤會(huì)隱藏在設(shè)計(jì)的某個(gè)未知角落里,無論是在硬件中還是在軟件中,而且這些錯(cuò)誤可能只有在長(zhǎng)期執(zhí)行后方能被發(fā)現(xiàn)。在一個(gè)錯(cuò)誤被發(fā)現(xiàn)之前,很有可能已歷經(jīng)了數(shù)十億的時(shí)鐘周期。

            更讓人沮喪的是,調(diào)試具有隨機(jī)性,這就要求在發(fā)現(xiàn)錯(cuò)誤之前要不斷地重復(fù)運(yùn)行。如果錯(cuò)誤不具備確定性,也就是說,其可能不會(huì)在后續(xù)運(yùn)行中重復(fù)出現(xiàn),那么尋找錯(cuò)誤的過程將會(huì)是一場(chǎng)噩夢(mèng)。

            關(guān)鍵未知因素

            如果將其應(yīng)用于數(shù)億門級(jí)的設(shè)計(jì),而這些設(shè)計(jì)需要經(jīng)過數(shù)十億個(gè)長(zhǎng)序列驗(yàn)證周期的調(diào)試,那么可能存在三個(gè)關(guān)鍵未知因素:地點(diǎn)、時(shí)間和事由。這三個(gè)因素足以延誤整個(gè)測(cè)試計(jì)劃的進(jìn)度,即便該計(jì)劃已經(jīng)過深思熟慮。在一個(gè)競(jìng)爭(zhēng)激烈的市場(chǎng)中,若一項(xiàng)新產(chǎn)品延期三個(gè)月上市,那么它將造成 33% 的潛在總收益損失。這就足以說明驗(yàn)證解決方案的價(jià)值所在了。這時(shí)我想到了硬件加速仿真。硬件仿真器憑借其極速性能加快執(zhí)行和調(diào)試的速度。事實(shí)上,它們的快速執(zhí)行速度便是它們的設(shè)計(jì)初衷。

            這個(gè)概念很簡(jiǎn)單,即對(duì)照需要插入待開發(fā)芯片的實(shí)際物理目標(biāo)系統(tǒng)來檢查 DUT。無需再編寫測(cè)試矢量或者測(cè)試激勵(lì)。趕緊在實(shí)際應(yīng)用中全面施行這一流程吧。想必,要在模糊的設(shè)計(jì)區(qū)域里尋找令人厭煩的隱匿錯(cuò)誤,實(shí)際應(yīng)用比任何軟件測(cè)試平臺(tái)都更為有效,對(duì)吧?

            在線調(diào)試問題

            結(jié)果證明,閃閃發(fā)光的并非都是金子。盡管它的功能非常誘人,但要在 ICE 模式中調(diào)試芯片設(shè)計(jì)會(huì)顯得過于繁瑣而又令人沮喪,究其原因,主要有兩點(diǎn)。第一點(diǎn),硬件仿真器必須要與目標(biāo)系統(tǒng)相連。就此而言,由于硬件仿真器的速度可能比物理目標(biāo)系統(tǒng)慢上三個(gè)數(shù)量級(jí),因此就需要有一個(gè)速度適配器,可以調(diào)解物理目標(biāo)系統(tǒng)較快的時(shí)鐘速度,使之與硬件仿真器的相對(duì)較慢的速度相匹配?;旧?,該適配器是一個(gè)先進(jìn)先出 (FIFO) 的寄存器,它通常會(huì)通過犧牲部分功能和準(zhǔn)確性來?yè)Q取性能。同時(shí),PCIe 或以太網(wǎng)等高速協(xié)議也將會(huì)減少,以應(yīng)對(duì) FIFO 內(nèi)在能力的局限性。

            適配器和連接電纜增加了設(shè)置的物理關(guān)聯(lián)性和弱點(diǎn),同時(shí)也對(duì)系統(tǒng)的可靠性產(chǎn)生了不利影響。此外,設(shè)置僅局限于每個(gè)協(xié)議一個(gè)測(cè)試實(shí)例,且不允許存在特殊用例測(cè)試或任何“假設(shè)”分析。最后,如果沒有人在現(xiàn)場(chǎng)提供幫助,將仿真器插入和拔出目標(biāo)系統(tǒng),則無法遠(yuǎn)程訪問ICE 模式。

            第二點(diǎn),也是最容易被人低估的一個(gè)缺點(diǎn),便是它缺少確定性行為。這一特性會(huì)使目標(biāo)系統(tǒng)用以驗(yàn)證設(shè)計(jì)的方法變得折中,還會(huì)延長(zhǎng)在ICE模式下發(fā)現(xiàn)錯(cuò)誤的時(shí)間。在 ICE 模式中,使用硬件仿真器追蹤 DUT 的錯(cuò)誤,需要在特定事件被觸發(fā)后,以最高速捕捉設(shè)計(jì)中每個(gè)寄存器的行為。在基于定制硅的硬件仿真器中,無需編譯連接程序,就可將每個(gè)設(shè)計(jì)寄存器連接到追蹤存儲(chǔ)器中。在運(yùn)行時(shí)間方面,驗(yàn)證工程師可進(jìn)行權(quán)衡折衷,即使用追蹤時(shí)鐘周期的數(shù)量來交換需要追蹤的設(shè)計(jì)寄存器的數(shù)量。

            在商用的、基于的硬件仿真器中,只有少量的設(shè)計(jì)寄存器可以通過編譯程序連接到追蹤存儲(chǔ)器上。增設(shè)或者更換追蹤寄存器就要求重新編譯設(shè)計(jì),同時(shí)大幅減少設(shè)計(jì)/迭代時(shí)間。利用這兩種硬件仿真器,用戶可以通過減少被追蹤的寄存器的數(shù)量來增加追蹤深度,反之則亦然。


            圖 2 追蹤窗口(周期 X 信號(hào))受邏輯分析儀中內(nèi)存容量的限制。

            因此,用戶可以不再為了找到自己感興趣的調(diào)試窗口和轉(zhuǎn)儲(chǔ)正確的波形而進(jìn)行多輪——很可能是數(shù)百次的運(yùn)行。但是真正的問題是,每次運(yùn)行都可能會(huì)在不同的時(shí)間點(diǎn)發(fā)現(xiàn)錯(cuò)誤——相同的錯(cuò)誤;甚至更糟糕的是,還可能因?yàn)椴豢深A(yù)測(cè)的行為而發(fā)現(xiàn)不了任何錯(cuò)誤。還記得雙向飛碟射擊的例子嗎?

            來看下使用第三方 IP 填充 的例子。屢次測(cè)試表明,當(dāng) IP 核單獨(dú)工作時(shí),其能起到作用;但當(dāng)它內(nèi)嵌于 時(shí),卻變得完全無效。利用 ICE 模式對(duì)深埋于 DUT 的 IP 進(jìn)行調(diào)試可能會(huì)導(dǎo)致驗(yàn)證團(tuán)隊(duì)沒日沒夜地加班。


            圖 3 連續(xù)運(yùn)行時(shí),會(huì)在不同的時(shí)間/區(qū)域內(nèi)顯示相同的設(shè)計(jì)錯(cuò)誤或者根本不顯示任何設(shè)計(jì)錯(cuò)誤。

            值得高興的是,隨著基于事務(wù)處理的協(xié)同建模技術(shù)的出現(xiàn),硬件仿真領(lǐng)域也發(fā)生了翻天覆地的變化。通過移除物理目標(biāo)系統(tǒng),并使用虛擬測(cè)試環(huán)境進(jìn)行代替,所有問題都消失不見了。這種虛擬測(cè)試環(huán)境是通過 C++/SystemVerilog 從高抽象層次進(jìn)行描述,并通過事務(wù)處理器與 DUT 相連。

            測(cè)試平臺(tái)可用性

            可以在很短的時(shí)間內(nèi)通過 SystemVerilog 創(chuàng)建高層次測(cè)試平臺(tái),這樣不僅符合傳統(tǒng)的 Verilog 的要求而且錯(cuò)誤也較少。事務(wù)處理器都有現(xiàn)貨可買,無需定制。還有,整個(gè)測(cè)試環(huán)境將目標(biāo)鎖定在多媒體、網(wǎng)絡(luò)和存儲(chǔ)等特定的市場(chǎng)應(yīng)用程序上,涵蓋了虛擬測(cè)試程序和事務(wù)處理器,而這些都可在 Mentor Graphics 旗下支持其 Veloce2 硬件仿真平臺(tái)的 VirtuaLAB 品牌中找到。

            更重要的是,如今的設(shè)計(jì)激勵(lì)是具確定性的,因此可以更快完成調(diào)試。事務(wù)處理器可以實(shí)現(xiàn)從HDL軟件仿真到硬件仿真的平穩(wěn)過渡。時(shí)鐘可以停止,也可以進(jìn)行單步調(diào)試;可以進(jìn)行情境“假設(shè)”分析;還可以對(duì)特殊用例進(jìn)行建模。如今,工程師可以通過編寫寄存器傳輸級(jí) (RTL) 代碼來設(shè)計(jì)芯片,而不需要利用實(shí)驗(yàn)室設(shè)備來測(cè)試他們的設(shè)計(jì)。目前,遠(yuǎn)程訪問已經(jīng)實(shí)現(xiàn)了而且會(huì)越來越普及。

            將 SystemVerilog 斷言與事務(wù)處理器結(jié)合,驗(yàn)證工程師們可以利用無限的調(diào)試功能監(jiān)控他們的設(shè)計(jì),并且不會(huì)降低速度。如此,工程師們就可以盡情設(shè)計(jì),不再會(huì)受到內(nèi)存空間或者時(shí)間的限制,然后盡快消除錯(cuò)誤。自此以后,工程師與視野受到限制的雙向飛碟射擊比賽的選手將無任何共通之處。



          關(guān)鍵詞: SoC FPGA

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();