<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 使用FPGA測試的一些有效方法

使用FPGA測試的一些有效方法

作者: 時(shí)間:2008-03-18 來(lái)源:電子產(chǎn)品世界 收藏
引言

  隨著(zhù)芯片設計技術(shù)越來(lái)越成熟,越來(lái)越多的產(chǎn)品選擇使用SoC(System on Chip)的技術(shù)實(shí)現。然而,每一次流片不一定都能達到預期的效果。根據Synopsys公司統計,有超過(guò)60%的公司需要重新流片(respin)。在這個(gè)過(guò)程中浪費了大量的金錢(qián),一次修正平均的花費就超過(guò)100萬(wàn)美元。如果一旦錯過(guò)了商品推出的最佳時(shí)機,那么錯過(guò)市場(chǎng)機會(huì )的代價(jià)則以數千萬(wàn)美元計,甚至更高。據統計,在需要respin的芯片中有43%是在前端的設計和實(shí)現的時(shí)候產(chǎn)生的邏輯功能錯誤。如何避免或減小如此高的風(fēng)險是每一個(gè)設計單位思考的問(wèn)題。

  現在行業(yè)內有兩種解決此問(wèn)題的方案,第一種方案是利用越來(lái)越先進(jìn)的EDA仿真工具仿真測試。業(yè)界產(chǎn)品的兩大巨頭Synopsys和Cadance都推出了自己的解決方案。然而,EDA工具非常昂貴,卻不一定能滿(mǎn)足每一個(gè)項目的要求。另外,EDA工具的仿真時(shí)間很長(cháng)。用一套無(wú)線(xiàn)通信系統舉例,初始化的過(guò)程就需要半天的時(shí)間,每收發(fā)一幀都需要3-4個(gè)小時(shí),因此在有限的時(shí)間內不可能完成比較全面的測試(測試時(shí)采取的都是并行運算的方式,工作站都是Sun Blade2000的配置)。最后,仿真軟件再完善也不是實(shí)際的硬件操作,因此某些只可能在硬件上發(fā)生的問(wèn)題,無(wú)法通過(guò)仿真來(lái)獲得。比如某些時(shí)序問(wèn)題和功耗問(wèn)題。另外,硬件的"脾氣"比較古怪,經(jīng)常會(huì )出現一些意想不到的狀態(tài),這些都是仿真軟件無(wú)法模擬出來(lái)的。第二種解決方案是采用進(jìn)行真實(shí)的硬件測試。比如Xilinx公司的EasyPath解決方案。然而使用這種方案也面臨著(zhù)一些需要解決的問(wèn)題,比如如何使設計的產(chǎn)品可以既在A(yíng)SIC上工作,又在上正常工作,如何保證與ASIC的一致性。針對這些問(wèn)題的解決方法是本文重點(diǎn)討論的內容。

  本文的測試實(shí)例和測試方法均來(lái)源于北京市嵌入式重點(diǎn)實(shí)驗室的無(wú)線(xiàn)局域網(wǎng)芯片項目,本項目的產(chǎn)品目前已經(jīng)成功流片。這些測試方法的應用對項目的順利進(jìn)展起到了關(guān)鍵性的作用,起到了良好的效果。

時(shí)序問(wèn)題的解決

  我們知道FPGA可以接受的時(shí)鐘和所允許的時(shí)序遠遠低于A(yíng)SIC。但作為ASIC產(chǎn)品而言,我們在設計的時(shí)候又往往采取較高的時(shí)鐘速率。由于A(yíng)SIC時(shí)鐘樹(shù)與布線(xiàn)相對自由,故對于高速率設計解決起來(lái)相對容易。對于Xilinx FPGA而言,盡管采用了90nm工藝的Virtex-4可以支持的性能高達500M[1],但是其時(shí)鐘樹(shù)和布線(xiàn)資源相對固定,因此一旦在編譯和布局布線(xiàn)的時(shí)候處理不當,就會(huì )產(chǎn)生時(shí)序沖突(timing violation)。產(chǎn)生時(shí)序沖突的結果,輕則使設計的邏輯與實(shí)際布局布線(xiàn)后的網(wǎng)表不一致,重則導致布局布線(xiàn)根本無(wú)法通過(guò),從而致使驗證無(wú)法進(jìn)行。

  我們在解決時(shí)序問(wèn)題的時(shí)候采取了五種不同的方法。其中一種方法是應在設計中就加以注意,兩種在綜合的時(shí)候進(jìn)行,還有兩種在布局布線(xiàn)時(shí)采用。

