There are two primary, high-level entry styles we can consider (in practice use a blend of them ?):
There are also purely generative approaches, like the Lava and Chisel hardware construction languages (HCLs), that just 'print out' a circuit diagram. These cannot handle data-dependent IF statements. »Lava Compiler (Singh)
Using a parallel set of guarded atomic actions is pure RTL: which is declarative (since no threads).
(The core of Bluespec RTL is declarative and much nicer to use than pure RTL. It has a scheduler (cf DBMS query planner), a behavioural-sub language for when imperative is best, and an advanced generative elaborator that is functional language.)
All higher-level styles are amenabale to automatic datapath and schedule generation, including re-encoding and re-pipelining to meet timing closure and power budgets.
Classical HLS converts a behavioural thread to a static schedule (fixed at compile time).
|4: (C) 2012-17, DJ Greaves, University of Cambridge, Computer Laboratory.|