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

          新聞中心

          EEPW首頁 > 汽車電子 > FPGA設(shè)計的驗證技術(shù)及應(yīng)用原則

          FPGA設(shè)計的驗證技術(shù)及應(yīng)用原則

          ——
          作者: 時間:2007-04-25 來源: 收藏
          設(shè)計和工程師當(dāng)今面臨的最大挑戰(zhàn)之一是時間和資源制約。隨著在速度、密度和復(fù)雜性方面的增加,完成一個完整時序對人力和計算機處理器、存儲器提出了更多更高的要求。

            隨著器件體積和復(fù)雜性的不斷增加,設(shè)計工程師越來越需要有效的方。時序仿真可以是一種能發(fā)現(xiàn)最多問題的驗證方法,但對許多設(shè)計來說,它常常是最困難和費時的方法之一。過去,采用標(biāo)準(zhǔn)臺式計算機的時序仿真是以小時或分鐘計算的,但現(xiàn)在對某些項目來說,在要求采用高性能64位服務(wù)器的情況下,其測試時間卻要幾天甚至幾周。這樣,這種方法首先消弭了采用FPGA帶來的上市時間和實施成本方面的好處。

            FPGA設(shè)計和驗證工程師當(dāng)今面臨的最大挑戰(zhàn)之一是時間和資源制約。隨著FPGA在速度、密度和復(fù)雜性方面的增加,為完成一個完整時序驗證,不僅對人力也對計算機處理器和存儲器提出了更多更高的要求。另外,對設(shè)計和驗證工程師來說(許多情況可能是同一個人),這為在更短的時限內(nèi),以更大信心對當(dāng)今的FPGA設(shè)計在第一次就可實施徹底成功驗證提出了更艱巨的挑戰(zhàn)。

            時序仿真的重要性

            為確保設(shè)計可以工作及能連續(xù)穩(wěn)定工作,當(dāng)今的FPGA既需要功能又需要時序仿真。FPGA設(shè)計的復(fù)雜性在增加,而傳統(tǒng)的驗證方法論又不再有效。過去,在FPGA設(shè)計流中,模擬并非一個重要階段。但眼下,卻成為最關(guān)鍵的步驟之一。當(dāng)采用類似Xilinx的Virtex-5 FPGA Family等更先進FPGA設(shè)計時,時序仿真就變得尤其重要。

            傳統(tǒng)的FPGA驗證方法是:

            1.功能模擬

            在驗證過程中,功能模擬是個非常重要的部分,但不應(yīng)是唯一部分。當(dāng)進行功能模擬時,它只對RTL設(shè)計的功能性進行測試。它不包括任何時序信息,它也不考慮由實現(xiàn)和優(yōu)化對原初設(shè)計造成的改變。


            2. 靜態(tài)時序分析/形式驗證

            許多工程師認(rèn)為為校驗設(shè)計是否滿足時序要求,只需進行靜態(tài)時序分析。將此作為唯一時序分析方法有很多缺陷。靜態(tài)分析無法發(fā)現(xiàn)當(dāng)設(shè)計動態(tài)運行時,才能發(fā)現(xiàn)的任何問題。靜態(tài)分析僅能顯示該設(shè)計作為整體是否可滿足設(shè)置和保持要求且一般僅達(dá)到施加的時序約束的水平。在實際系統(tǒng)中,動態(tài)因素可造成FPGA的時序違規(guī)。例子之一是塊RAM(Block Ram)沖突。在FPGA器件中,隨著雙端口塊RAM(Dual Port Block Rams)的引入,應(yīng)留心避免同時讀/寫同一個區(qū)域,否則,讀取的數(shù)據(jù)會不正確。靜態(tài)分析工具將永遠(yuǎn)無法發(fā)現(xiàn)該問題。類似,若有被誤讀的時間規(guī)范(timespec),靜態(tài)時序分析也將難以發(fā)現(xiàn)此問題。

            3. 在系統(tǒng)測試

            實際上,每位工程師都依賴該方法進行最終測試。若設(shè)計能在板上工作且通過了各種測試,則該設(shè)計就將被發(fā)布。這肯定是個非常好的測試,但它也許沒能發(fā)現(xiàn)全部問題。有時,在一些邊界情況(corner-case)被發(fā)現(xiàn)前,設(shè)計需運行相當(dāng)長的時間。諸如時序違約等問題并非在所有芯片中都以相同方式顯露出來。當(dāng)發(fā)現(xiàn)這些問題時,設(shè)計通常已交到用戶手中。這意味著為找出此問題所導(dǎo)致的高成本、停工期和挫折感。為能正確完成在系統(tǒng)測試,必須清除全部硬件故障,其中包括與SSO相關(guān)的問題、交叉干擾以及其它與板卡關(guān)聯(lián)的問題。若在啟動在系統(tǒng)測試前,有需要連接的外部接口,則將延緩產(chǎn)品的上市時間。

            從上可知,傳統(tǒng)的驗證方法不足以進行完整的系統(tǒng)驗證。有充足理由進行動態(tài)時序分析。

            時序仿真是可在其中進行動態(tài)分析的唯一方法。許多工程師有令人信服的理由拒絕進行時序分析。一些主要擔(dān)心問題是:
            它很費時;
            為執(zhí)行驗證,需要大量存儲器和處理器資源;
            為沒有辦法重復(fù)使用取自功能模擬的測試基準(zhǔn),必須創(chuàng)制新測試基準(zhǔn);
            為因為整個網(wǎng)絡(luò)表是展開的,所以設(shè)計調(diào)試成為一件瑣事,另外,沒辦法及時定位問題所在;
            為時序仿真顯示最壞情況的數(shù)量,設(shè)計本身可能足夠超脫,不至于如此興師動眾;
            為并非所有子模塊都是在一個環(huán)境下進行編程的;
            為無法將在各個不同場所編程的部分分開,因為這些部分的設(shè)計師應(yīng)是那些為能進行驗證從而對設(shè)計有更深刻把握的人。

            這些都是正當(dāng)?shù)年P(guān)注,這也就是為什么下一節(jié)將討論工程師能做些什么以克服其中某些問題的原因。

            在時序仿真中采用Netgen以獲得精準(zhǔn)結(jié)果

            Xilinx提出了一種革命性方法以從Netgen中得到用于動態(tài)分析匹配的靜態(tài)時序分析數(shù)和時序數(shù)。與-pcf 開關(guān)一起運行Netgen并指向一個有效PCF文件將確保得自Trce和Netgen的數(shù)將互相匹配。

            在時序計算時,所有新Xilinx架構(gòu)都利用了相對最小數(shù)(Relative Minimums)的好處。利用相對最小數(shù)意味著在設(shè)置計算以及相反的保持計算時,將采用最大時鐘延時和最小數(shù)據(jù)延時。目前的模擬器不支持使用相同SDF文件中分別取自MIN域和MAX域的數(shù)?;谠撓拗?,Xilinx需要兩個不同的模擬-- 一個用于設(shè)置,另一個用于保持。

            Netgen編寫SDF文件,所以,當(dāng)運行SDFMAX模擬時,將利用最大時鐘延時和最小數(shù)據(jù)延時。SDFMAX保證設(shè)計能滿足目標(biāo)器件的設(shè)置要求。當(dāng)運行SDFMIN模擬時,利用最小時鐘延時和最大數(shù)據(jù)延時。SDFMIN保證設(shè)計能滿足目標(biāo)器件的保持要求。

            改進時序仿真體驗

            當(dāng)描述時序仿真時,“總體大于部分的總合”這樣一句常語幾乎可被反過來說成:“部分的總合大于總體。”后一句話總結(jié)了本節(jié)所要闡釋的內(nèi)容。為縮短時序仿真所用的時間,我們將不得不依靠“分割后各個擊破”的方法。對一個大的展開網(wǎng)絡(luò)表來說,完成任何形式的驗證都將是件費時和枯燥的任務(wù)。因此,采取的措施是將網(wǎng)絡(luò)表分割為多個小部分。

            該方法論并非是數(shù)字邏輯領(lǐng)域的一場革命,它是一種漸進的沿革。自從HDL出現(xiàn)后,設(shè)計師一直喜歡采用基于部分組件的模擬而非整個大設(shè)計。問題是,沒辦法將此手段引入時序仿真。這與在FPGA實現(xiàn)中,在保持層次中所取得的進展不再一樣。其基于的理念很簡單。許多設(shè)計創(chuàng)生于若干更小模塊,而驗證在各個子模塊層次進行。

            不久前,推出了一種稱為KEEP_HIERARCHY的方法。該方案允許設(shè)計在經(jīng)歷實現(xiàn)時也能保持層次。它在改進時序仿真方案方面前進了一小步,但它有助于解決的實際問題是在調(diào)試階段?,F(xiàn)在,設(shè)計不再是一個展開網(wǎng)絡(luò)表。后標(biāo)注的HDL文件具有不同的層次部分以匹配原初設(shè)計?,F(xiàn)在,當(dāng)在時序仿真中發(fā)現(xiàn)問題時,能容易地多地對故障源進行定位并進行調(diào)試除錯。正如上面提到的,這只是該特性全面能力的一個過度。

            KEEP_HIERARCHY的下一步是生成“多層次文件(Multiple Hierarchical Files)”的能力。這一引入到軟件工具中的特性能為層次的各部分編寫?yīng)毩⒌木W(wǎng)絡(luò)表及相應(yīng)的SDF(標(biāo)準(zhǔn)延時格式)文件。該特性的引入為與時序仿真一起使用的各種方法敞開了大門。一旦能為層次的各部分編寫,則每個時序模塊看起來與RTL版本一樣。這就支持能再利用在進行功能模擬時使用的測試基準(zhǔn)。這在時序仿真中是個長足進步。

            現(xiàn)在,工程師不再需要僅為進行時序仿真編寫一個獨立的測試基準(zhǔn)。若已為功能模擬編寫了一個測試基準(zhǔn),則幾乎不需任何改動就可將其用于時序仿真。位于頂層的端口名稱將總是相同的,這樣,測試基準(zhǔn)就可被再利用。此類設(shè)計的主要優(yōu)勢之一是它可容易地定位問題所在。為能充分了解該特性的真實能力,我們將考察一個實際例子。

           

           FPGA設(shè)計的驗證技術(shù)及應(yīng)用原則

            圖1中,子模塊A首先由工程團隊1生成、子模塊B和C由工程團隊2生成,另外,IP模塊D從第三方買進。這些模塊都在不同時間及/或由不同工程師生成,且為了驗證每個模塊的功能準(zhǔn)確性,各模塊都用其自己的測試基準(zhǔn)進行了驗證。一旦成功對各個獨立部分進行了驗證,它們就被整合進FPGA以進行實現(xiàn)。RTL模擬通常就是這樣做的?,F(xiàn)在,借助與KEEP_HIERARCHY一起使用MHF(多層級文件)的能力,甚至在進行時序仿真時都可能保持相同策略。

            采用該特性能幫助想進行時序仿真的設(shè)計師解決他們面臨的兩個最大難題:1)各個模塊重復(fù)使用測試基準(zhǔn)的能力;2)定位發(fā)生問題的具體模塊的能力??捎卸喾N途徑進行時序仿真。當(dāng)采用MHF時,因為所有這些模塊的頂層端口都保持一致,所以可容易地重復(fù)使用RTL測試基準(zhǔn)。

            以組塊形態(tài)形成的最終網(wǎng)絡(luò)表確實可使用戶為其RTL等價物選取不同的模塊。這樣做,用戶將可加快模擬的運行時間。RTL幾乎永遠(yuǎn)比結(jié)構(gòu)化網(wǎng)絡(luò)表等快得多,若有種方法在不影響設(shè)計功能的前提下可用RTL替換結(jié)構(gòu)碼,則就應(yīng)嘗試這種方法。幾乎沒一種設(shè)計在實現(xiàn)后就盡善盡美。這就是為什么需要進行時序仿真的原因。

            采用上述同一個例子,我們可考察如何改進整個設(shè)計的速度及可觀察性。為得到最短的運行時間,理想的情況是在一個模塊上一次僅運行時序仿真。此例中,我們可在子模塊A運行時序仿真然后使子模塊B、C和D處在RTL形式。一旦我們進行時序仿真并發(fā)現(xiàn)一切如預(yù)期的一樣,就可對任何子模塊進行切換并以相同的方式進行測試。采用該方法論還意味著,若在一個子模塊中發(fā)現(xiàn)了問題,則可容易地定位該問題子模塊并將它拿給該模塊的設(shè)計者進行修改。 若發(fā)現(xiàn)多個子模塊存在問題,則該方法帶來的額外好處是,兩(多)個不同工程團隊能同時著手解決發(fā)現(xiàn)的問題。

             在傳統(tǒng)流程中,當(dāng)發(fā)現(xiàn)設(shè)計的一個部分存在問題時,只有在該部分的問題被解決后,設(shè)計師才可能處理設(shè)計的其它部分。在采用MHF設(shè)計流后將不再受這種限制。時序仿真用戶的另一個主要抱怨是:若其它工程團隊不在國內(nèi),則完成最后的驗證會相當(dāng)困難且需花很長時間。這是因為,它將浪費許多時間以及當(dāng)采用傳統(tǒng)時序仿真方法論時的許多相互關(guān)聯(lián)和依賴問題。借助MHF方法論,去掉了關(guān)聯(lián)因素。利用MHF,不同工程團隊可省去許多空閑時間。這將確保發(fā)揮團隊的最大效率。具有模塊結(jié)構(gòu)的網(wǎng)絡(luò)表也能為驗證小組提供幫助。過去,需要由一位驗證工程師完成的工作現(xiàn)可由不同小組的多位驗證工程師完成。開發(fā)小組采用的理念也可同樣用于驗證小組。

            除在模擬領(lǐng)域取得持續(xù)進展以外,在施加激勵的方法方面也有重要進步。過去的設(shè)計通常非常小,所以以前的設(shè)計激勵方法是采用模擬器提示(prompt)的施力文件(force file)或簡單刺激以切換每個信號。隨著設(shè)計變得益發(fā)復(fù)雜,施加激勵也需要更好的方法。這里,VHDL和Verilog 的能力將有用武之地。隨著HDL編碼語言的引入,測試基準(zhǔn)變得更復(fù)雜和緊湊。

            在該領(lǐng)域,出現(xiàn)了諸如PSL、SystemC和SystemVerilog等技術(shù)。這些語言覆蓋的范圍不在本文討論之內(nèi)。這些編程方式的一個不利方面是它要求將一個模擬的輸出作為另一個模擬的輸入。一些模擬器支持允許用戶準(zhǔn)確進行這種操控的Extended Value Change Dump Format 格式。不采用這種方法進行時序仿真的用戶遇到的主要障礙是:因為當(dāng)將一切都展開后端口名稱將改變,所以沒辦法將輸出作為激勵。采用MHF方法會去掉此問題,因為,現(xiàn)在這里有可施以激勵的獨立模塊,另外,現(xiàn)在一個模塊的輸出可被用作另一個模塊進行RTL以及時序仿真的激勵。

            選擇層次

            取得層次模擬成功的一個主要部分是選取層次。沒有現(xiàn)成的公式可用于選擇正確的層次。這就是為什么沒有對或錯的層次的原因,雖然在試圖選取層次還是有些原則可資借鑒的。確保滿足如下這些原則永遠(yuǎn)是明智之舉。

            1)設(shè)計應(yīng)當(dāng)是完全同步的。

            2)所有關(guān)鍵路徑應(yīng)包括在一個邏輯組(可被分別同步的設(shè)計的一部分)中。典型情況,每個邏輯組應(yīng)是在設(shè)計頂層例示(instantiated)的Verilog內(nèi)的一個模塊或VHDL內(nèi)的一個實體 。

            3)全部IOB(輸入/輸出塊)邏輯應(yīng)在頂層。器件的任一個輸入和輸出應(yīng)在頂層及I/O緩沖器和I/O三態(tài)門內(nèi)進行聲明。但,邏輯組內(nèi)例示的I/O邏輯是可接受的。

            4)在每個邏輯組的輸入和/或輸出應(yīng)放置寄存器。高明的作法是在邏輯組的邊界對所有輸入信號或輸出信號進行寄存處理。它確保邏輯組內(nèi)的所有關(guān)鍵路徑得到保持并免去了當(dāng)通過邏輯組邊界進行邏輯優(yōu)化時可能導(dǎo)致的問題。在設(shè)計中的所有層次組內(nèi)都應(yīng)一致遵守該規(guī)則。

            5)頂層應(yīng)只包含例示的模塊或?qū)嶓w、IOB邏輯及時鐘邏輯(DCM、BUFG等)。

            6)選擇邏輯組時,應(yīng)不使任一組過小以至對其單獨進行驗證的價值不大或不太關(guān)乎大局,還應(yīng)不使任一組過大以便當(dāng)發(fā)生問題時難以模擬和調(diào)試。但對此沒有確切的定律,另外,它可根據(jù)設(shè)計和驗證要求而變。

            7)選擇邏輯組時還應(yīng)注意使設(shè)計中最可能在后續(xù)設(shè)計流中被改動的部分與設(shè)計中更穩(wěn)定的部分獨立開來。這樣,當(dāng)進行了這種明智選擇后,以后的設(shè)計變更對驗證時間產(chǎn)生的影響最小。

            只要遵循上述提到的規(guī)則,保持層次就該不會對設(shè)計性能產(chǎn)生影響。為從保有的層次中得到最大利益,只應(yīng)將其應(yīng)用在設(shè)計中的其端口在門級模擬中需要可見性的塊中。一般情況,這些塊是遵循了上述規(guī)則的上層塊。通過對選擇的塊限制其保留層次,綜合和實現(xiàn)工具將具有更多的自由以優(yōu)化設(shè)計并改進性能。下圖2顯示的是在一個范例設(shè)計中可在哪里保留層次的例子。

           

           FPGA設(shè)計的驗證技術(shù)及應(yīng)用原則

            應(yīng)注意的是這里只有指導(dǎo)方針。沒有指定如何選擇或保持層次的確定規(guī)則。它的確因設(shè)計而異、因用戶而不同。應(yīng)由用戶來決定在哪里保持層次對驗證最有價值、以及在哪里應(yīng)將其解構(gòu)。

            層次驗證進入實戰(zhàn)

            為對在時序仿真中采用層次方法的可能好處進行量化,我們將檢查兩個設(shè)計:VHDL和Verilog各一個,它們都是以中等規(guī)模Xilinx FPGA為目標(biāo)器件的,且采用了500微秒的Model Technology ModelSim SE模擬器進行模擬。這些模擬是在帶2GB RDRAM存儲器的雙2.0 GHz Xeon計算機上在Linux環(huán)境下運行的。這是為表現(xiàn)該方法論能顯現(xiàn)的量值差別所進行的一個適當(dāng)?shù)膰L試,它并不一定代表典型的模擬運行時間或存儲器需求。

            VHDL設(shè)計在一定程度上代表了典型的以DSP為導(dǎo)向的設(shè)計,這里用的是Xilinx的 Virtex-4 SX35 FPGA。我們選擇將設(shè)計分為9個子層和一個頂層,在每個期望子層都放置一個KEEP_HIERARCHY。

            在該測試中,我們選取代碼最不穩(wěn)定的部分,也即在設(shè)計流的這一部分它頻繁改變。執(zhí)行一個相對簡單的模擬,并比較TRL模擬時間與設(shè)計的時序仿真時間,我們發(fā)現(xiàn)它對運行時間和存儲器容量要求有顯著增加,見下表1。但,若我們采取僅對設(shè)計的改變部分施以時序仿真的方法,我們可相應(yīng)降低運行時間24倍、減小存儲器容量21倍。即使我們選擇僅采用改變的部分對整個設(shè)計進行時序驗證,我們看到,與完全RTL模擬相比,其所需的運行時間和存儲器容量與完全RTL模擬相比也只需增加約一倍。與更傳統(tǒng)的全時序仿真相比,其對上述兩個指標(biāo)的要求也有大幅降低。

           

           FPGA設(shè)計的驗證技術(shù)及應(yīng)用原則

            看Verilog設(shè)計,它代表了某種更大更復(fù)雜數(shù)據(jù)路徑方式的設(shè)計,我們以Xilinx Virtex-4 LX80 FPGA為目標(biāo)器件。我們將其分為14個子層和一個頂層,采用KEEP_HIERARCHY約束以支持分段時序仿真。我們看到,與VHDL運行相比,所需的時間長了些,但對該設(shè)計仍取得類似的改進。僅對改變部分進行的時序仿真與對整個設(shè)計進行時序仿真相比,運行時間和模擬存儲器分別節(jié)省了6.3和6.6倍。僅將設(shè)計的改變部分代替以時序仿真網(wǎng)絡(luò)表然后模擬整個RTL設(shè)計,運行時間和存儲器需求仍分別縮短了3.6倍、減小了 5.5倍。

            在兩個設(shè)計中,被改變模塊的覆蓋范圍完全相當(dāng),且因為更快的運行時間以及需分析的設(shè)計更小,設(shè)計調(diào)試變得更容易。也許因為需要更大的存儲器,模擬器用起來也更覺靈便。我們注意到,采用該方法論(擴展了驗證設(shè)計的可用資源并允許并行運行以進一步降低總體運行時間),可能用一款較低端的計算機(速度更慢、存儲器更少)執(zhí)行該模擬。

            本文小結(jié)

            本文覆蓋了利用目前可用的一種技術(shù)進行高級驗證的方法論。它并非一種革命性的方法論,而是一種大多數(shù)設(shè)計師并不完全了解或徹底把握的一種方法。這些技術(shù)過去一直用于不同類型的模擬和驗證,但可能并沒發(fā)揮出全部效力。采用層次模擬可對需要多長時間及多大努力才能完成一個設(shè)計驗證產(chǎn)生巨大影響。令人欣慰的是,借助本文,在未來的FPGA設(shè)計中,在降低模擬對硬件需求的同時有可能實現(xiàn)更快和更高效的時序仿真。

          fpga相關(guān)文章:fpga是什么


          存儲器相關(guān)文章:存儲器原理




          關(guān)鍵詞: FPGA 驗證

          評論


          相關(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); })();