this is the top level block diagram