顧小明,肖培磊,唐勇
(中國(guó)電子科技集團(tuán)公司第五十八研究所,江蘇 無(wú)錫 214035)
當(dāng)前常見(jiàn)的復(fù)雜可編程邏輯器件(CPLD)在配置數(shù)據(jù)存儲(chǔ)及加載功能設(shè)計(jì)時(shí)一般采用Flash 加SRAM架構(gòu)[1]。內(nèi)嵌的Flash 存儲(chǔ)器存放配置數(shù)據(jù),SRAM 單元與實(shí)際的配置點(diǎn)對(duì)應(yīng)。通過(guò)聯(lián)合測(cè)試工作組(JTAG)接口將配置數(shù)據(jù)事先存儲(chǔ)在Flash 中,在器件每次加電后,利用內(nèi)部在線系統(tǒng)編程(ISP)功能[2]將配置數(shù)據(jù)加載到SRAM 中,從而實(shí)現(xiàn)配置數(shù)據(jù)掉電后不丟失及加電后自動(dòng)加載的功能。
JTAG 接口、內(nèi)嵌式Flash 存儲(chǔ)器、分布式SRAM存儲(chǔ)器及ISP 功能模塊構(gòu)成了CPLD 配置數(shù)據(jù)擦除、寫(xiě)入及加載的基本機(jī)制,是CPLD 能否實(shí)現(xiàn)預(yù)先設(shè)計(jì)邏輯的重要保障。本文設(shè)計(jì)了一種用于CPLD 擦寫(xiě)壽命驗(yàn)證的裝置,在產(chǎn)品篩選、考核階段,對(duì)配置數(shù)據(jù)擦寫(xiě)、加載機(jī)制以及內(nèi)部存儲(chǔ)器壽命進(jìn)行了充分驗(yàn)證。
JTAG 負(fù)責(zé)制定IEEE Std 1149.1 標(biāo)準(zhǔn),用于芯片內(nèi)部測(cè)試。該標(biāo)準(zhǔn)包含測(cè)試接入口(TAP)和邊界掃描機(jī)制兩個(gè)基本部分,兩部分合在一起又被稱(chēng)作JTAG接口[3]。器件廠商會(huì)對(duì)標(biāo)準(zhǔn)的JTAG 接口功能進(jìn)行擴(kuò)展以滿足在線調(diào)試及數(shù)據(jù)配置需求。不同的器件廠商擴(kuò)展的機(jī)制不一樣,因此不同廠商提供的配置工具和在線調(diào)試軟件也不通用。通過(guò)JTAG 接口,有兩種常見(jiàn)方式可以對(duì)CPLD 擦寫(xiě)壽命進(jìn)行驗(yàn)證。
方式一,使用CPLD 集成開(kāi)發(fā)環(huán)境,一般選擇后綴名為jed 的配置文件。這種方式對(duì)開(kāi)發(fā)工具有嚴(yán)重的依賴(lài)性,因?yàn)樾枰馕鰆ed 配置文件后才能控制JTAG接口;雖然支持JTAG 接口的器件可以串行連接成“菊花鏈”的形式,但是鏈上器件數(shù)量有嚴(yán)格限制,且不能做到多個(gè)器件同時(shí)配置。
方式二,通過(guò)自動(dòng)化測(cè)試機(jī)臺(tái)對(duì)CPLD 進(jìn)行擦寫(xiě)壽命驗(yàn)證。自動(dòng)化測(cè)試機(jī)臺(tái)使用后綴名為svf 的配置文件[4-5],其內(nèi)容包含了配置過(guò)程的擦除、寫(xiě)入及校驗(yàn)。svf 是IEEE Std 1149.1 的一部分,便于自動(dòng)化測(cè)試機(jī)臺(tái)控制JTAG 接口收發(fā)數(shù)據(jù)。svf 類(lèi)型文件可以通過(guò)開(kāi)發(fā)工具由對(duì)應(yīng)的jed 類(lèi)型文件轉(zhuǎn)換獲得。
為提高效率,一般在一塊測(cè)試板上放置多個(gè)CPLD,自動(dòng)化測(cè)試機(jī)臺(tái)通過(guò)JTAG 接口對(duì)這些器件進(jìn)行分時(shí)測(cè)試驗(yàn)證。CPLD 可以在測(cè)試板上按照特定的方式連接在一起,既可以保證每個(gè)器件的可測(cè)性又不會(huì)相互影響??陀^來(lái)說(shuō),CPLD 擦寫(xiě)壽命驗(yàn)證裝置可以由自動(dòng)化測(cè)試機(jī)臺(tái)來(lái)協(xié)助完成,但是這種方式有兩個(gè)明顯的弊端:自動(dòng)化測(cè)試機(jī)臺(tái)一般價(jià)格昂貴,需要在恒定的濕度、溫度環(huán)境下運(yùn)行;需要設(shè)計(jì)和自動(dòng)化測(cè)試機(jī)臺(tái)對(duì)接的專(zhuān)用板卡,且由于自動(dòng)化測(cè)試機(jī)臺(tái)資源有限,很難進(jìn)行大規(guī)模工位擴(kuò)展。
上述兩種CPLD 擦寫(xiě)壽命驗(yàn)證方式均有明顯的弊端,不利于多工位同時(shí)進(jìn)行驗(yàn)證,效率低。本設(shè)計(jì)的思路是進(jìn)一步提煉、整理svf 類(lèi)型配置文件,得到配置碼并存儲(chǔ)在驗(yàn)證裝置中,之后可以不依賴(lài)開(kāi)發(fā)工具及自動(dòng)化測(cè)試機(jī)臺(tái)進(jìn)行獨(dú)立工作。可以根據(jù)需要制作多套擦寫(xiě)驗(yàn)證裝置,讓它們并行工作,提高效率。
在svf 類(lèi)型配置文件中明確列出了JTAG 接口功能引腳(TMS、TCK、TDI 及TDO)的順序變化關(guān)系,但是不能直接存儲(chǔ),因?yàn)閟vf 類(lèi)型配置文件中存在許多特定意義的字符串。本文采用自行編寫(xiě)的工具軟件[6-9],將svf 類(lèi)型配置文件進(jìn)一步解析、提煉,去掉多余的字符串,最終只保留JTAG 接口功能引腳應(yīng)具有的順序變化關(guān)系。示例性順序配置碼如表1 所示,對(duì)于不需要的狀態(tài)(X)一律按高電平(“1”)來(lái)編碼,這樣處理與選擇的存儲(chǔ)器類(lèi)型有關(guān)。本設(shè)計(jì)采用的是Flash 型存儲(chǔ)器,當(dāng)對(duì)Flash 存儲(chǔ)單元擦除后,其默認(rèn)值是邏輯“1”。
表1 示例性順序配置碼
用一個(gè)8 位的二進(jìn)制碼表示JTAG 接口功能引腳特定時(shí)刻的狀態(tài),Bit7 代表TCK 狀態(tài),Bit6 代表TMS狀態(tài),Bit5 代表TDI 狀態(tài),Bit4 代表TDO 狀態(tài),低位Bit3 到Bit0 用于指示本狀態(tài)需要重復(fù)的次數(shù),對(duì)應(yīng)到實(shí)際時(shí)序?yàn)榈却龝r(shí)間。對(duì)svf 類(lèi)型配置文件解析后,發(fā)現(xiàn)需要重復(fù)的狀態(tài)小于15 種,因此用一個(gè)4 位的二進(jìn)制數(shù)對(duì)其進(jìn)行編碼。重復(fù)次數(shù)編碼是人為規(guī)定的,比如用“E”代表本狀態(tài)不需要重復(fù),“A”代表本狀態(tài)需要重復(fù)200 次等。這樣的一串8 位順序配置碼包含了對(duì)CPLD 進(jìn)行擦寫(xiě)操作的所有信息,是在擦寫(xiě)過(guò)程中JTAG 接口功能引腳應(yīng)該具有的實(shí)際高/低電平順序變化關(guān)系。
對(duì)于不同邏輯功能的配置碼,其長(zhǎng)度可能不一致,但最終都會(huì)用十六進(jìn)制編碼FE(HEX)補(bǔ)齊到8FFFF(HEX)長(zhǎng)度,以保證不同的配置碼存儲(chǔ)深度一樣,便于后續(xù)控制邏輯設(shè)計(jì)。
擦寫(xiě)壽命驗(yàn)證裝置的工作原理如圖1 所示。首先,將準(zhǔn)備好的一組配置碼順序存儲(chǔ)在Flash 單元中;然后,按照一定的速率、順序每次讀取一個(gè)配置碼,對(duì)配置碼進(jìn)行簡(jiǎn)單解析,將配置碼的Bit7 對(duì)應(yīng)到需要擦寫(xiě)的CPLD 功能引腳TCK,Bit6 對(duì)應(yīng)到功能引腳TMS,Bit5 對(duì)應(yīng)到功能引腳TDI,Bit4 對(duì)應(yīng)到功能引腳TDO,通過(guò)判斷配置碼Bit3 到Bit0 的數(shù)值決定本次狀態(tài)是否需要重復(fù)(時(shí)序等待)。順序讀取、解析完一組配置碼,即完成對(duì)CPLD 的一次擦寫(xiě)操作。
圖1 擦寫(xiě)壽命驗(yàn)證裝置工作原理
選取大容量的Flash 存儲(chǔ)器,對(duì)其存儲(chǔ)空間進(jìn)行合理規(guī)劃,可以預(yù)先存儲(chǔ)多組不同的配置碼;多組不同的配置碼存儲(chǔ)塊之間插入一定數(shù)量的空白存儲(chǔ)單元,在對(duì)CPLD 進(jìn)行擦寫(xiě)操作時(shí),只需要從Flash 存儲(chǔ)器起始地址開(kāi)始,順序讀取、解析數(shù)據(jù)就可以實(shí)現(xiàn)不同配置碼的交替擦寫(xiě)操作。當(dāng)最后一組配置碼讀取、解析結(jié)束后,再次回到存儲(chǔ)單元的起始地址即可實(shí)現(xiàn)多組配置碼交替循環(huán)擦寫(xiě)操作。
CPLD 擦寫(xiě)壽命驗(yàn)證裝置硬件結(jié)構(gòu)如圖2 所示,它主要由配置碼存儲(chǔ)Flash 及一塊主控FPGA 構(gòu)成。通過(guò)FPGA 擴(kuò)展CPLD 的JTAG 接口可以進(jìn)行多片CPLD 的同時(shí)擦寫(xiě)操作。本裝置由于所選主控FPGA資源有限,最終一套裝置可支持14 片CPLD 同時(shí)進(jìn)行擦寫(xiě)操作。
圖2 擦寫(xiě)壽命驗(yàn)證裝置硬件結(jié)構(gòu)
配置碼存儲(chǔ)Flash 可以存儲(chǔ)多組不同功能的配置碼,本方案根據(jù)需求存儲(chǔ)了兩組配置碼,用于交替循環(huán)擦寫(xiě)驗(yàn)證。主控時(shí)序由一片F(xiàn)PGA 完成。FPGA 外部硬件結(jié)構(gòu)見(jiàn)圖2,通過(guò)SPI 接口連接Flash 存儲(chǔ)器;利用通用I/O 端口擴(kuò)展CPLD 的JTAG 接口,實(shí)現(xiàn)多工位并行擦寫(xiě)。
控制邏輯結(jié)構(gòu)及流程如圖3 所示。主控FPGA 內(nèi)部邏輯由Flash 讀取控制狀態(tài)機(jī)、JTAG 接口控制狀態(tài)機(jī)及交互機(jī)制[10-12]構(gòu)成。
圖3 控制邏輯結(jié)構(gòu)及流程
Flash 讀取控制狀態(tài)機(jī)采用50 MHz 高速基準(zhǔn)時(shí)鐘,主要讀取Flash 中的配置碼,控制擦寫(xiě)次數(shù);JTAG接口控制狀態(tài)機(jī)負(fù)責(zé)解析配置碼,控制CPLD 的JTAG 接口時(shí)序,完成實(shí)際的擦寫(xiě)操作。兩個(gè)狀態(tài)機(jī)通過(guò)配置碼緩沖區(qū)、Flash 讀使能信號(hào)及Flash 讀取控制狀態(tài)機(jī)狀態(tài)信號(hào)進(jìn)行交互以實(shí)現(xiàn)協(xié)調(diào)運(yùn)行。
當(dāng)主控FPGA 加電后,JTAG 接口控制狀態(tài)機(jī)首先收到一個(gè)初始化脈沖,初始化后向Flash 讀取控制狀態(tài)機(jī)輸出Flash 讀不使能信號(hào),然后從配置碼緩沖區(qū)讀取兩組配置碼L0 及L1,并對(duì)配置碼進(jìn)行解析、輸出,同時(shí)發(fā)出Flash 讀使能信號(hào);Flash 讀取控制狀態(tài)機(jī)收到Flash 讀使能信號(hào)后從Flash 存儲(chǔ)器中讀取兩組配置碼放到配置碼緩沖區(qū),配置碼緩沖區(qū)設(shè)計(jì)成先進(jìn)先出(FIFO)機(jī)制,L0 及L1 被L2 及L3 代替,L2 及L3被最新讀出的配置碼代替;之后Flash 讀取控制狀態(tài)機(jī)進(jìn)入“Flash 讀停止?fàn)顟B(tài)”。JTAG 接口控制狀態(tài)機(jī)將L1 配置碼解析、輸出完畢后會(huì)判斷Flash 讀取控制狀態(tài)機(jī)是否已經(jīng)進(jìn)入“Flash 讀停止?fàn)顟B(tài)”,如果是,說(shuō)明最新的配置碼已經(jīng)準(zhǔn)備就緒,JTAG 接口控制狀態(tài)機(jī)讀取最新的配置碼并解析、輸出,同時(shí)再次發(fā)出Flash讀使能信號(hào),一個(gè)新的交互周期開(kāi)始;否則JTAG 接口控制狀態(tài)機(jī)維持當(dāng)前狀態(tài)并一直等待,直到Flash 讀取控制狀態(tài)機(jī)進(jìn)入“Flash 讀停止?fàn)顟B(tài)”。
Flash 讀取控制狀態(tài)機(jī)每次讀完兩組配置碼后,F(xiàn)lash 讀指針自動(dòng)累加,當(dāng)該指針累加到一定閾值后,F(xiàn)lash 中所有配置碼被讀取完畢,并完成了一個(gè)擦寫(xiě)配置周期,此時(shí)需要重新初始化Flash 讀操作,擦寫(xiě)配置次數(shù)計(jì)數(shù)器自動(dòng)累加,開(kāi)始一個(gè)新的配置周期。如果擦寫(xiě)配置次數(shù)計(jì)數(shù)器累加到預(yù)先設(shè)定值,擦寫(xiě)實(shí)驗(yàn)結(jié)束。
JTAG 接口控制狀態(tài)機(jī)采用25 MHz 的基準(zhǔn)時(shí)鐘,每組配置碼如果沒(méi)有額外的重復(fù)要求將保持10 個(gè)基準(zhǔn)時(shí)鐘周期,TCK 時(shí)鐘信號(hào)需要通過(guò)兩個(gè)配置碼(一個(gè)高電平,一個(gè)低電平)拼接得到,因此,CPLD 的擦寫(xiě)時(shí)鐘TCK 頻率約為1.25 MHz。
實(shí)際硬件尺寸較大,從主控制FPGA 出來(lái)的信號(hào)需要經(jīng)過(guò)長(zhǎng)線才能到達(dá)CPLD 的JTAG 接口,因此擦寫(xiě)時(shí)鐘TCK 頻率控制在1 MHz 左右。相對(duì)較低的速率加上等長(zhǎng)線控制可以保證配置過(guò)程穩(wěn)定可靠[13]。
單套擦寫(xiě)驗(yàn)證裝置實(shí)物如圖4 所示,一套裝置包含14 個(gè)驗(yàn)證工位,所有工位并行工作??梢园凑招枨笾谱鞫嗵紫到y(tǒng)以提高CPLD 的篩選效率。
圖4 單套擦寫(xiě)驗(yàn)證裝置實(shí)物
配置時(shí)序如圖5 所示。圖5(a)表明,單組配置碼配置時(shí)間約為1.5 s,循環(huán)配置周期約為4 s。通過(guò)控制程序可以自動(dòng)進(jìn)行10 000 次的擦寫(xiě)壽命驗(yàn)證,整個(gè)過(guò)程大約需要5.6 h。從圖5(b)中可以看出,TCK 時(shí)鐘頻率為1.137 MHz,與設(shè)計(jì)值1.25 MHz 接近,只有約10%的誤差。
圖5 配置時(shí)序
與集成開(kāi)發(fā)環(huán)境提供的配置機(jī)制對(duì)比,本裝置不具備校驗(yàn)及回讀功能,但在一定范圍內(nèi)可以通過(guò)控制程序改變TCK 時(shí)鐘頻率。
對(duì)同一個(gè)功能驗(yàn)證工程文件,分別采用擦寫(xiě)壽命驗(yàn)證裝置及集成開(kāi)發(fā)工具對(duì)CPLD 進(jìn)行配置,然后進(jìn)行功能對(duì)比驗(yàn)證,兩種配置方式均可以使CPLD 正常工作,邏輯功能一致。
本文闡述了一種CPLD 擦寫(xiě)壽命驗(yàn)證裝置的設(shè)計(jì),主要包括兩個(gè)關(guān)鍵環(huán)節(jié),第一是準(zhǔn)備配置碼文件,第二是具體方案實(shí)現(xiàn)。實(shí)際使用效果表明,該裝置可用于CPLD 在篩選、考核階段進(jìn)行擦寫(xiě)壽命特性驗(yàn)證,且可以根據(jù)需要制作多套裝置,多套裝置并行工作,每套裝置內(nèi)的不同工位并行擦寫(xiě)驗(yàn)證,提高了驗(yàn)證效率。