XILINX 7series/ultrascale IDDR/ODDR使用区别

时间:2024-04-14 11:54:22

概述

今天基于U7s基带板的进行9174接口编写,根据需求规划时钟和DAC配置,目前实现时钟部分下板测试,由于FPGA换为XILINX KU系列,所以在使用原语的时候需要注意区别,简单记录如下。

7 series FPGA

1. buff

单端缓冲器:
IBUF 输入缓冲器
IBUF_IBUFDISABLE 带使能的输入缓冲器
IBUFG 时钟输入缓冲器
IOBUF 双向buffer
IOBUF_DCIEN 带DCI使能和EN使能的双向缓冲器
OBUF 输出缓冲器
OBUFT 三态输出缓冲
差分缓冲器:
IBUFDS 差分输入缓冲器,单端输出
IBUFDS_DIFF_OUT 差分输入,差分输出。
IBUFDS_IBUFDISABLE 带使能的差分输入缓冲器
IBUFGDS 差分时钟输入缓冲
IBUFGDS_DIFF_OUT 差分时钟输入,差分时钟输出。
IOBUFDS and so on…

2.DDR

IDDR:
XILINX 7series/ultrascale IDDR/ODDR使用区别
IDDRE1 #(
.DDR_CLK_EDGE(“OPPOSITE_EDGE”), // IDDRE1 mode (OPPOSITE_EDGE, SAME_EDGE, SAME_EDGE_PIPELINED)
.IS_CB_INVERTED(1’b0), // Optional inversion for CB
.IS_C_INVERTED(1’b0) // Optional inversion for C
)
IDDRE1_inst (
.Q1(Q1), // 1-bit output: Registered parallel output 1
.Q2(Q2), // 1-bit output: Registered parallel output 2
.C( C), // 1-bit input: High-speed clock
.CB(CB), // 1-bit input: Inversion of High-speed clock C
.D(D), // 1-bit input: Serial Data Input
.R( R) // 1-bit input: Active High Async Reset
);

ODDR
XILINX 7series/ultrascale IDDR/ODDR使用区别
ODDR #(
.DDR_CLK_EDGE(“OPPOSITE_EDGE”), // “OPPOSITE_EDGE” or “SAME_EDGE”
.INIT(1’b0), // Initial value of Q: 1’b0 or 1’b1
.SRTYPE(“SYNC”) // Set/Reset type: “SYNC” or “ASYNC”
) ODDR_inst (
.Q(Q), // 1-bit DDR output
.C( C), // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D1(D1), // 1-bit data input (positive edge)
.D2(D2), // 1-bit data input (negative edge)
.R( R), // 1-bit reset
.S(S) // 1-bit set
);

Ultrascale FPGA

1.BUFF:同ultrascale系列

2.DDR

IDDR:
XILINX 7series/ultrascale IDDR/ODDR使用区别
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©, // 1-bit clock input
.CE(CE), // 1-bit clock enable input
.D(D), // 1-bit DDR data input
.R®, // 1-bit reset
.S(S) // 1-bit set
);

ODDR:
XILINX 7series/ultrascale IDDR/ODDR使用区别

ODDRE1 #(
.IS_C_INVERTED(1’b0), // Optional inversion for C
.IS_D1_INVERTED(1’b0), // Unsupported, do not use
.IS_D2_INVERTED(1’b0), // Unsupported, do not use
.SIM_DEVICE(“ULTRASCALE”), // Set the device version (ULTRASCALE, ULTRASCALE_PLUS, ULTRASCALE_PLUS_ES1,
// ULTRASCALE_PLUS_ES2, VERSAL, VERSAL_ES1, VERSAL_ES2)
.SRVAL(1’b0) // Initializes the ODDRE1 Flip-Flops to the specified value (1’b0, 1’b1)
)
ODDRE1_inst (
.Q(Q), // 1-bit output: Data output to IOB
.C( C), // 1-bit input: High-speed clock input
.D1(D1), // 1-bit input: Parallel data input 1
.D2(D2), // 1-bit input: Parallel data input 2
.SR(SR) // 1-bit input: Active High Async Reset
);

参考文档
https://china.xilinx.com/support/documentation/user_guides/ug571-ultrascale-selectio.pdf
https://china.xilinx.com/support/documentation/user_guides/ug471_7Series_SelectIO.pdf