High-level synthesis of synchronous pipelined circuits: A programming language approach