概述
先抛出几个问题:
1.什么是 IDDR? IDDR的作用是什么?使用场景?
2. IDDR结构是什么样?都有哪些端口?端口属性都是什么?
3. IDDR原语结构,参数属性说明?
4. IDDR时序是什么样 ?
1.什么是 IDDR, IDDR的作用是什么,使用场景
IDDR全称 input double date rate,可以将双沿(时钟的上升沿、下降沿)数据信号转换为单沿数据信号,通常使用在串转并数据设计中,如网口的RGMII信号转换为GMII信号
2. IDDR结构是什么样,都有哪些端口,端口属性都是什么
端口说明:
C:同步时钟输入端口
CE:时钟使能端口,高电平有效
D:双沿数据输入端口
S/R:置位复位管脚
Q1:C端口上升沿数据
Q2:C端口下降沿数据
3.IDDR原语结构,参数属性说明
原语结构:
IDDR #(
.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE"
// or "SAME_EDGE_PIPELINED"
.INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
.INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
.SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC"
) IDDR_inst (
.Q1(Q1), // 1-bit output for positive edge of clock
.Q2(Q2), // 1-bit output for negative edge of clock
.C(C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D(D), // 1-bit DDR data input
.R(R), // 1-bit reset
.S(S) // 1-bit set
);
参数属性说明:
DDR_CLK_EDGE:设置IDDR相对于时钟端口的边沿工作模式,共三种模式,在第4小节会具体说明;
INIT_Q1/ INIT_Q2设置Q1、Q2端口初始值;
SRTYPE:设置置/复位异步或者同步,默认异步
4.IDDR时序是什么样
IDDR有三种采集模式,在原语中由DDR_CLK_EDGE参数进行设置,分别为“OPPOSITE_EDGE”、“SAME_EDGE”和“SAME_EDGE_PIPELINED”模式。
OPPOSITE_EDGE模式的时序图如下图所示,Q1端在时钟的上升沿更新,Q2端在时钟的下降沿更新,更准确地来说在时钟的上升沿Q1端数据稳定,在在时钟的下降沿Q2端数据稳定。
SAME_EDGE模式的时序图如下图所示,Q1端、Q2端都在时钟的上升沿更新,但D0和D1出现相差一个时钟。
SAME_EDGE_PIPELINED模式的时序图如下图所示,Q1端、Q2端都在时钟的上升沿更新,但D0和D1出现在同一个时钟。
一般情况使用第三种SAME_EDGE_PIPELINED模式,不需要考虑多余的时钟延迟就能直接使用串转并后的数据。
5.几点思考:
1.在FPGA中,经常出现的问题就是时钟和数据的对齐,这个问题的原因有很多,比如器件差异、PCB走线等等,那么在使用IDDR时如何校正这一块就是一个难题,通常可以采用修改时钟相位偏移来解决,比如使用FPGA 内侧的时钟资源进行相位偏移,或者IOLOGIC侧IODELAY原语进行延迟等,本质上都是为了使得时钟与数据的对齐;
2.有IDDR就会有ODDR,比如网口中通过ODDR将GMII转化为RGMII,在下一篇继续阐述;
最后
以上就是顺心棒棒糖为你收集整理的FPGA结构分析——IDDR,网口储备点1的全部内容,希望文章能够帮你解决FPGA结构分析——IDDR,网口储备点1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复