設計過(guò)程中注意時(shí)序問(wèn)題

  若希望設計的產(chǎn)品能夠在FPGA驗證平臺上順利的完成驗證,在設計過(guò)程中就需要注意盡量多的使用FPGA的內部資源,如DSP48,乘法器,RAM,DCM等。
在我們的設計中有不少濾波器,這些濾波器正好可以使用DSP48[2]這個(gè)模塊。該模塊如圖-1所示,為乘加結構。濾波器若不使用這種模塊,則需進(jìn)行大量的乘、加運算。這樣不但浪費資源,而且很容易導致時(shí)序無(wú)法滿(mǎn)足要求。而如果使用這樣的模塊,則基本上所有的濾波器都不再處于"最差路徑"上。
圖 1 DSP48示意圖

  對于乘法器,如果使用slice搭建不僅浪費資源,而且性能差,位寬一旦比較寬就會(huì )導致時(shí)序出現問(wèn)題。Xilinx的ISE中配有Core Generator這個(gè)工具。通過(guò)該工具可以生成需要的乘法器。使用這些乘法器來(lái)代替普通的乘法器,可以達到滿(mǎn)意的效果。除了乘法器,還可以使用該工具產(chǎn)生RAM和DCM等,在此不再贅述。

綜合過(guò)程解決時(shí)序問(wèn)題

  我們使用Synplicity公司的Synplify工具進(jìn)行綜合,這是業(yè)界通常使用的綜合工具之一。選擇該工具最主要的原因在于它與Xilinx的FPGA配合的很好。我們做過(guò)實(shí)驗,通過(guò)該工具綜合產(chǎn)生結果報表,再通過(guò)ISE產(chǎn)生真實(shí)布局布線(xiàn)后的報表。對這兩個(gè)報表的時(shí)序估計部分進(jìn)行對比,我們發(fā)現兩者之間驚人的相似,最差路徑之間的差別不超過(guò)1ns。

  我們知道,綜合的時(shí)候需要設置約束,最重要的是時(shí)鐘約束。這個(gè)約束限制了系統工作的頻率。為了降低系統對于時(shí)鐘抖動(dòng)的敏感性,我們采取的第一個(gè)方法是在設置時(shí)鐘約束的時(shí)候將此約束值設的略高于實(shí)際的時(shí)鐘頻率。這樣做有一個(gè)前提,那就是在綜合后不得有負的時(shí)鐘余度(time slack)出現。當沒(méi)有負的時(shí)鐘余度出現的時(shí)候,提高時(shí)鐘約束可以有效避免因時(shí)鐘抖動(dòng)而引入的時(shí)序問(wèn)題,但是如果因為提高了約束中時(shí)鐘頻率,而導致負的時(shí)鐘余度的出現,那么有可能導致在布局布線(xiàn)過(guò)程中產(chǎn)生時(shí)序沖突而無(wú)法正常布局布線(xiàn)。在這種情形下,就不宜提高約束中的時(shí)鐘頻率。

  在綜合中采取的第二個(gè)方法是使用綜合工具提供的pipeline和retiming功能[3]。這些功能可以調整寄存器的位置,使之在不改變邏輯的前提下,將寄存器的位置調整的更加合理,如圖-2所示。這個(gè)功能主要用于組合邏輯過(guò)長(cháng)且不合理的情況下。當然,如果某些乘法器位數過(guò)寬而結果沒(méi)有寄存的時(shí)候也會(huì )導致組合邏輯時(shí)序緊張。當發(fā)生這種情況而retiming功能又無(wú)法糾正時(shí),就需要設計者在做設計的時(shí)候對乘法器的輸出結果做一拍寄存,同時(shí)其余的控制邏輯也要做相應的調整。

