the metaprogramming resources in Julia are very slick. I wrote a DSL that lets you write functions in that are then turned into synthesizable verilog modules. Implementing combinatorial logic (I haven't gotten to sequential yet) took about three days.