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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計(jì)應(yīng)用 > 基于測(cè)試系統(tǒng)的FPGA測(cè)試方法研究

          基于測(cè)試系統(tǒng)的FPGA測(cè)試方法研究

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

          1 引言

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

          目前FPGA大多采用基于查找表技術(shù),主要由可編程輸入/輸出單元(IOB)、可編程邏輯單元(CLB)、可編程布線資源(PI)、配置用的SRAM、BlockRAM和數(shù)字延遲鎖相環(huán)(DLL)等部分組成。對(duì)FPGA進(jìn)行測(cè)試要對(duì)FPGA內(nèi)部可能包含的資源進(jìn)行結(jié)構(gòu)分析,經(jīng)過一個(gè)測(cè)試配置(TC)和向量實(shí)施(TS)的過程,把FPGA配置為具有特定功能的電路,再從應(yīng)用級(jí)別上對(duì)電路進(jìn)行測(cè)試,完成電路的功能及參數(shù)測(cè)試。

          2 FPGA的配置方法

          對(duì)FPGA進(jìn)行配置有多種方法可以選擇,包括邊界掃描配置方法、Xilinx公司專用的SPI/BPI FLASH配置方法、System ACE配置方法、CPLD+第三方FLASH配置方法、系統(tǒng)直接加載配置向量的配置方法。邊界掃描方法主要適合在線配置調(diào)試用,Xilinx專用Flash配置方法,每次只能在FLASH中存儲(chǔ)一段配置碼,不適合反復(fù)配置測(cè)試過程。System ACE方法需要專門的System ACE控制芯片和CF卡,應(yīng)用比較麻煩。比較適合系統(tǒng)測(cè)試的主要是后兩種方法。

          2.1 測(cè)試系統(tǒng)直接配置方法

          當(dāng)采用的測(cè)試系統(tǒng)比較高級(jí),比如Teradyne公司的UltraFLEX,該系統(tǒng)測(cè)試頻率高達(dá)500 MHz,測(cè)試通道數(shù)多達(dá)1024個(gè),測(cè)試向量深度可達(dá)128 M,可以使用系統(tǒng)直接加載二進(jìn)制配置向量對(duì)FPGA進(jìn)行配置。

          能夠在同一個(gè)操作流程中完成FPGA芯片的多次“配置-測(cè)試”過程。該方法操作簡單,提高了FPGA芯片的測(cè)試效率,能夠?qū)崿F(xiàn)FPGA芯片的產(chǎn)業(yè)化測(cè)試。

          2.2 CPLD+第三方FLASH的配置方法

          當(dāng)待測(cè)FPGA的配置代碼比較大,而測(cè)試系統(tǒng)(ATE)向量深度不足時(shí),可以采用 CPLD+第三方FLASH的配置方法,其結(jié)構(gòu)圖如圖1所示。

          其中CPLD的設(shè)計(jì)是最重要的部分,它所實(shí)現(xiàn)的功能模塊包括接口模塊、控制模塊、地址發(fā)生器模塊。接口模塊實(shí)現(xiàn)與測(cè)試系統(tǒng)的通信,接收測(cè)試系統(tǒng)指令并作相應(yīng)處理,同時(shí)將工作狀態(tài)反饋給測(cè)試系統(tǒng);控制模塊提供控制時(shí)序命令,操縱整個(gè)配置過程;地址發(fā)生器模塊為讀取閃存數(shù)據(jù)提供數(shù)據(jù)地址。CPLD內(nèi)部各功能模塊采用硬件描述語言實(shí)現(xiàn)。

          Flash是配置文件的存儲(chǔ)器件,預(yù)先將多段16進(jìn)制格式配置文件燒寫進(jìn)Flash中。FPGA是系統(tǒng)中配置的目標(biāo)器件。

          本方法采用ATE控制CPLD讀取FLASH中不同地址范圍內(nèi)的配置代碼對(duì)FPGA進(jìn)行配置,再在不掉電的情況下對(duì)配置好的FPGA進(jìn)行功能和參數(shù)測(cè)試。

          3 FPGA配置模式選擇與配置碼的生成

          3.1 FPGA配置模式選擇

          FPGA的配置模式有多種,而且不同系列FPGA的配置模式有一定的差別,主要的配置模式有:主串模式、從串模式、主并模式、從并模式和邊界掃描模式。通過設(shè)置三個(gè)模式選擇管腳M0、M1、M2可以選擇不同配置模式。配置模式如表1所示。

          用測(cè)試系統(tǒng)對(duì)FPGA進(jìn)行測(cè)試大部分時(shí)間是用在配置上,配置時(shí)間根據(jù)配置碼大小不同可達(dá)幾毫秒到數(shù)十秒。為了提高配置速度,我們對(duì)FPGA進(jìn)行配置選擇從并模式,可以最大地節(jié)省測(cè)試配置時(shí)間。以Virtex-II系列FPGA為例,其從并配置模式原理圖如圖2所示。

          3.2 配置碼的生成

          FPGA配置碼要在Xilinx ISE開發(fā)環(huán)境下編寫配置程序,生成所需要的二進(jìn)制格式配置文件,如圖3所示。

          圖中1~7行屬于文件頭,需要?jiǎng)h除掉,第8~9行就是配置數(shù)據(jù)開始標(biāo)志:FFFFFFFF AA995566,后面的都是配置數(shù)據(jù)。

          配置文件數(shù)據(jù)寬度都是32位,還要根據(jù)不同系列FPGA的配置數(shù)據(jù)寬度進(jìn)行修改。以Virtex-II系列為例,它的從并模式數(shù)據(jù)寬度是8位,我們需要編寫應(yīng)用程序轉(zhuǎn)化成8位寬的數(shù)據(jù)。配置數(shù)據(jù)比特順序如表2所示,以8位寬數(shù)據(jù)為例,其D0為最高位。

          4 FPGA的配置與測(cè)試流程

          FPGA配置過程主要有四個(gè)步驟:清除配置存儲(chǔ)器、初始化、配置和啟動(dòng)。以Virtex-II FPGA為例,配置過程的時(shí)序要求如圖5所示:系統(tǒng)上電后給PROG_B管腳一個(gè)低信號(hào),F(xiàn)PGA便開始清除配置存儲(chǔ)器,F(xiàn)PGA內(nèi)部將INIT_B管腳和DONE管腳拉低。當(dāng)配置存儲(chǔ)器清除完畢,INIT_B會(huì)變高,之后若CS_B為低有效,就可以傳送配置數(shù)據(jù)對(duì)FPGA進(jìn)行配置,當(dāng)管腳DONE由低變?yōu)楦?,便?biāo)志芯片的配置完成。

          用測(cè)試系統(tǒng)對(duì)FPGA進(jìn)行測(cè)試可以把配置代碼和測(cè)試代碼分別做成不同的Pattern文件,把配置過程也作為一個(gè)功能測(cè)試項(xiàng),這樣便可對(duì)被測(cè)FPGA電路進(jìn)行反復(fù)的配置--測(cè)試。配置pattern文件如圖5所示。

          FPGA配置完畢后,便具有一定的功能,可以像其他電路一樣進(jìn)行功能和參數(shù)測(cè)試。

          5 結(jié)論

          本文詳細(xì)介紹了FPGA配置方法、配置模式選擇和配置碼的生成方法,并以Virtex-II系列FPGAXC2V250為例詳細(xì)介紹了用測(cè)試系統(tǒng)Ultra-FLEX對(duì)FPGA的配置與測(cè)試過程。 該方法可廣泛應(yīng)用于各種FPGA的測(cè)試,具有較強(qiáng)的通用性,對(duì)于實(shí)現(xiàn)FPGA的產(chǎn)業(yè)化測(cè)試具有重要意義。



          評(píng)論


          技術(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); })();