目录
1.前言
2.ISERDESE2原语介绍
3.原语例化
4.ISERDESE2框图
5. ISERDESE2端口信号
5.1时钟接口
5.2并行数据输出
5.3 数据输出选择
5.4级联接口
6.数据对齐操作
1.前言
本文仅对UG471 第3章《Advanced SelectIO Logic Resources》部分进行翻译和学习解读。
其他部分,后续补充。
水平所限,有不足之处,欢迎拍砖。
2.ISERDESE2原语介绍
SERDESE2是专用的串并转换器,它在完成串并转换时并不会带来多余的时序上的问题,从而很适合应用到高速源同步应用中。比如摄像头数据。
- 专用解串器/串并转换器
它可以完成高速数据传输同时不需要FPGA端匹配数据频率,这个转换器支持SDR(single data rate)和DDR(double data rate)。SDR模式支持2-,3-,4-,5-,6-,7-,8bit位宽;DDR模式支持4-,6-,8-bit位宽。10或14-bit需要两个级联。
- Bitslip 子模块
该子模块可以使设计者重新排列输入的并行数据。可用于源同步tranining。
- 对strobe-based 类型存储接口的专用支持
- 对networking接口的专用支持
- 对DDR3接口的专用支持
- 对QDR接口的专用支持
- 对异步接口的专用支持
3.原语例化
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 // 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) );
4.ISERDESE2框图
- 串行输入: 即串行数据输入(D: 与IOB相连, DDLY来源于IDELAYE2原语的输出)
- 时钟接口:包含高速时钟CLK ,分频时钟CLKDIV等;
- 数据对齐模块:Bitslip,用于源同步,重新排列输入的并行数据;
- 组合输出O:O输出不寄存,根据参数配置输出D / DDLY;
- 级联接口:1个ISERDESE2最大位宽为8位,想要实现10-,14bit的数据,就需要级联两个ISERDESE2;
- 并行数据输出:Q1-Q8
5. ISERDESE2端口信号
端口名称 | I/O | 位宽 | 描述 |
Q1-Q8 | O | 1(each) | 并行数据输出;注意输出顺序与输入顺序相反;后文细讲 |
O | O | 1 | 组合输出,后文细讲 |
SHIFTOUT1 | O | 1 | 扩展位宽,级联接口 |
SHIFTOUT2 | O | 1 | 扩展位宽,级联接口 |
D | I | 1 | IOB串行数据输入 |
DDLY | I | 1 | 来自IDELAYE2的串行数据输入 |
CLK | I | 1 | 高速时钟输入 |
CLKB | I | 1 | 只用于“MEMORY_QDR”模式,其余模式CLKB=~CLK |
CE1,CE2 | I | 1 | 时钟使能输入,根据参数NUM_CE确定 |
RST | I | 1 | 复位,高有效 |
CLKDIV | I | 1 | 低速时钟,用于数据对齐等模块 |
CLKDIVP | I | 1 | 只用于“MEMORY_DDR3”模式,其余模式接地 |
OCLK | I | 1 | 用于时钟域转换,与CLK资源共享,“NETWORKING”模式不使用 |
OCLKB | I | 1 | 与OSERDESE2的CLKB资源共享 |
BITSLIP | I | 1 | 用于数据对齐操作,后文重点讲解 |
SHIFTIN1 | I | 1 | 扩展位宽,级联接口 |
SHIFTIN2 | I | 1 | 扩展位宽,级联接口 |
OFB | I | 1 | OLOGICE2输出的的反馈输入 |
DYNCLKDIVSEL | I | 1 | 动态时钟输入选择,一般不用 |
DYNCLKSEL | I | 1 | 动态时钟输入选择,一般不用 |
重点关注标黄的信号 |
有些地方可能翻译的不是很准确,附上手册原文。
5.1时钟接口
提供ISERDESE2工作的高速源同步串行时钟,并行数据获取时钟和控制时钟。
5.2并行数据输出
输入输出的顺序相反,具体见下图:
当输入D1为A,输出Q8为A
5.3 数据输出选择
根据IOBDELAY参数设置的不同,组合输出O与寄存输出Q1-Q8的输出选择:
D 、 DDLY 的意思前文已讲过,不再重复。
5.4级联接口
该接口用于实现DDR模式下,位宽扩展为10bit,14bit;
通过级联接口与另外一个ISERDESE2相接;
6.数据对齐操作
SDR Mode:
输出每次左移1位;当8次操作后,恢复到最初状态;
DDR Mode:
输出交替进行右移1位和左移3位操作,当8次操作后,恢复到最初状态;
注意:
- 同步于CLKDIV时钟,本小节所说的时钟周期特指CLKDIV时钟周期
- 在“NETWORKING”模式下使用
- 类似于一个桶式移位”Barrel_Shifter”
- bitslip只能拉高1个clkdiv时钟周期
- bitslip两次拉高之间必须间隔至少一个时钟周期;
- 用户逻辑需等待最少2个clkdiv时钟周期(SDR模式)/3个时钟周期(DDR)后,数据移位才能完成。
-----------------------------2021-10-26晚10:00. 洗洗睡了,未完待续