用Xilinx FPGA产生高频差分时钟输出
时间:10-02
整理:3721RD
点击:
以下程序是我用来产生一对800M差分时钟对输出的verilog程序,编译无错误提示,但Place&Route出现错误,望给与指正,非常感谢!
module top(
input clk,
input rst,
output O,
output OB
);
wire CLK_160M,CLK_160M_to;
wire CLK_800M;
wire LOCKED;
wire LOCK;
wire tx_SERDESSTROBE;
wire CLK_OUT;
my_pll my_pll_ins
(// Clock in ports
.CLK_IN1(clk), // IN
// Clock out ports
.CLK_160M(CLK_160M), // OUT
.CLK_800M(CLK_800M), // OUT
// Status and control signals
.LOCKED(LOCKED)
); // OUT
BUFG BUFG_inst (
.O(CLK_160M_to), // 1-bit output: Clock buffer output
.I(CLK_160M) // 1-bit input: Clock buffer input
);
BUFPLL #(
.divIDE(5)
)
tx_bufpll_inst(
.IOCLK(CLK_OUT),
//OUTPUT
.LOCKED(LOCKED),
//IN
.LOCK(LOCK),
//OUTPUT
.PLLIN(CLK_800M), //IN
.GCLK(CLK_160M_to), //IN
.SERDESSTROBE(tx_SERDESSTROBE)//OUTPUT
);
OBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(CLK_OUT) // Buffer input
);
module top(
input clk,
input rst,
output O,
output OB
);
wire CLK_160M,CLK_160M_to;
wire CLK_800M;
wire LOCKED;
wire LOCK;
wire tx_SERDESSTROBE;
wire CLK_OUT;
my_pll my_pll_ins
(// Clock in ports
.CLK_IN1(clk), // IN
// Clock out ports
.CLK_160M(CLK_160M), // OUT
.CLK_800M(CLK_800M), // OUT
// Status and control signals
.LOCKED(LOCKED)
); // OUT
BUFG BUFG_inst (
.O(CLK_160M_to), // 1-bit output: Clock buffer output
.I(CLK_160M) // 1-bit input: Clock buffer input
);
BUFPLL #(
.divIDE(5)
)
tx_bufpll_inst(
.IOCLK(CLK_OUT),
//OUTPUT
.LOCKED(LOCKED),
//IN
.LOCK(LOCK),
//OUTPUT
.PLLIN(CLK_800M), //IN
.GCLK(CLK_160M_to), //IN
.SERDESSTROBE(tx_SERDESSTROBE)//OUTPUT
);
OBUFDS #(
.IOSTANDARD("DEFAULT") // Specify the output I/O standard
) OBUFDS_inst (
.O(O), // Diff_p output (connect directly to top-level port)
.OB(OB), // Diff_n output (connect directly to top-level port)
.I(CLK_OUT) // Buffer input
);
Xilinx的时钟信号如果要从芯片输出,必须用ODDR或者OSERDES,直接输出到管脚是不行的。
多谢了
