- BlackBox:
name: Clash.Xilinx.DDR.iddr#
kind: Declaration
type: |-
iddr#
:: forall n dom domDDR
. HasCallStack -- ARG[0]
=> KnownDomain dom -- ARG[1]
=> KnownDomain domDDR -- ARG[2]
=> DomPeriod ~ 2 * ... -- ARG[3]
=> DomEdge ~ Rising -- ARG[4]
=> KnownNat n -- ARG[5]
=> Clock dom -- ARG[6]
-> Reset dom -- ARG[7]
-> Enable dom -- ARG[8]
-> Signal domDDR (BitVector n) -- ARG[9]
-> Signal dom (BitVector n, BitVector n)
template: |-
// iddr begin
~SIGD[~GENSYM[data_pos][1]][9];
~SIGD[~GENSYM[data_neg][2]][9];
~SIGD[~GENSYM[d][3]][9];
assign ~SYM[3] = ~ARG[9];
genvar ~GENSYM[i][8];
~GENERATE
for (~SYM[8]=0; ~SYM[8] < ~SIZE[~TYP[9]]; ~SYM[8]=~SYM[8]+1) begin : ~GENSYM[ddri_array][7]
IDDR #(
.DDR_CLK_EDGE("SAME_EDGE"),
.INIT_Q1(1'b0),
.INIT_Q2(1'b0),
.SRTYPE(~IF ~ISSYNC[1] ~THEN "SYNC" ~ELSE "ASYNC" ~FI)
) ~GENSYM[~COMPNAME_IDDR][9] (
.Q1(~SYM[1][~SYM[8]]),
.Q2(~SYM[2][~SYM[8]]),
.C(~ARG[6]),
.CE(~IF ~ISACTIVEENABLE[8] ~THEN ~ARG[8] ~ELSE 1'b1 ~FI),
.D(~SYM[3][~SYM[8]]),
.R(~ARG[7]),
.S(1'b0)
);
end
~ENDGENERATE
assign ~RESULT = {~SYM[2],~SYM[1]};
// iddr end
- BlackBox:
name: Clash.Xilinx.DDR.oddr#
kind: Declaration
type: |-
oddr#
:: forall n dom domDDR
. HasCallStack -- ARG[0]
=> KnownDomain dom -- ARG[1]
=> KnownDomain domDDR -- ARG[2]
=> DomPeriod ~ 2 * ... -- ARG[3]
=> DomEdge ~ Rising -- ARG[4]
=> KnownNat n -- ARG[5]
=> Clock dom -- ARG[6]
-> Reset dom -- ARG[7]
-> Enable dom -- ARG[8]
-> Signal dom (BitVector n) -- ARG[9]
-> Signal dom (BitVector n) -- ARG[10]
-> Signal domDDR (BitVector n)
template: |-
// oddr begin
~SIGD[~GENSYM[data_pos][1]][10];
~SIGD[~GENSYM[data_neg][2]][10];
~SIGD[~GENSYM[q][3]][10];
assign ~SYM[1] = ~ARG[9];
assign ~SYM[2] = ~ARG[10];
genvar ~GENSYM[i][8];
~GENERATE
for (~SYM[8]=0; ~SYM[8] < ~SIZE[~TYP[10]]; ~SYM[8]=~SYM[8]+1) begin : ~GENSYM[ddro_array][7]
ODDR #(
.DDR_CLK_EDGE("SAME_EDGE"),
.INIT(1'b0),
.SRTYPE(~IF ~ISSYNC[1] ~THEN "SYNC" ~ELSE "ASYNC" ~FI)
) ~GENSYM[~COMPNAME_ODDR][9] (
.Q(~SYM[3][~SYM[8]]),
.C(~ARG[6]),
.CE(~IF ~ISACTIVEENABLE[8] ~THEN ~ARG[8] ~ELSE 1'b1 ~FI),
.D1(~SYM[1][~SYM[8]]),
.D2(~SYM[2][~SYM[8]]),
.R(~ARG[7]),
.S(1'b0)
);
end
~ENDGENERATE
assign ~RESULT = ~SYM[3];
// oddr end