Homework2 is the synthesis and analysis part of Homework1. Refer to Homework1 for a description of the “Total Sum” operation. Shown in this homework is
the synthesis results of each of the three modules in the “Total Sum” design.
The Results of the synthesis for the “Total Sum” design are shown below. Multiple synthesis runs were completed varying from optimizing for Area, optimizing for
delay, and using the provided Auto optimization. Synthesis runs were also completed that consisted of 1, 2, 3, and 4 passes. Each of the synthesis optimizations
provided much of the same results. The only difference seemed to be in the amount of LC’s used. I believe the reason that many of the synthesis runs provided
the same results is because the design is rather small and simple – thus not requiring much effort to synthesize. The part chosen for the synthesis is an Altera part
with part + EPF10K10QC208. The synthesis properties were attained by running Exemplar’s Leonardo Spectrum, but due to license expirations the actual
shcematics shown below were synthesized in Synplicity’s synplify_pro. Table 1 shows a list of results acquired during the synthesis runs.
Property |
Usage |
LC’s |
33 |
Delay |
11 |
DFF’s |
26 |
TRI’s |
0 |
PI’s |
21 |
PO’s |
26 |
CASCADES |
2 |
Memory Bits |
0 |
CARRYS |
0 |
Table 1. Listing of synthesis output usage.
The first module is the ‘counter’ circuitry. The counter is 8 bits and starts at zero and counts up until a reset is asserted. This is done by implemening a full adder that
adds one to the count on each clock cycle. To think about an adder in hardware terms it is easiest to look at what the bit patterns would look like: Lets just look at
the first 10 clock cycles:
0000 bit0 à toggles on every clock cycle.
0001 bit1 à bit1 xor bit0
0010 bit2 à bit2 xor (bit0 and bit1)
0011 bit3 à bit3 xor (bit0 and bit1 and bit2)
0100 …
0101 …
0110 bit8 à bit8 xor (bit0 and bit1 and bit2 and bit3 and bit4 and bit5 and bit6 and bit7)
0111
1000
As shown in Figure 1, the RTL schematic for the Counter matches exactly what is expected from hardware synthesis.
The second module is the ‘equivalence tester’ circuitry. It compares the inputs which are both 8 bits: ‘input_count’ and ‘input_number’ and decides whether the
counter has counted up to the chosen input number. This is done by comparing each bit of the count and number and testing them for equality. In hardware this is
done by xor’ing each bit and and’ing the output of all of the xor gates together. If the output is ‘0’ then all bits were equal. This RTL schematic is shown in Figure 2.
The technology schematic is also shown for this module in Figure 2. The technology schematic is the RTL schematic mapped into the technology that is actually used
when an FPGA is created. As can be seen, the technology schematic is not easy to understand.
The last module is the ‘summation’ circuitry. It basically starts at a count of zero, and adds the numbers from 1 to a predetermined final_count. For example: if
final_count = 5, then final_output = 1+2+3+4+5 = 15. This is done by having one variable ‘temp_add’ that contains the amount to be added to the final_output at
each clock cycle. The temp_add variable starts at 0, then goes to 1,2,3,4…final_count. Thus, on each clock cycle, the temp_add variable is added to the
final_output as shown above. The temp_add variable in hardware is nothing new because it is incremented by one on each clock cycle in the same manner as the
‘counter’ circuitry. The final_output is implemented in hardware as a simple adder that continually adds the current final_output value to the temp_add variable on
each
clock cycle. This can be seen below in Figure 4.
Figure 3. Equivalence technology schematic