packages feed

clash-lib-1.10.0: prims/verilog/Clash_Explicit_DDR.primitives.yaml

- BlackBox:
    name: Clash.Explicit.DDR.ddrIn#
    kind: Declaration
    type: |-
      ddrIn# :: forall a dom domDDR
              . HasCallStack             -- ARG[0]
             => NFDataX a                -- ARG[1]
             => KnownDomain dom          -- ARG[2]
             => KnownDomain domDDR       -- ARG[3]
             => DomPeriod ~ 2 * ...      -- ARG[4]
             => Clock dom                -- ARG[5]
             -> Reset dom                -- ARG[6]
             -> Enable dom               -- ARG[7]
             -> a                        -- ARG[8]
             -> a                        -- ARG[9]
             -> a                        -- ARG[10]
             -> Signal domDDR a          -- ARG[11]
             -> Signal dom (a,a)
    template: |-
      // ddrIn begin
      reg ~SIGD[~GENSYM[data_Pos][1]][11];
      reg ~SIGD[~GENSYM[data_Neg][2]][11];
      reg ~SIGD[~GENSYM[data_Neg_Latch][3]][11];
      always @(~IF~ACTIVEEDGE[Rising][2]~THENposedge~ELSEnegedge~FI ~ARG[5]~IF~ISSYNC[2]~THEN)~ELSE or ~IF~ISACTIVEHIGH[2]~THENposedge~ELSEnegedge~FI ~ARG[6])~FI begin : ~GENSYM[~COMPNAME_ddrIn_pos][6]
        if (~IF~ISACTIVEHIGH[2]~THEN~ARG[6]~ELSE! ~ARG[6]~FI) begin
          ~SYM[1] <= ~ARG[9];
        end else ~IF ~ISACTIVEENABLE[7] ~THEN if (~ARG[7]) ~ELSE ~FI begin
          ~SYM[1] <= ~ARG[11];
        end
      end
      always @(~IF~ACTIVEEDGE[Rising][2]~THENnegedge~ELSEposedge~FI ~ARG[5]~IF~ISSYNC[2]~THEN)~ELSE or ~IF~ISACTIVEHIGH[2]~THENposedge~ELSEnegedge~FI ~ARG[6])~FI begin : ~GENSYM[~COMPNAME_ddrIn_neg][7]
        if (~IF~ISACTIVEHIGH[2]~THEN~ARG[6]~ELSE! ~ARG[6]~FI) begin
          ~SYM[2] <= ~ARG[10];
        end else ~IF ~ISACTIVEENABLE[7] ~THEN if (~ARG[7]) ~ELSE ~FI begin
          ~SYM[2] <= ~ARG[11];
        end
      end
      always @(~IF~ACTIVEEDGE[Rising][2]~THENposedge~ELSEnegedge~FI ~ARG[5]~IF~ISSYNC[2]~THEN)~ELSE or ~IF~ISACTIVEHIGH[2]~THENposedge~ELSEnegedge~FI ~ARG[6])~FI begin : ~GENSYM[~COMPNAME_ddrIn_neg_latch][8]
        if (~IF~ISACTIVEHIGH[2]~THEN~ARG[6]~ELSE! ~ARG[6]~FI) begin
          ~SYM[3] <= ~ARG[8];
        end else ~IF ~ISACTIVEENABLE[7] ~THEN if (~ARG[7]) ~ELSE ~FI begin
          ~SYM[3] <= ~SYM[2];
        end
      end

      assign ~RESULT = {~SYM[3], ~SYM[1]};
      // ddrIn end
- BlackBox:
    name: Clash.Explicit.DDR.ddrOut#
    kind: Declaration
    type: |-
      ddrOut# :: forall a dom domDDR
               . HasCallStack                 -- ARG[0]
              => NFDataX a                    -- ARG[1]
              => KnownDomain dom              -- ARG[2]
              => KnownDomain domDDR           -- ARG[3]
              => DomPeriod ~ 2 * ...          -- ARG[4]
              => Clock dom                    -- ARG[5]
              -> Reset dom                    -- ARG[6]
              -> Enable dom                   -- ARG[7]
              -> a                            -- ARG[8]
              -> Signal dom a                 -- ARG[9]
              -> Signal dom a                 -- ARG[10]
              -> Signal domDDR a
    template: |-
      // ddrOut begin
      reg ~SIGD[~GENSYM[data_Pos][1]][8];
      reg ~SIGD[~GENSYM[data_Neg][2]][8];
      ~IF ~VIVADO ~THENreg ~SIGDO[~GENSYM[ddrOut][3]];~ELSE~FI
      always @(~IF~ACTIVEEDGE[Rising][2]~THENposedge~ELSEnegedge~FI ~ARG[5]~IF~ISSYNC[2]~THEN)~ELSE or ~IF~ISACTIVEHIGH[2]~THENposedge~ELSEnegedge~FI ~ARG[6])~FI begin : ~GENSYM[~COMPNAME_ddrOut_pos][5]
        if (~IF~ISACTIVEHIGH[2]~THEN~ARG[6]~ELSE! ~ARG[6]~FI) begin
          ~SYM[1] <= ~ARG[8];
        end else ~IF ~ISACTIVEENABLE[7] ~THEN if (~ARG[7]) ~ELSE ~FI begin
          ~SYM[1] <= ~ARG[9];
        end
      end
      always @(~IF~ACTIVEEDGE[Rising][2]~THENposedge~ELSEnegedge~FI ~ARG[5]~IF~ISSYNC[2]~THEN)~ELSE or ~IF~ISACTIVEHIGH[2]~THENposedge~ELSEnegedge~FI ~ARG[6])~FI begin : ~GENSYM[~COMPNAME_ddrOut_neg][6]
        if (~IF~ISACTIVEHIGH[2]~THEN~ARG[6]~ELSE! ~ARG[6]~FI) begin
          ~SYM[2] <= ~ARG[8];
        end else ~IF ~ISACTIVEENABLE[7] ~THEN if (~ARG[7]) ~ELSE ~FI begin
          ~SYM[2] <= ~ARG[10];
        end
      end

      ~IF ~VIVADO ~THENalways @(*) begin
        if (~ARG[5]) begin
          ~SYM[3] = ~IF~ACTIVEEDGE[Rising][2]~THEN~SYM[1]~ELSE~SYM[2]~FI;
        end else begin
          ~SYM[3] = ~IF~ACTIVEEDGE[Rising][2]~THEN~SYM[2]~ELSE~SYM[1]~FI;
        end
      end
      assign ~RESULT = ~SYM[3];~ELSE
      assign ~RESULT = ~ARG[5] ? ~IF~ACTIVEEDGE[Rising][2]~THEN~SYM[1] : ~SYM[2]~ELSE~SYM[2] : ~SYM[1]~FI;~FI

      // ddrOut end