Skip to content

Commit

Permalink
Merge pull request f4pga#1626 from antmicro/iserdes_features
Browse files Browse the repository at this point in the history
ISERDES features update
  • Loading branch information
acomodi committed Aug 11, 2020
2 parents 8d20f63 + 142f03e commit 1e513ac
Show file tree
Hide file tree
Showing 5 changed files with 159 additions and 69 deletions.
2 changes: 1 addition & 1 deletion third_party/prjxray-db
2 changes: 1 addition & 1 deletion third_party/symbiflow-xc-fasm2bels
63 changes: 42 additions & 21 deletions xc/common/primitives/ilogice3/ilogice3.pb_type.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,31 @@
IDDR_OR_ISERDES.IN_USE
IFF.DDR_CLK_EDGE.OPPOSITE_EDGE
IFF.SRTYPE.SYNC
ISERDES.MODE.MASTER
</meta>
<meta name="fasm_params">
ISERDES.DATA_RATE.SDR = DATA_RATE_SDR

ISERDES.DATA_WIDTH.W3 = DATA_WIDTH_W3
ISERDES.DATA_WIDTH.W4_6 = DATA_WIDTH_W4_6
ISERDES.DATA_WIDTH.W5_7 = DATA_WIDTH_W5_7
ISERDES.DATA_WIDTH.W8 = DATA_WIDTH_W8
ISERDES.MEMORY_DDR3.DDR.W4 = MEMORY_DDR3_4
ISERDES.MEMORY.DDR.W4 = MEMORY_DDR_4
ISERDES.MEMORY_QDR.DDR.W4 = MEMORY_QDR_4

ISERDES.INTERFACE_TYPE.MEMORY_DDR3 = INTERFACE_TYPE_MEMORY_DDR3
ISERDES.INTERFACE_TYPE.NOT_MEMORY = INTERFACE_TYPE_NOT_MEMORY
ISERDES.INTERFACE_TYPE.OVERSAMPLE = INTERFACE_TYPE_OVERSAMPLE
ISERDES.INTERFACE_TYPE.Z_MEMORY = INTERFACE_TYPE_Z_MEMORY
ISERDES.NETWORKING.SDR.W2 = NETWORKING_SDR_2
ISERDES.NETWORKING.SDR.W3 = NETWORKING_SDR_3
ISERDES.NETWORKING.SDR.W4 = NETWORKING_SDR_4
ISERDES.NETWORKING.SDR.W5 = NETWORKING_SDR_5
ISERDES.NETWORKING.SDR.W6 = NETWORKING_SDR_6
ISERDES.NETWORKING.SDR.W7 = NETWORKING_SDR_7
ISERDES.NETWORKING.SDR.W8 = NETWORKING_SDR_8

ISERDES.NETWORKING.DDR.W4 = NETWORKING_DDR_4
ISERDES.NETWORKING.DDR.W6 = NETWORKING_DDR_6
ISERDES.NETWORKING.DDR.W8 = NETWORKING_DDR_8
ISERDES.NETWORKING.DDR.W10 = NETWORKING_DDR_10
ISERDES.NETWORKING.DDR.W14 = NETWORKING_DDR_14

ISERDES.OVERSAMPLE.DDR.W4 = OVERSAMPLE_DDR_4

ISERDES.NUM_CE.N1 = NUM_CE_N1
ISERDES.NUM_CE.N2 = NUM_CE_N2

IFFDELMUXE3.P0 = IOBDELAY_IFD
Expand Down Expand Up @@ -252,20 +263,30 @@
IDDR_OR_ISERDES.IN_USE
IFF.DDR_CLK_EDGE.OPPOSITE_EDGE
IFF.SRTYPE.SYNC
ISERDES.MODE.MASTER
</meta>
<meta name="fasm_params">
ISERDES.DATA_RATE.SDR = DATA_RATE_SDR

