王 賀 張大宇 汪 悅 張 松
(中國空間技術研究院 北京 100094)
FPGA器件具有高性能、低成本、資源豐富、可重復編程等優點,利用FPGA片上資源設計DDR(Double Data Rate)控制器來實現雙倍速率數據傳輸控制,是高速通信、數據壓縮與信號處理等領域中的常用方法。DDR控制器一般通過FPGA片上的專用DDR模塊和部分通用可編程資源實現,其中DDR模塊是實現雙倍速率數據傳輸的關鍵電路。傳統的DDR模塊測試方法是通過FPGA的IO端口對每個DDR模塊分別施加測試向量并輸出測試結果,因此需要使用大量的測試通道資源,對測試儀器的硬件配置要求較高。
Loopback是高速SERDES(串行器/解串器)電路測試中的常用技術,其原理是將SERDES的輸出端口與輸入端口短接形成反饋回路[11],以實現高速信號的自發自收測試(如圖1所示)。
從實現方式上看,Loopback分為片外的Loopback與片上的loopback兩種形式。其中片外Loopback需要通過測試 DIB(Device Interface Board)硬件上的物理線路實現Loopback環路(圖1中實線)[13]。相比而言,片上Loopback對DIB硬件設計幾乎沒有要求,但需要電路在設計時內部預留了Loopback環路(圖1中虛線)[12]。
IOB電路是FPGA上的雙向可編程IO端口模塊,其信號傳輸方向可通過程序進行控制。利用IOB中的IOBUF可以構建DDR模塊的片上Loopback環路,將大量DDR模塊在FPGA器件內部串聯成鏈進行測試,從而有效減少測試所需配置次數及IO通道數量。
DDR模塊位于Virtex FPGA的Select IO資源中,數量與FPGA的IO端口數量相同,每個DDR模塊包括IDDR與ODDR兩部分[2]。
IDDR是用于FPGA輸入的雙倍數據速率模塊,其原語的原理圖如圖2所示[3]。

圖2 IDDR原語原理圖
對于IDDR模塊端口功能的說明如表1所示。

表1 IDDR端口功能說明
為適應不同應用接口需求,IDDR模塊支持三種工作模式,分別是反相模式(OPPOSITE_EDGE),同相模式(SAME_EDGE)與流水線模式(SAME_EDGE_PIPELINED),三種模式的主要區別在于Q1、Q2端口輸出數據的時序存在一定差異。其中,OPPOSITE_EDGE模式是在時鐘C的上升沿與下降沿分別進行數據采樣,輸出信號Q1與Q2與時鐘C的上升沿與下降沿同步變化;SAME_EDGE模式則通過增加額外的下降沿采樣觸發器將Q1、Q2的輸出都與時鐘C的上升沿同步起來,但Q1、Q2之間存在一個時鐘周期的相位差;SAME_EDGE_PIPELINED則通過增加額外的流水線寄存器將Q1、Q2的數據輸出進行同步,且都對應于時鐘C的上升沿[5]。
IDDR模塊3種工作模式的具體時序差異如圖3所示。

圖3 IDDR三種模式功能示意圖
ODDR(Output DDR)是用于FPGA輸出的雙倍數據速率模塊,其原語的原理圖如圖4所示。

圖4 ODDR原語的原理圖
對于ODDR模塊端口功能的說明如表2所示。

表2 ODDR端口功能說明
與IDDR模塊不同,ODDR模塊僅支持反相(OPPOSITE_EDGE)與同相模式(SAME_EDGE)2種工作模式,具體輸出信號時序特點與IDDR類似,如圖5所示。

圖5 ODDR兩種模式功能示意圖
傳統的DDR模塊一般采用并行測試結構,如圖6所示[15]。

圖6 并行測試方案
并行測試電路的特點是對每一個IO端口的DDR模塊功能分別進行檢測,代價是需要使用大量的測試儀通道來覆蓋FPGA的全部IO端口。此外,IDDR模塊測試需要使用2倍于被測DDR模塊數量的FPGA IO來輸出測試結果(Q1[0..n]、Q2[0..n]),造成每次配置只能完成不足1/3的IDDR模塊測試。
以具有850個IO的某Virtex FPGA為例[4],覆蓋IDDR與ODDR的全部工作模式測試需要850個測試通道并進行至少16次配置[10],具體分布如表3所示。

表3 某FPGA DDR測試所需配置數量
從功能上看,DDR模塊實際等價于簡化的SERDES電路,其中ODDR相當于2并1的串行器,IDDR相當于1分2的解串器,因此可以將ODDR與IDDR組合起來按照Loopback的思路進行測試。但是,由于ODDR的輸出與IDDR的輸入端口在物理上不存在可編程互聯線路,因此無法在HDL程序設計時直接連接,必須借助IOB模塊來實現Loopback。

圖7 IOB基本結構
某Virtex系列FPGA的IOB模塊基本結構如圖7所示,其中輸入端口O與ODDR的輸出Q相連,輸出端口I與IDDR的輸入D相連。因此,通過圖7中加粗的線路(包括2兩個驅動器IBUF與OBUF)可以實現ODDR與IDDR的片上Loopback環路。

