Xilinx 7系FPGA bank的io單元如下:
Hr bank比hp bank少odelaye2組件,兩者的idelaye2組件后面,都有iserdese2組件;
iserdese2組件是一種專用的串并轉換器或稱解串器,用于高速源同步應用,如大部分LVDS信號解析就屬于高速源同步應用;
組件是專用的解串器,避免了fpga邏輯實現,支持單數據數率SDR和雙數據速率DDR模式;
SDR模式下,支持2/3/4/5/6/7/8位寬并行轉換;
DDR模式下,支持4/6/8位寬并行轉換;
使用兩個級聯的iserdese2時,還可以生成10/14位寬的并行轉換;
組件還包含Bitslip子模塊,bitslip可以讓用戶重新排序拼接并行數據流,方便接收數據的訓練和檢測調整;
? 原語框圖:
左側輸入管腳,右側輸出,
? 原語例化:
ISERDESE2 #(
.DATA_RATE(“DDR”), // DDR, SDR
.DATA_WIDTH(4), // Parallel data width (2-8,10,14)
.DYN_CLKDIV_INV_EN(“FALSE”), // Enable DYNCLKDIVINVSEL inversion (FALSE, TRUE)
.DYN_CLK_INV_EN(“FALSE”), // Enable DYNCLKINVSEL inversion (FALSE, TRUE)
// INIT_Q1 - INIT_Q4: Initial value on the Q outputs (0/1)
.INIT_Q1(1’b0),
.INIT_Q2(1’b0),
.INIT_Q3(1’b0),
.INIT_Q4(1’b0),
.INTERFACE_TYPE(“MEMORY”), // MEMORY, MEMORY_DDR3, MEMORY_QDR, NETWORKING, OVERSAMPLE
.IOBDELAY(“NONE”), // NONE, BOTH, IBUF, IFD
.NUM_CE(2), // Number of clock enables (1,2)
.OFB_USED(“FALSE”), // Select OFB path (FALSE, TRUE)
.SERDES_MODE(“MASTER”), // MASTER, SLAVE
// SRVAL_Q1 - SRVAL_Q4: Q output values when SR is used (0/1)
.SRVAL_Q1(1’b0),
.SRVAL_Q2(1’b0),
.SRVAL_Q3(1’b0),
.SRVAL_Q4(1’b0)
)
ISERDESE2_inst (
.O(O), // 1-bit output: Combinatorial output
// Q1 - Q8: 1-bit (each) output: Registered data outputs
.Q1(Q1),
.Q2(Q2),
.Q3(Q3),
.Q4(Q4),
.Q5(Q5),
.Q6(Q6),
.Q7(Q7),
.Q8(Q8),
// SHIFTOUT1, SHIFTOUT2: 1-bit (each) output: Data width expansion output ports
.SHIFTOUT1(SHIFTOUT1),
.SHIFTOUT2(SHIFTOUT2),
.BITSLIP(BITSLIP), // 1-bit input: The BITSLIP pin performs a Bitslip operation synchronous to
// CLKDIV when asserted (active High). Subsequently, the data seen on the Q1
// to Q8 output ports will shift, as in a barrel-shifter operation, one
// position every time Bitslip is invoked (DDR operation is different from
// SDR).
// CE1, CE2: 1-bit (each) input: Data register clock enable inputs
.CE1(CE1),
.CE2(CE2),
.CLKDIVP(CLKDIVP), // 1-bit input: TBD
// Clocks: 1-bit (each) input: ISERDESE2 clock input ports
.CLK(CLK), // 1-bit input: High-speed clock
.CLKB(CLKB), // 1-bit input: High-speed secondary clock
.CLKDIV(CLKDIV), // 1-bit input: Divided clock
.OCLK(OCLK), // 1-bit input: High speed output clock used when INTERFACE_TYPE=“MEMORY”
// Dynamic Clock Inversions: 1-bit (each) input: Dynamic clock inversion pins to switch clock polarity
.DYNCLKDIVSEL(DYNCLKDIVSEL), // 1-bit input: Dynamic CLKDIV inversion
.DYNCLKSEL(DYNCLKSEL), // 1-bit input: Dynamic CLK/CLKB inversion
// Input Data: 1-bit (each) input: ISERDESE2 data input ports
.D(D), // 1-bit input: Data input
.DDLY(DDLY), // 1-bit input: Serial data from IDELAYE2
.OFB(OFB), // 1-bit input: Data feedback from OSERDESE2
.OCLKB(OCLKB), // 1-bit input: High speed negative edge output clock
.RST(RST), // 1-bit input: Active high asynchronous reset
// SHIFTIN1, SHIFTIN2: 1-bit (each) input: Data width expansion input ports
.SHIFTIN1(SHIFTIN1),
.SHIFTIN2(SHIFTIN2)
);
? ISERDESE2端口介紹:
端口O:
1bit,組合輸出,該端口為組件未經過寄存器的輸出,可以直接來自輸入D端口或DDLY端口,從組件的框圖可以看出O端口的產生結構,來自一個由OFB、DDLY、D端口輸入的IOB多路復用器的輸出,沒有經過ISERDESE2的組件;
端口Q1~Q8:
iserdese2組件的8bit寄存器輸出,1個組件最多支持1:8的串轉并,大于8位僅在DDR模式下支持,且最大14bit;
一個并行數據的最先輸入的1個bit數據,將會出現在最高位的Q8上;
上圖是OSERDESE2和ISERDESE2組件的輸入輸出順序,
可以看到,OSERDESE2輸出端位序與ISERDESE2輸入端的位序相反,OSERDESE2輸入一個D1~D8,對應ABCDEFGH的數據,輸出時,按D1到D8,也就是A到H的并行數據種低位先發的順序發送數據,
而在ISERDESE2中,先接收到的A放入了最高位Q8,最后接收到的H放入了Q1。
端口SHIFTOUT1、SHIFTOUT2、SHIFTIN1、SHIFTIN2:
想要實現大于8bit的并行轉換,需要兩個ISERDESE2級聯,shift接口用于寬度擴展時ISERDESE2級聯,后續仿真時詳細講解位寬擴展結構;
端口BITSLIP:
1bit,高電平有效時執行位滑動操作,與CLKDIV同步;執行后Q1~Q8的輸出接口上數據將移動一個bit數據,后續仿真時詳細講解位滑動操作;
端口RST:
高電平有效復位,復位有效時,大部分組件內部觸發器將被異步驅動為低,除了Q1Q4這4個接口,因為這4個輸出接口復位時驅動的值由參數INIT_Q1 INIT_Q4設置;當把復位信號與CLKDIV同步取消置位,內部邏輯會把取消置位重新定為第一個CLK上升沿,多個ISERDESE2組件的復位信號應該使用同一個復位信號,復位信號需至少保持兩個CLKDIV時鐘周期,且復位取消后兩個CLKDIV時鐘周期后輸出數據才有效;
端口CLK:
高速時鐘輸入,該時鐘應該與高速串行輸入數據同步;
端口CLKB:
高速次級時鐘對輸入串行數據流進行同步;當INTERFACE_TYPE設置為除MEMORY_QDR的模式下,CLKB與CLK反相,在MEMORY_QDR模式下,CLKB連接到特定相位偏移的時鐘;
端口CLKDIV:
分頻時鐘輸入,通常是CLK的分頻版本,該時鐘與組件輸出的并行數據Q1~Q8同步,還與CE模塊,Bitslip子模塊同步,其頻率取決于解串行化的寬度;
端口CLKDIVP:
只在使用MIG工具,也就是DDR控制器時使用該端口,其他模式將其置0;
端口CE1、CE2:
都是時鐘使能輸入端口,內部有一個輸入時鐘使能模塊:
可以看到模塊中,有CE1和CE2時鐘使能輸入,
當NUM_CE=1(NUM_CE為組件例化參數)時,不使用CE2輸入,CE1輸入是直接連接到ISERDESE2中輸入寄存器的高有效時鐘使能信號;
當NUM_CE=2時,同時使用CE1和CE2輸入,CE1在CLKDIV周期的一半啟用ISERDESE2,CE2在另一半啟用ISERDESE2。
端口OCLK、OCLKB:
高速時鐘輸入,用于基于選通的存儲器接口和過采樣模式,當INTERFACE_TYPE設置為為NETWORKING時不使用OCLK;OCLK可用于將基于選通的存儲器數據傳輸到自由運行的時鐘域,不適用存儲器模式時,端口不使用,OCLKB為OCLK反相時鐘;
端口D:
高速串行數據輸入端口,僅與IOB配合使用,數據來自IOB;
端口DDLY:
高速串行數據輸入端口,僅與IDELAYE2配合使用,輸入的數據來自IDLEAYE2延時后的輸出;
端口OFB:
OFB端口用于將OSERDESE2上傳輸的數據反饋回ISERDESE2,且同時需要將參數OFB_USED設置為TRUE,且OSERDESE2和ISERDESE2的DATA_RATE和DATA_WIDTH需要設置相同;
端口DYNCLKDIVSEL、DYNCLKSEL:
DYNCLKDIVSEL置1且DYN_CLKDIV_INV_EN設置TRUE時,CLKDIV反轉相位;DYNCLKSEL置1且DYN_CLK_INV_EN設置為TRUE時,CLK和CLKB反轉相位;且該操作僅在MEMORY_DDR3和MEMORY_QDR模式下受支持;
例化參數和其他細節下一節講解;
本文章由威三學社出品
對課程感興趣可以私信聯系