Using bottom-up design techniques in the synthesis of digital hardware from abstract behavioral descriptions