Lab 05-GCD Calculator
Lab 05-GCD Calculator
Objectives
Introduction
The algorithm used to compute the GCD is as follows. Two numbers are compared ( x
= y ?). If so the the GCD is found. If x > y, then x = x - y. The two numbers are then
compared once again. If y > x, then y = y - x. The two numbers are then compared
once again. Here is and example of our algorithim:
x = 10
y = 2
Design Problems
The design of the GCD calculator should be divided into 2 parts - a controller and a
datapath. The controller is an FSM which issues commands to the datapath based on
the current state and the external inputs. This can be a behavioral description. The
datapath contains a netlist of functional units like multiplexors, registers, subtractors
and a comparator, and hence this design is structural. The controller basically steps
through the GCD algorithim shown above. If x = y, we have finished computing the
GCD, and we go to the final state and assert the data output line. The Datapath does
the actual GCD computation. It has the following components:
Mux: takes 2 4-bit inputs and one select line. Based on the select line, it
outputs either the 1st 4-bit number or the 2nd 4-bit number.
Register: Takes a 4-bit input, a load signal, reset, and a clock signal. If the load
signal is high and the clock is pulsed, it outputs the 4-bit number.
Comparator: Takes 2 4-bit numbers, and assets one of 3 signals depending on
whether the 1st number is less than, greater than or equal to the 2nd number.
Subtractor: Takes 2 4-bit numbers, subtracts the smaller number from the
larger.
Output Register: Holds the GCD value. When x = y the GCD has been found
and can be outputted. Because it is a register entity it should also take a clock
and reset signal.
Sample Structure of the Controller and Datapath