ISERDES.DATA_WIDTH.W3 = DATA_WIDTH_W3
ISERDES.DATA_WIDTH.W4_6 = DATA_WIDTH_W4_6
ISERDES.DATA_WIDTH.W5_7 = DATA_WIDTH_W5_7
ISERDES.DATA_WIDTH.W8 = DATA_WIDTH_W8

ISERDES.INTERFACE_TYPE.MEMORY_DDR3 = INTERFACE_TYPE_MEMORY_DDR3
ISERDES.INTERFACE_TYPE.NOT_MEMORY = INTERFACE_TYPE_NOT_MEMORY
ISERDES.INTERFACE_TYPE.OVERSAMPLE = INTERFACE_TYPE_OVERSAMPLE
ISERDES.INTERFACE_TYPE.Z_MEMORY = INTERFACE_TYPE_Z_MEMORY

ISERDES.MEMORY_DDR3.DDR.W4 = MEMORY_DDR3_4
ISERDES.MEMORY.DDR.W4 = MEMORY_DDR_4
ISERDES.MEMORY_QDR.DDR.W4 = MEMORY_QDR_4

ISERDES.NETWORKING.SDR.W2 = NETWORKING_SDR_2
ISERDES.NETWORKING.SDR.W3 = NETWORKING_SDR_3
ISERDES.NETWORKING.SDR.W4 = NETWORKING_SDR_4
ISERDES.NETWORKING.SDR.W5 = NETWORKING_SDR_5
ISERDES.NETWORKING.SDR.W6 = NETWORKING_SDR_6
ISERDES.NETWORKING.SDR.W7 = NETWORKING_SDR_7
ISERDES.NETWORKING.SDR.W8 = NETWORKING_SDR_8

ISERDES.NETWORKING.DDR.W4 = NETWORKING_DDR_4
ISERDES.NETWORKING.DDR.W6 = NETWORKING_DDR_6
ISERDES.NETWORKING.DDR.W8 = NETWORKING_DDR_8
ISERDES.NETWORKING.DDR.W10 = NETWORKING_DDR_10
ISERDES.NETWORKING.DDR.W14 = NETWORKING_DDR_14

ISERDES.OVERSAMPLE.DDR.W4 = OVERSAMPLE_DDR_4

ISERDES.NUM_CE.N1 = NUM_CE_N1
ISERDES.NUM_CE.N2 = NUM_CE_N2

IFFDELMUXE3.P0 = IOBDELAY_IFD
Expand Down
97 changes: 71 additions & 26 deletions xc/xc7/techmap/cells_map.v
Original file line number Diff line number Diff line change
Expand Up @@ -2961,33 +2961,66 @@ module ISERDESE2 (
wire _TECHMAP_FAIL_ = 1'b1;
end

if (DATA_RATE == "DDR" &&
(DATA_WIDTH != 4 &&
DATA_WIDTH != 6 &&
DATA_WIDTH != 8)) begin
if (DATA_RATE == "DDR" && DATA_WIDTH != 4) begin
wire _TECHMAP_FAIL_ = 1'b1;
end
end

if (NUM_CE != 1 && NUM_CE != 2) begin
wire _TECHMAP_FAIL_ = 1'b1;
end

parameter _TECHMAP_CONSTMSK_D_ = 1'b1;
parameter _TECHMAP_CONSTVAL_D_ = 1'bx;
parameter _TECHMAP_CONSTMSK_DDLY_ = 1'b1;
parameter _TECHMAP_CONSTVAL_DDLY_ = 1'bx;

localparam [0:0] MEMORY_DDR3_4 = (INTERFACE_TYPE == "MEMORY_DDR3" && DATA_RATE == "DDR" && DATA_WIDTH == 4);
localparam [0:0] MEMORY_DDR_4 = (INTERFACE_TYPE == "MEMORY" && DATA_RATE == "DDR" && DATA_WIDTH == 4);
localparam [0:0] MEMORY_QDR_4 = (INTERFACE_TYPE == "MEMORY_QDR" && DATA_RATE == "DDR" && DATA_WIDTH == 4);

localparam [0:0] NETWORKING_SDR_2 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 2);
localparam [0:0] NETWORKING_SDR_3 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 3);
localparam [0:0] NETWORKING_SDR_4 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 4);
localparam [0:0] NETWORKING_SDR_5 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 5);
localparam [0:0] NETWORKING_SDR_6 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 6);
localparam [0:0] NETWORKING_SDR_7 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 7);
localparam [0:0] NETWORKING_SDR_8 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "SDR" && DATA_WIDTH == 8);

