From Gates to Embedded Systems: a Bottom-up Approach to Digital Design