Add efinix ddio primitives
Some checks are pending
Regression Tests / Python (1/20) (push) Waiting to run
Regression Tests / Python (10/20) (push) Waiting to run
Regression Tests / Python (11/20) (push) Waiting to run
Regression Tests / Python (12/20) (push) Waiting to run
Regression Tests / Python (13/20) (push) Waiting to run
Regression Tests / Python (14/20) (push) Waiting to run
Regression Tests / Python (15/20) (push) Waiting to run
Regression Tests / Python (16/20) (push) Waiting to run
Regression Tests / Python (17/20) (push) Waiting to run
Regression Tests / Python (18/20) (push) Waiting to run
Regression Tests / Python (19/20) (push) Waiting to run
Regression Tests / Python (2/20) (push) Waiting to run
Regression Tests / Python (20/20) (push) Waiting to run
Regression Tests / Python (3/20) (push) Waiting to run
Regression Tests / Python (4/20) (push) Waiting to run
Regression Tests / Python (5/20) (push) Waiting to run
Regression Tests / Python (6/20) (push) Waiting to run
Regression Tests / Python (7/20) (push) Waiting to run
Regression Tests / Python (8/20) (push) Waiting to run
Regression Tests / Python (9/20) (push) Waiting to run

This commit is contained in:
2026-02-05 08:22:56 -08:00
parent 62da198a76
commit 2cc1743a2b
2 changed files with 53 additions and 1 deletions

View File

@@ -19,7 +19,7 @@ module taxi_iddr #
(
// simulation (set to avoid vendor primitives)
parameter logic SIM = 1'b0,
// vendor ("GENERIC", "XILINX", "ALTERA")
// vendor ("GENERIC", "XILINX", "ALTERA", "EFINIX")
parameter string VENDOR = "XILINX",
// device family
parameter string FAMILY = "virtex7",
@@ -125,6 +125,45 @@ end else if (!SIM && VENDOR == "ALTERA") begin
assign q1 = q1_delay;
end else if (!SIM && VENDOR == "EFINIX") begin
// Titanium (and Topaz) supports pipeline mode, Trion does not
if (FAMILY == "titanium") begin
for (genvar n = 0; n < WIDTH; n = n + 1) begin : iddr
EFX_IDDIO #(
.PULL_OPTION("NONE"),
.IS_CLK_INVERTED(0),
.MODE("DDIO_PIPE")
) efx_iddio_inst (
.O_HI(q1[n]),
.O_LO(q2[n]),
.I(d[n]),
.CLK(clk)
);
end
end else begin
for (genvar n = 0; n < WIDTH; n = n + 1) begin : iddr
wire q1_int;
reg q1_delay;
EFX_IDDIO #(
.PULL_OPTION("NONE"),
.IS_CLK_INVERTED(0),
.MODE("DDIO_RESYNC")
) efx_iddio_inst (
.O_HI(q1_int),
.O_LO(q2[n]),
.I(d[n]),
.CLK(clk)
);
always @(posedge clk) begin
q1_delay <= q1_int;
end
assign q1[n] = q1_delay;
end
end
end else begin
// generic/simulation implementation (no vendor primitives)

View File

@@ -109,6 +109,19 @@ end else if (!SIM && VENDOR == "ALTERA") begin
.dataout(q)
);
end else if (VENDOR == "EFINIX") begin
for (genvar n = 0; n < WIDTH; n = n + 1) begin : IDDIO_LOOP
EFX_ODDIO #(
.IS_CLK_INVERTED(0),
.MODE("DDIO_RESYNC")
) u_oddio (
.I_HI(d1[n]),
.I_LO(d2[n]),
.O(q[n]),
.CLK(clk)
);
end
end else begin
// generic/simulation implementation (no vendor primitives)