added phy for generating differential o_ddr3_clk
This commit is contained in:
parent
d6b6c0b9a4
commit
0a43b04f9e
|
|
@ -28,6 +28,7 @@ module ddr3_phy #(
|
||||||
output wire[LANES*8-1:0] o_controller_iserdes_bitslip_reference,
|
output wire[LANES*8-1:0] o_controller_iserdes_bitslip_reference,
|
||||||
output wire o_controller_idelayctrl_rdy,
|
output wire o_controller_idelayctrl_rdy,
|
||||||
// DDR3 I/O Interface
|
// DDR3 I/O Interface
|
||||||
|
output wire o_ddr3_clk_p,o_ddr3_clk_n,
|
||||||
output wire o_ddr3_reset_n,
|
output wire o_ddr3_reset_n,
|
||||||
output wire o_ddr3_cke, // CKE
|
output wire o_ddr3_cke, // CKE
|
||||||
output wire o_ddr3_cs_n, // chip select signal
|
output wire o_ddr3_cs_n, // chip select signal
|
||||||
|
|
@ -51,7 +52,7 @@ module ddr3_phy #(
|
||||||
CMD_RESET_N = cmd_len - 7,
|
CMD_RESET_N = cmd_len - 7,
|
||||||
CMD_BANK_START = BA_BITS + ROW_BITS - 1,
|
CMD_BANK_START = BA_BITS + ROW_BITS - 1,
|
||||||
CMD_ADDRESS_START = ROW_BITS - 1;
|
CMD_ADDRESS_START = ROW_BITS - 1;
|
||||||
localparam SYNC_RESET_DELAY = $ceil(52/CONTROLLER_CLK_PERIOD); //52 ns of reset pulse width required for IDELAYCTRL
|
localparam SYNC_RESET_DELAY = $rtoi($ceil(52/CONTROLLER_CLK_PERIOD)); //52 ns of reset pulse width required for IDELAYCTRL
|
||||||
genvar gen_index;
|
genvar gen_index;
|
||||||
wire[cmd_len-1:0] oserdes_cmd, //serialized(4:1) i_controller_cmd_slot_x
|
wire[cmd_len-1:0] oserdes_cmd, //serialized(4:1) i_controller_cmd_slot_x
|
||||||
cmd;//delayed oserdes_cmd
|
cmd;//delayed oserdes_cmd
|
||||||
|
|
@ -63,7 +64,7 @@ module ddr3_phy #(
|
||||||
wire[LANES-1:0] oserdes_bitslip_reference;
|
wire[LANES-1:0] oserdes_bitslip_reference;
|
||||||
reg[$clog2(SYNC_RESET_DELAY):0] delay_before_release_reset;
|
reg[$clog2(SYNC_RESET_DELAY):0] delay_before_release_reset;
|
||||||
reg sync_rst = 0;
|
reg sync_rst = 0;
|
||||||
|
wire ddr3_clk;
|
||||||
//synchronous reset
|
//synchronous reset
|
||||||
always @(posedge i_controller_clk, negedge i_rst_n) begin
|
always @(posedge i_controller_clk, negedge i_rst_n) begin
|
||||||
if(!i_rst_n) begin
|
if(!i_rst_n) begin
|
||||||
|
|
@ -104,7 +105,7 @@ module ddr3_phy #(
|
||||||
);
|
);
|
||||||
// End of OSERDESE2_inst instantiation
|
// End of OSERDESE2_inst instantiation
|
||||||
|
|
||||||
|
|
||||||
(* IODELAY_GROUP = 0 *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
|
(* IODELAY_GROUP = 0 *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
|
||||||
//Delay the DQ
|
//Delay the DQ
|
||||||
// Delay resolution: 1/(32 x 2 x F REF ) = 78.125ps
|
// Delay resolution: 1/(32 x 2 x F REF ) = 78.125ps
|
||||||
|
|
@ -144,6 +145,44 @@ module ddr3_phy #(
|
||||||
o_ddr3_ba_addr = cmd[CMD_BANK_START:CMD_ADDRESS_START+1],
|
o_ddr3_ba_addr = cmd[CMD_BANK_START:CMD_ADDRESS_START+1],
|
||||||
o_ddr3_addr = cmd[CMD_ADDRESS_START:0];
|
o_ddr3_addr = cmd[CMD_ADDRESS_START:0];
|
||||||
|
|
||||||
|
// OSERDESE2: Output SERial/DESerializer with bitslip
|
||||||
|
//7 Series
|
||||||
|
// Xilinx HDL Libraries Guide, version 13.4
|
||||||
|
OSERDESE2 #(
|
||||||
|
.DATA_RATE_OQ("DDR"), // DDR, SDR
|
||||||
|
.DATA_RATE_TQ("SDR"), // DDR, SDR
|
||||||
|
.DATA_WIDTH(8), // Parallel data width (2-8,10,14)
|
||||||
|
.INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1)
|
||||||
|
.TRISTATE_WIDTH(1)
|
||||||
|
)
|
||||||
|
OSERDESE2_clk(
|
||||||
|
.OFB(), // 1-bit output: Feedback path for data
|
||||||
|
.OQ(ddr3_clk), // 1-bit output: Data path output
|
||||||
|
.CLK(i_ddr3_clk), // 1-bit input: High speed clock
|
||||||
|
.CLKDIV(i_controller_clk), // 1-bit input: Divided clock
|
||||||
|
// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
|
||||||
|
.D1(1'b1),
|
||||||
|
.D2(1'b0),
|
||||||
|
.D3(1'b1),
|
||||||
|
.D4(1'b0),
|
||||||
|
.D5(1'b1),
|
||||||
|
.D6(1'b0),
|
||||||
|
.D7(1'b1),
|
||||||
|
.D8(1'b0),
|
||||||
|
.OCE(1), // 1-bit input: Output data clock enable
|
||||||
|
.RST(sync_rst) // 1-bit input: Reset
|
||||||
|
);
|
||||||
|
// End of OSERDESE2_inst instantiation
|
||||||
|
|
||||||
|
// OBUFDS: Differential Output Buffer
|
||||||
|
// 7 Series
|
||||||
|
// Xilinx HDL Libraries Guide, version 13.4
|
||||||
|
OBUFDS OBUFDS_inst (
|
||||||
|
.O(o_ddr3_clk_p), // Diff_p output (connect directly to top-level port)
|
||||||
|
.OB(o_ddr3_clk_n), // Diff_n output (connect directly to top-level port)
|
||||||
|
.I(ddr3_clk) // Buffer input
|
||||||
|
);
|
||||||
|
// End of OBUFDS_inst instantiation
|
||||||
|
|
||||||
// PHY data
|
// PHY data
|
||||||
generate
|
generate
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue