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模式下受支持;
例化参数和其他细节下一节讲解;
本文章由威三学社出品
对课程感兴趣可以私信联系