[ { "BlackBox" :
    { "name" : "Clash.Xilinx.DDR.iddr"
    , "kind" : "Declaration"
    , "type" :
"iddr
  :: ( HasCallStack             -- ARG[0]
     , KnownConfi~ fast domf    -- ARG[1]
     , KnownConfi~ slow doms    -- ARG[2]
     , KnownNat m )             -- ARG[3]
  -> Clock slow                 -- ARG[4]
  -> Reset slow                 -- ARG[5]
  -> Enable slow                -- ARG[6]
  -> Signal fast (BitVector m)  -- ARG[7]
  -> Signal slow (BitVector m,BitVector m)"
    , "libraries" : ["UNISIM"]
    , "imports" : ["UNISIM.vcomponents.all"]
    , "template" :
"-- iddr begin
~GENSYM[~COMPNAME_IDDR][0] : block
  signal ~GENSYM[dataout_l][1] : ~TYP[7];
  signal ~GENSYM[dataout_h][2] : ~TYP[7];
  signal ~GENSYM[d][3]         : ~TYP[7];~IF ~ISACTIVEENABLE[4] ~THEN
  signal ~GENSYM[ce_logic][4]: std_logic;~ELSE ~FI
begin~IF ~ISACTIVEENABLE[4] ~THEN
  ~SYM[4] <= '1' when (~ARG[6]) else '0';~ELSE ~FI
  ~SYM[3] <= ~ARG[7];

  ~GENSYM[gen_iddr][7] : for ~GENSYM[i][8] in ~SYM[3]'range generate
  begin
    ~GENSYM[~COMPNAME_IDDR_inst][9] : IDDR
    generic map (
      DDR_CLK_EDGE => \"SAME_EDGE\",
      INIT_Q1      => '0',
      INIT_Q2      => '0',
      SRTYPE       => ~IF ~ISSYNC[2] ~THEN \"SYNC\" ~ELSE \"ASYNC\" ~FI)
    port map (
      Q1 => ~SYM[1](~SYM[8]),   -- 1-bit output for positive edge of clock
      Q2 => ~SYM[2](~SYM[8]),   -- 1-bit output for negative edge of clock
      C  => ~ARG[4],   -- 1-bit clock input
      CE => ~IF ~ISACTIVEENABLE[6] ~THEN ~SYM[4] ~ELSE '1' ~FI,       -- 1-bit clock enable input
      D  => ~SYM[3](~SYM[8]),   -- 1-bit DDR data input
      R  => ~ARG[5],   -- 1-bit reset
      S  => '0'        -- 1-bit set
    );
  end generate;

  ~RESULT <= (~SYM[2], ~SYM[1]);
end block;
-- iddr# end"
    }
  }
, { "BlackBox" :
    { "name" : "Clash.Xilinx.DDR.oddr#"
    , "kind" : "Declaration"
    , "type" :
"oddr#
  :: ( KnownConfi~ fast domf     -- ARG[0]
     , KnownConfi~ slow doms     -- ARG[1]
     , KnownNat m )              -- ARG[2]
  => Clock slow                  -- ARG[3]
  -> Reset slow                  -- ARG[4]
  -> Enable slow                 -- ARG[5]
  -> Signal slow (BitVector m)   -- ARG[6]
  -> Signal slow (BitVector m)   -- ARG[7]
  -> Signal fast (BitVector m)"
    , "libraries" : ["UNISIM"]
    , "imports" : ["UNISIM.vcomponents.all"]
    , "template" :
"-- oddr begin
~GENSYM[~COMPNAME_ODDR][0] : block
  signal ~GENSYM[dataout_l][1] : ~TYPO;
  signal ~GENSYM[dataout_h][2] : ~TYPO;
  signal ~GENSYM[q][3]         : ~TYPO;~IF ~ISACTIVEENABLE[5] ~THEN
  signal ~GENSYM[ce_logic][4]  : std_logic;~ELSE ~FI
begin~IF ~ISACTIVEENABLE[5] ~THEN
  ~SYM[4] <= '1' when (~ARG[5]) else '0';~ELSE ~FI
  ~SYM[1] <= ~ARG[6];
  ~SYM[2] <= ~ARG[7];

  ~GENSYM[gen_iddr][7] : for ~GENSYM[i][8] in ~SYM[3]'range generate
  begin
    ~GENSYM[~COMPNAME_ODDR_inst][9] : ODDR
    generic map(
      DDR_CLK_EDGE => \"SAME_EDGE\",
      INIT => '0',
      SRTYPE => ~IF ~ISSYNC[2] ~THEN \"SYNC\" ~ELSE \"ASYNC\" ~FI)
    port map (
      Q  => ~SYM[3](~SYM[8]),    -- 1-bit DDR output
      C  => ~ARG[3],   -- 1-bit clock input
      CE => ~IF ~ISACTIVEENABLE[5] ~THEN ~SYM[4] ~ELSE '1' ~FI,       -- 1-bit clock enable input
      D1 => ~SYM[1](~SYM[8]),    -- 1-bit data input (positive edge)
      D2 => ~SYM[2](~SYM[8]),    -- 1-bit data input (negative edge)
      R  => ~ARG[4],    -- 1-bit reset input
      S  => '0'         -- 1-bit set input
    );
  end generate;

  ~RESULT <= ~SYM[3];
end block;
-- oddr end"
    }
  }
]