In the datapath diagram shown in Figure 3.15, why do we need the A and B registers in front of the ALU? Why do we need MAR? Under what conditions would you be able to do without with any of these registers?
What will be an ideal response?
We need the A and B registers in front of the ALU because ALU operations (ADD, NAND, A-B, A+1) require 2 operands, so we need temporary registers to hold at least one of them, since we can only get 1 register value out of the register file since there is only 1 output port (Dout). Also, with only 1 bus, there is only 1 channel of communication between any pair of datapath elements. Similarly, we need the MAR so there is a place to hold the address sent by the ALU to the memory. The only conditions where we would be able to do without some of these registers would be if there were multiple buses and/or multiple output ports from the register file, thereby allowing multiple value to be communicated simultaneously, so that the ALU could carry out its operations and the memory could look up data at a specified address.