Hardware design and programming