1、kc705_user_guider里面可以找到各个bank的xdc的约束命令,如何去接端口。

2、kc705的7series_hdl可以找到各种原语的介绍,以及verilog的例化模板。当然,vivado中tools下面的Language Templates也可以找到。

3、kc705的schematic是k7芯片的I/O端口。

4、OBUFDS原语必须要配合ODDR原语的使用,OODR分为上下降沿进行采样,上升沿对D1采样,下降沿对D2采样,拼成一个时钟周期(上板可能会有时延)。输出的信号给OBUFDS,在实现一个单端转为双端差分信号。

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
);

// End of ODDR_inst instantiation

测试代码:

module test_oddr(
    input clk,
    input CE,
    input D1,
    input D2,
    input reset,
    output Q
    );
    
ODDR #(
   .DDR_CLK_EDGE("SAME_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(clk),   // 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(reset),   // 1-bit reset
   .S(1'b0)    // 1-bit set
);

// End of ODDR_inst instantiation
endmodule

tb:

module test();
reg clk;
reg CE;
reg D1;
reg D2;
reg reset;
wire Q;

initial begin
reset=1;
#10;
reset=0;
end

initial begin
clk=0;
forever#20 clk=~clk;
end

initial begin
CE=0;
#20;
CE=1;
end

initial begin
D1=0;
D2=1;
#40;
D1=1;
D2=0;
#40;
D1=0;
D2=1;
#40;
D1=1;
D2=0;
#40;
D1=0;
D2=1;
#40;
D1=1;
D2=0;
#40;
D1=0;
D2=1;
#40;
D1=1;
D2=0;
#40;
D1=0;
D2=1;
#40;
D1=1;
D2=0;
#40;
D1=0;
D2=1;
#40;
D1=1;
D2=0;
end


test_oddr u_test_oddr(
.clk(clk),
.CE(CE),
.D1(D1),
.D2(D2),
.reset(reset),
.Q(Q)
);

endmodule

vivado仿真波形:

 

posted on 2021-01-25 21:36  只愿你笑  阅读(254)  评论(0编辑  收藏  举报