packages feed

clash-lib-1.10.0: prims/vhdl/Clash_Xilinx_DDR.primitives.yaml

- BlackBox:
    name: Clash.Xilinx.DDR.iddr#
    imports:
    - UNISIM.vcomponents.all
    kind: Declaration
    libraries:
    - UNISIM
    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
      ~GENSYM[~COMPNAME_IDDR][0] : block
        signal ~GENSYM[data_pos][1] : ~TYP[9];
        signal ~GENSYM[data_neg][2] : ~TYP[9];
        signal ~GENSYM[d][3]         : ~TYP[9];~IF ~ISACTIVEENABLE[8] ~THEN
        signal ~GENSYM[ce_logic][4]: std_logic;~ELSE ~FI
      begin~IF ~ISACTIVEENABLE[8] ~THEN
        ~SYM[4] <= '1' when (~ARG[8]) else '0';~ELSE ~FI
        ~SYM[3] <= ~ARG[9];

        ~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[1] ~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[6],   -- 1-bit clock input
            CE => ~IF ~ISACTIVEENABLE[8] ~THEN ~SYM[4] ~ELSE '1' ~FI,       -- 1-bit clock enable input
            D  => ~SYM[3](~SYM[8]),   -- 1-bit DDR data input
            R  => ~ARG[7],   -- 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#
    imports:
    - UNISIM.vcomponents.all
    kind: Declaration
    libraries:
    - UNISIM
    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
      ~GENSYM[~COMPNAME_ODDR][0] : block
        signal ~GENSYM[data_pos][1] : ~TYPO;
        signal ~GENSYM[data_neg][2] : ~TYPO;
        signal ~GENSYM[q][3]         : ~TYPO;~IF ~ISACTIVEENABLE[8] ~THEN
        signal ~GENSYM[ce_logic][4]  : std_logic;~ELSE ~FI
      begin~IF ~ISACTIVEENABLE[8] ~THEN
        ~SYM[4] <= '1' when (~ARG[8]) else '0';~ELSE ~FI
        ~SYM[1] <= ~ARG[9];
        ~SYM[2] <= ~ARG[10];

        ~GENSYM[gen_oddr][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[1] ~THEN "SYNC" ~ELSE "ASYNC" ~FI)
          port map (
            Q  => ~SYM[3](~SYM[8]),    -- 1-bit DDR output
            C  => ~ARG[6],   -- 1-bit clock input
            CE => ~IF ~ISACTIVEENABLE[8] ~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[7],    -- 1-bit reset input
            S  => '0'         -- 1-bit set input
          );
        end generate;

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