abstract digital circuit design