圖8 片上Loopback測試電路結構
基于IOB構建的DDR模塊片上Loopback串行測試電路結構如圖8所示,對其說明如下:
1)串聯測試線路由“位于鏈首的Din端口IDDR、位于鏈中的n個Select IO和位于鏈尾的Dout端口ODDR”組成,串接的Select IO數量由具體器件的封裝引腳數量決定;
2)每個Select IO內部形成一條Loopback環路,n個Select IO在FPGA內部串聯成鏈,上一級Select IO IDDR的兩個輸出端口(Q1[i]和Q2[i])連到下一個Select IO ODDR的對應輸入端口上;
3)全部IDDR與ODDR模塊的時鐘clk_iddr、clk_oddr、使能CE、復位R(或置位S)由FPGA IO統一提供,Din與Dout各占用一個IO端口。
4)每條片上Loopback串行測試鏈路需要6個FPGA IO作為測試輔助端口,覆蓋全部DDR模塊至少需要12個FPGA IO并進行6次配置[8],如表4所示(仍以850個IO的Virtex FPGA為例)。

表4 某FPGA DDR測試所需配置數量
由于Loopback串行測試電路交叉使用了IDDR與ODDR兩種模塊,因此每個測試電路都需要進行3次配置,以覆蓋IDDR與ODDR的不同工作模式,具體組合方式按表5進行。

表5 串行測試組合方案
由于IDDR的SAME_EDGE與SAME_EDGE_PIPELINED兩種模式僅在Q1端口輸出信號上相差一個時鐘周期,因此在進行SAME_EDGE(分組3)測試時,可以將圖8測試電路中的IDDR與ODDR之間插入一個D觸發器(如圖9所示,其中IDDR與DFF共用時鐘信號),這樣就可將其轉化為SAME_EDGE_PIPELINED(分組2)模式進行測試。

圖9 IDDR SAME_EDGE測試電路
綜合分析圖8串行Loopback測試電路結構與表5中DDR模塊工作模式組合可以得出:
1)圖8測試電路的輸出Dout應落后輸入Din n個信號傳遞周期,并在第n+1個信號傳遞周期的clk_oddr上升沿開始變化,其中n為測試電路中串聯的Select IO數量。
2)表5分組1(OPPOSITE_EDGE模式)的每個信號傳遞周期由1個clk_iddr脈沖與1個clk_oddr脈沖組成;分組2(SAME_EDGE_PIPELINED模式)的每個信號傳遞周期由2個clk_iddr脈沖與1個clk_oddr脈沖組成;分組3按圖9設計后功能同分組2。
為便于分析,仿真中設定測試電路中串接的Select IO數量為10,分組1仿真波形如圖10所示;分組2、3仿真波形如圖11所示[6]。從波形狀態可以看出,仿真結果與設計功能一致。

圖10 OPPOSITE_EDGE模式仿真波形

圖11 SAME_EDGE_PIPELINED模式仿真波形
DDR模塊測試需要對FPGA進行6次配置,為提高效率,本文基于ATE搭建自動化測試平臺,ATE型號為美國Teradyne的UltraFLEX系統[7]。
基于ATE的FPGA自動化測試包括位流配置與功能測試兩部分,分別需要使用配置向量與測試向量[14]。其中測試向量可以參考圖10與圖11仿真波形編寫,配置向量則需要通過軟件轉換產生,具體方法如下[9]:
UltraFLEX系統使用“*.pat”格式的二進制向量文件,它是由“*.atp”格式的文本向量文件經Pattern Complier軟件編譯后產生,而“*.atp”文件可由ISE軟件生成的“*.rbt”文本位流文件經轉換后得到。

圖12 rbt位流文件
“*.rbt”位流文件內容如圖12所示,從第8行開始為FPGA有效配置位流,每行由32個數據組成,對應SelectMap x32的數據總線D[31:0],但順序并非按從高到低排列,而是以字節為單位按從低到高順序排列,因此需要按Xilinx配置指南中要求進行“Bit定序”轉換后才能使用[1],轉換方法如表6所示。

表6 Bit定序對應關系(SelectMap x32)
此外,“*.rbt”文件中只提供了SelectMap配置所需的數據總線信號,用于ATE配置還需在向量文件中補充必要的控制信號(CCLK、CSI_B、PROGRAM_B與RDWR_B)及TimeSet信息。最終轉換出的“*.atp”向量文件如圖13所示。

圖13 atp向量文件
本文利用FPGA IOB中的IOBUF資源構建了測試環路,設計了一種結構簡潔、占用資源少、便于移植的DDR模塊片上Loopback串行測試方法,并在ATE上進行了測試驗證。與傳統并行測試方法相比,本文所述方法僅需使用12路測試儀通道與FPGA IO端口,同時將覆蓋全部DDR模塊測試所需的配置次數從16次減少到6次,可用于Virtex系列或其他類似結構FPGA的DDR模塊測試。