  Overlays are virtual, re-configurable architectures that overlay on top of
physical FPGA fabrics. An overlay that is specialized for an application, or a
class of applications, offers both fast reconfiguration and minimized
performance penalty. Such an overlay is usually implemented by hardware
designers in hardware "assembly" languages at register-transfer level (RTL).
  This short article proposes an idea for a software programmer, instead of
hardware designers, to quickly implement an application-specific overlay using
high-level customizable IPs. These IPs are expressed succinctly by a
specification language, whose abstraction level is much higher than RTL but can
nonetheless expresses many performance-critical loop and data optimizations on
FPGAs, and thus would offer competitively high performance at a much lower cost
of maintenance and much easier customizations.
  We propose new language features to easily put the IPs together into an
overlay. A compiler automatically implements the specified optimizations to
generate an efficient overlay, exposes a multi-tasking programming interface
for the overlay, and inserts a runtime scheduler for scheduling tasks to run on
the IPs of the overlay, respecting the dependences between the tasks. While an
application written in any language can take advantage of the overlay through
the programming interface, we show a particular usage scenario, where the
application itself is also succinctly specified in the same language.
  We describe the new language features for expressing overlays, and illustrate
the features with an LU decomposer and a convolutional neural network. A system
is under construction to implement the language features and workloads.
