Computer Architecture: Pipelined and Parallel Processor