- BlackBox:
    name: Clash.Explicit.ROM.File.romFile#
    kind: Declaration
    type: |-
      romFile# :: ( KnownNat m             --       ARG[0]
                   , KnownDomain dom )      --       ARG[1]
                => Clock dom                -- clk,  ARG[2]
                -> Enable dom               -- en,   ARG[3]
                -> SNat n                   -- sz,   ARG[4]
                -> FilePath                 -- file, ARG[5]
                -> Signal dom Int           -- rd,   ARG[6]
                -> Signal dom (BitVector m)
    template: |-
      // romFile begin
      ~SIGDO[~GENSYM[ROM][0]] [0:~LIT[4]-1];

      initial begin
        $readmemb(~FILE[~LIT[5]],~SYM[0]);
      end

      ~SIGDO[~GENSYM[~RESULT_q][1]];~IF ~ISACTIVEENABLE[3] ~THEN
      always @(~IF~ACTIVEEDGE[Rising][1]~THENposedge~ELSEnegedge~FI ~ARG[2]) begin : ~GENSYM[~COMPNAME_romFile][2]
        if (~ARG[3]) begin
          ~SYM[1] <= ~SYM[0][~ARG[6]];
        end
      end~ELSE
      always @(~IF~ACTIVEEDGE[Rising][1]~THENposedge~ELSEnegedge~FI ~ARG[2]) begin : ~SYM[2]
        ~SYM[1] <= ~SYM[0][~ARG[6]];
      end~FI

      assign ~RESULT = ~SYM[1];
      // romFile end