本文引用地址:http://dyxdggzs.com/article/80231.htm
圖 2 retiming 示意圖

布局布線(xiàn)階段解決時(shí)序問(wèn)題

  當綜合工作完成,進(jìn)入布局布線(xiàn)的階段后,仍然有兩種方法可以改善邏輯時(shí)序問(wèn)題。

  第一種是手動(dòng)增加并調整BUFG(Global Clock Buffer)。BUFG是Xilinx的全局時(shí)鐘資源,所有時(shí)鐘樹(shù)的起點(diǎn)都是BUFG,位于FPGA的北極和南極。當布線(xiàn)后仍有負的slack時(shí),有可能是某些當作時(shí)鐘使用的信號沒(méi)有被放上時(shí)鐘樹(shù),此時(shí)就要手動(dòng)將這些信號放上BUFG。若遇到門(mén)控時(shí)鐘,還應該使用BUFGMUX資源。另外,在Virtex-4中,北邊的BUFG主要負責北部的時(shí)鐘,南部的BUFG負責南部的時(shí)鐘。在我們的項目中,共有十余個(gè)時(shí)鐘,因此,BUFG位置的選擇也很關(guān)鍵。有些時(shí)候,工具不能解決一切問(wèn)題,只有手動(dòng)調整BUFG的位置,或將BUFG的位置信息寫(xiě)入用戶(hù)約束文件才可以取得較滿(mǎn)意的效果。

  在Virtex-4中共有16個(gè)BUFG,若都被使用且經(jīng)手動(dòng)優(yōu)化后仍不滿(mǎn)足要求 ,那么還可以使用ISE提供的Floorplanner工具,對設計的各個(gè)模塊手動(dòng)進(jìn)行位置擺放,使各個(gè)模塊盡量靠近自己所使用的時(shí)鐘樹(shù)。

代碼一致性

  對于經(jīng)過(guò)FPGA驗證的代碼而言,最擔心的是經(jīng)過(guò)驗證的代碼和進(jìn)行流片的代碼不一致。導致這個(gè)現象產(chǎn)生的原因是多種的,其中版本控制和由于FPGA、ASIC專(zhuān)用器件不一致而引起的問(wèn)題是最常見(jiàn)的兩個(gè)問(wèn)題。前者不在本文的討論范圍,故在此略過(guò)。

  對于經(jīng)過(guò)FPGA驗證的代碼,為了能夠使被測代碼可以順利的在FPGA進(jìn)行驗證,根據2.1節所述,一般都采取了FPGA專(zhuān)用的器件。這些FPGA專(zhuān)用器件在A(yíng)SIC中是不存在的。為了解決這個(gè)問(wèn)題,我們通常采取"假代碼"(Fake Code)解決。

  顧名思義,"假代碼"就是在代碼中保留FPGA專(zhuān)用器件的名稱(chēng)和接口,但是在FPGA和ASIC中使用不同的器件內核。該器件若在FPGA下使用則使用FPGA專(zhuān)用器件,若在A(yíng)SIC下使用,則使用自己編寫(xiě)的代碼。盡管這種做法仍然無(wú)法保證代碼的完全一致,但是卻最大限度的避免了代碼的差別。

結論


  究竟使用EDA 仿真工具還是使用FPGA進(jìn)行流片前的功能驗證一直是業(yè)內討論的熱點(diǎn)話(huà)題,不同的設計、測試人員也有自己的觀(guān)點(diǎn)。本文針對使用FPGA進(jìn)行驗證測試所遇到的一些問(wèn)題提出了相應的解決方法,對于使用FPGA進(jìn)行驗證測試的工程師有一定的參考意義。



關(guān)鍵詞: FPGA

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>