blob: cd6de6ab211a353f9af68a73da51ccf136391f02 [file] [log] [blame] [edit]
module top
(
// Clocks
input wire clk1,
input wire clk2,
// Dummy data input
input wire [1:0] i_d,
input wire i_t,
// OSERDES output(s)
inout wire [1:0] out,
// Dummy outputs
output wire o_d
);
// ============================================================================
wire clk;
wire clkdiv;
BUFG bufg1 (.I(clk1), .O(clk));
BUFG bufg2 (.I(clk2), .O(clkdiv));
// ============================================================================
reg [3:0] rst_sr;
initial rst_sr <= 4'hF;
always @(posedge clk)
rst_sr <= rst_sr >> 1;
wire rst = rst_sr[0];
// ============================================================================
wire [1:0] iq;
wire [1:0] oq;
wire [1:0] tq;
// Dummy outputs
assign o_d = |iq;
// OBUFT is not yet supported in SymbiFlow
/*
OBUFT obuft_0 (
.I (oq[0]),
.T (tq[0]),
.O (out[0])
);
OBUFT obuft_1 (
.I (oq[1]),
.T (tq[1]),
.O (out[1])
);
*/
// IOBUFs
IOBUF iobuf_0 (
.O (iq[0]),
.I (oq[0]),
.T (tq[0]),
.IO (out[0])
);
IOBUF iobuf_1 (
.O (iq[1]),
.I (oq[1]),
.T (tq[1]),
.IO (out[1])
);
/*
OBUF obuf_0 (
.I (oq[0]),
.O (out[0])
);
OBUF obuf_1 (
.I (oq[1]),
.O (out[1])
);
*/
// OSERDES with inverters intended to be disabled
(* KEEP, DONT_TOUCH *)
OSERDESE2 #
(
.IS_D2_INVERTED (0),
.IS_D4_INVERTED (0),
.IS_D6_INVERTED (0),
.IS_D8_INVERTED (0),
.IS_T1_INVERTED (0),
.IS_T2_INVERTED (0),
.IS_T3_INVERTED (0),
.IS_T4_INVERTED (0),
.DATA_RATE_OQ ("SDR"),
.DATA_RATE_TQ ("SDR"),
.DATA_WIDTH (8),
.TRISTATE_WIDTH (1)
)
oserdes_0
(
.CLK (clk),
.CLKDIV (clkdiv),
.RST (rst),
.OCE (1'b1),
// D1-D2 routed
// D3-D4 const0
// D5-D6 const1
// D7-D8 unconnected
.D1 (i_d[0]),
.D2 (i_d[1]),
.D3 (1'b0),
.D4 (1'b0),
.D5 (1'b1),
.D6 (1'b1),
.D7 (),
.D8 (),
.OQ (oq[0]),
.TCE (1'b1),
// T1 - routed
// T2 - const0
// T3 - const1
// T4 - unconnected
.T1 (i_t),
.T2 (1'b0),
.T3 (1'b1),
.T4 (),
.TQ (tq[0])
);
// OSERDES with inverters intended to be enabled
(* KEEP, DONT_TOUCH *)
OSERDESE2 #
(
.IS_D2_INVERTED (1),
.IS_D4_INVERTED (1),
.IS_D6_INVERTED (1),
.IS_D8_INVERTED (1),
.IS_T1_INVERTED (1),
.IS_T2_INVERTED (1),
.IS_T3_INVERTED (1),
.IS_T4_INVERTED (1),
.DATA_RATE_OQ ("SDR"),
.DATA_RATE_TQ ("SDR"),
.DATA_WIDTH (8),
.TRISTATE_WIDTH (1)
)
oserdes_1
(
.CLK (clk),
.CLKDIV (clkdiv),
.RST (rst),
.OCE (1'b1),
// D1-D2 routed
// D3-D4 const0
// D5-D6 const1
// D7-D8 unconnected
.D1 (i_d[0]),
.D2 (i_d[1]),
.D3 (1'b0),
.D4 (1'b0),
.D5 (1'b1),
.D6 (1'b1),
.D7 (),
.D8 (),
.OQ (oq[1]),
.TCE (1'b1),
// T1 - routed
// T2 - const0
// T3 - const1
// T4 - unconnected
.T1 (i_t),
.T2 (1'b0),
.T3 (1'b1),
.T4 (),
.TQ (tq[1])
);
endmodule