localparam [0:0] NETWORKING_DDR_4 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "DDR" && DATA_WIDTH == 4);
localparam [0:0] NETWORKING_DDR_6 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "DDR" && DATA_WIDTH == 6);
localparam [0:0] NETWORKING_DDR_8 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "DDR" && DATA_WIDTH == 8);
localparam [0:0] NETWORKING_DDR_10 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "DDR" && DATA_WIDTH == 10);
localparam [0:0] NETWORKING_DDR_14 = (INTERFACE_TYPE == "NETWORKING" && DATA_RATE == "DDR" && DATA_WIDTH == 14);

localparam [0:0] OVERSAMPLE_DDR_4 = (INTERFACE_TYPE == "OVERSAMPLE" && DATA_RATE == "DDR" && DATA_WIDTH == 4);

if (_TECHMAP_CONSTMSK_D_ == 1'b1) begin
ISERDESE2_IDELAY_VPR #(
.DATA_RATE_SDR (DATA_RATE == "SDR"),
.INTERFACE_TYPE_MEMORY_DDR3 (INTERFACE_TYPE == "MEMORY_DDR3"),
.INTERFACE_TYPE_NOT_MEMORY (INTERFACE_TYPE != "MEMORY" ||
INTERFACE_TYPE != "MEMORY_DDR3" ||
INTERFACE_TYPE != "MEMORY_QDR"),
.INTERFACE_TYPE_OVERSAMPLE (INTERFACE_TYPE == "OVERSAMPLE"),
.INTERFACE_TYPE_Z_MEMORY (INTERFACE_TYPE != "OVERSAMPLE" || INTERFACE_TYPE != "NETWORKING"),
.DATA_WIDTH_W3 (DATA_WIDTH == 3),
.DATA_WIDTH_W4_6 (DATA_WIDTH == 4 || DATA_WIDTH == 6),
.DATA_WIDTH_W5_7 (DATA_WIDTH == 5 || DATA_WIDTH == 7),
.DATA_WIDTH_W8 (DATA_WIDTH == 8),

.MEMORY_DDR3_4 (MEMORY_DDR3_4),
.MEMORY_DDR_4 (MEMORY_DDR_4),
.MEMORY_QDR_4 (MEMORY_QDR_4),

.NETWORKING_SDR_2 (NETWORKING_SDR_2),
.NETWORKING_SDR_3 (NETWORKING_SDR_3),
.NETWORKING_SDR_4 (NETWORKING_SDR_4),
.NETWORKING_SDR_5 (NETWORKING_SDR_5),
.NETWORKING_SDR_6 (NETWORKING_SDR_6),
.NETWORKING_SDR_7 (NETWORKING_SDR_7),
.NETWORKING_SDR_8 (NETWORKING_SDR_8),

.NETWORKING_DDR_4 (NETWORKING_DDR_4),
.NETWORKING_DDR_6 (NETWORKING_DDR_6),
.NETWORKING_DDR_8 (NETWORKING_DDR_8),
.NETWORKING_DDR_10 (NETWORKING_DDR_10),
.NETWORKING_DDR_14 (NETWORKING_DDR_14),

.OVERSAMPLE_DDR_4 (OVERSAMPLE_DDR_4),

.NUM_CE_N1 (NUM_CE == 1),
.NUM_CE_N2 (NUM_CE == 2),

.IOBDELAY_IFD (IOBDELAY == "IFD" || IOBDELAY == "BOTH"),
.IOBDELAY_IBUF (IOBDELAY == "IBUF" || IOBDELAY == "BOTH"),

Expand Down Expand Up @@ -3022,18 +3055,30 @@ module ISERDESE2 (
);
end else if (_TECHMAP_CONSTMSK_DDLY_ == 1'b1) begin
ISERDESE2_NO_IDELAY_VPR #(
.DATA_RATE_SDR (DATA_RATE == "SDR"),
.INTERFACE_TYPE_MEMORY_DDR3 (INTERFACE_TYPE == "MEMORY_DDR3"),
.INTERFACE_TYPE_NOT_MEMORY (INTERFACE_TYPE != "MEMORY" ||
INTERFACE_TYPE != "MEMORY_DDR3" ||
INTERFACE_TYPE != "MEMORY_QDR"),
.INTERFACE_TYPE_OVERSAMPLE (INTERFACE_TYPE == "OVERSAMPLE"),
.INTERFACE_TYPE_Z_MEMORY (INTERFACE_TYPE != "OVERSAMPLE" || INTERFACE_TYPE != "NETWORKING"),
.DATA_WIDTH_W3 (DATA_WIDTH == 3),
.DATA_WIDTH_W4_6 (DATA_WIDTH == 4 || DATA_WIDTH == 6),
.DATA_WIDTH_W5_7 (DATA_WIDTH == 5 || DATA_WIDTH == 7),
.DATA_WIDTH_W8 (DATA_WIDTH == 8),

.MEMORY_DDR3_4 (MEMORY_DDR3_4),
.MEMORY_DDR_4 (MEMORY_DDR_4),
.MEMORY_QDR_4 (MEMORY_QDR_4),

.NETWORKING_SDR_2 (NETWORKING_SDR_2),
.NETWORKING_SDR_3 (NETWORKING_SDR_3),
.NETWORKING_SDR_4 (NETWORKING_SDR_4),
.NETWORKING_SDR_5 (NETWORKING_SDR_5),
.NETWORKING_SDR_6 (NETWORKING_SDR_6),
.NETWORKING_SDR_7 (NETWORKING_SDR_7),
.NETWORKING_SDR_8 (NETWORKING_SDR_8),

.NETWORKING_DDR_4 (NETWORKING_DDR_4),
.NETWORKING_DDR_6 (NETWORKING_DDR_6),
.NETWORKING_DDR_8 (NETWORKING_DDR_8),
.NETWORKING_DDR_10 (NETWORKING_DDR_10),
.NETWORKING_DDR_14 (NETWORKING_DDR_14),

.OVERSAMPLE_DDR_4 (OVERSAMPLE_DDR_4),

.NUM_CE_N1 (NUM_CE == 1),
.NUM_CE_N2 (NUM_CE == 2),

.IOBDELAY_IFD (IOBDELAY == "IFD" || IOBDELAY == "BOTH"),
.IOBDELAY_IBUF (IOBDELAY == "IBUF" || IOBDELAY == "BOTH"),

Expand Down
64 changes: 44 additions & 20 deletions xc/xc7/techmap/cells_sim.v
Original file line number Diff line number Diff line change
Expand Up @@ -986,16 +986,28 @@ module ISERDESE2_IDELAY_VPR (
output Q8
);

parameter [0:0] DATA_RATE_SDR = 1'b0;
parameter [0:0] DATA_WIDTH_W3 = 1'b0;
parameter [0:0] DATA_WIDTH_W4_6 = 1'b0;
parameter [0:0] DATA_WIDTH_W5_7 = 1'b0;
parameter [0:0] DATA_WIDTH_W8 = 1'b0;
parameter [0:0] INTERFACE_TYPE_MEMORY_DDR3 = 1'b0;
parameter [0:0] INTERFACE_TYPE_NOT_MEMORY = 1'b0;
parameter [0:0] INTERFACE_TYPE_OVERSAMPLE = 1'b0;
parameter [0:0] INTERFACE_TYPE_Z_MEMORY = 1'b0;
parameter [0:0] NUM_CE_N2 = 1'b0;
parameter [0:0] MEMORY_DDR3_4 = 1'b0;
parameter [0:0] MEMORY_DDR_4 = 1'b0;
parameter [0:0] MEMORY_QDR_4 = 1'b0;

parameter [0:0] NETWORKING_SDR_2 = 1'b0;
parameter [0:0] NETWORKING_SDR_3 = 1'b0;
parameter [0:0] NETWORKING_SDR_4 = 1'b0;
parameter [0:0] NETWORKING_SDR_5 = 1'b0;
parameter [0:0] NETWORKING_SDR_6 = 1'b0;
parameter [0:0] NETWORKING_SDR_7 = 1'b0;
parameter [0:0] NETWORKING_SDR_8 = 1'b0;

parameter [0:0] NETWORKING_DDR_4 = 1'b0;
parameter [0:0] NETWORKING_DDR_6 = 1'b0;
parameter [0:0] NETWORKING_DDR_8 = 1'b0;
parameter [0:0] NETWORKING_DDR_10 = 1'b0;
parameter [0:0] NETWORKING_DDR_14 = 1'b0;

parameter [0:0] OVERSAMPLE_DDR_4 = 1'b0;

parameter [0:0] NUM_CE_N1 = 1'b0;
parameter [0:0] NUM_CE_N2 = 1'b1;

parameter [0:0] IOBDELAY_IFD = 1'b0;
parameter [0:0] IOBDELAY_IBUF = 1'b0;
Expand Down Expand Up @@ -1034,16 +1046,28 @@ module ISERDESE2_NO_IDELAY_VPR (
output Q8
);

parameter [0:0] DATA_RATE_SDR = 1'b0;
parameter [0:0] DATA_WIDTH_W3 = 1'b0;
parameter [0:0] DATA_WIDTH_W4_6 = 1'b0;
parameter [0:0] DATA_WIDTH_W5_7 = 1'b0;
parameter [0:0] DATA_WIDTH_W8 = 1'b0;
parameter [0:0] INTERFACE_TYPE_MEMORY_DDR3 = 1'b0;
parameter [0:0] INTERFACE_TYPE_NOT_MEMORY = 1'b0;
parameter [0:0] INTERFACE_TYPE_OVERSAMPLE = 1'b0;
parameter [0:0] INTERFACE_TYPE_Z_MEMORY = 1'b0;
parameter [0:0] NUM_CE_N2 = 1'b0;
parameter [0:0] MEMORY_DDR3_4 = 1'b0;
parameter [0:0] MEMORY_DDR_4 = 1'b0;
parameter [0:0] MEMORY_QDR_4 = 1'b0;

parameter [0:0] NETWORKING_SDR_2 = 1'b0;
parameter [0:0] NETWORKING_SDR_3 = 1'b0;
parameter [0:0] NETWORKING_SDR_4 = 1'b0;
parameter [0:0] NETWORKING_SDR_5 = 1'b0;
parameter [0:0] NETWORKING_SDR_6 = 1'b0;
parameter [0:0] NETWORKING_SDR_7 = 1'b0;
parameter [0:0] NETWORKING_SDR_8 = 1'b0;

parameter [0:0] NETWORKING_DDR_4 = 1'b0;
parameter [0:0] NETWORKING_DDR_6 = 1'b0;
parameter [0:0] NETWORKING_DDR_8 = 1'b0;
parameter [0:0] NETWORKING_DDR_10 = 1'b0;
parameter [0:0] NETWORKING_DDR_14 = 1'b0;

parameter [0:0] OVERSAMPLE_DDR_4 = 1'b0;

parameter [0:0] NUM_CE_N1 = 1'b0;
parameter [0:0] NUM_CE_N2 = 1'b1;

parameter [0:0] IOBDELAY_IFD = 1'b0;
parameter [0:0] IOBDELAY_IBUF = 1'b0;
Expand Down

0 comments on commit 1e513ac

Please sign in to comment.