Hardware compilation for software engineers: an ATM example