The problem concerns the design of a simple calculator for adding unsigned binary numbers. Operation is similar to a simple hand-held calculator, except all inputs and outputs are in binary, and the only operation is +. The calculator displays 8 bits with a binary point. The calculator has only five keys: 0, 1, . , +, and reset. Reset clears all registers and resets the calculator to the starting state. After entering the first number, the + key terminates that entry and allows a second number to be entered. When + is pushed again, the sum is put in the accumulator, and another number can be entered. This continues until the calculator is reset. Note that there is no equals key. You may assume that only normal input sequences occur, that is, a number will always be entered each time before + is pressed. Before addition can be done, the binary points of the numbers to be added must be aligned by shifting. If addition produces an overflow, the overflow should be corrected if possible. If not, set E = 1 to indicate an error.
The keys are not encoded. The calculator has six input signals: zero, one, dot, plus, reset, and V. Assume that all input signals are debounced, and V = 1 for one clock time whenever a key is pressed. Outputs to the display are 8 bits from the A register, RCTA (the number of bits to the right of the binary point), and E.
(a) Draw a block diagram for the calculator showing required registers, counters, adders, and so on. Show the necessary control signals and tell what they mean. For example, RSHA means right shift A. Specify the size of each register.
(b) Draw an SM chart for the main calculator code. Include inputting the binary numbers, aligning the binary points, adding, and correcting for overflow if possible. Define all control signals used.
(c) Write VHDL code for the main calculator module.
(d) Write a test bench for your VHDL module.